Forum: Mikrocontroller und Digitale Elektronik AVR ATmega32 Interrupt CTC


von fgutm (Gast)


Lesenswert?

Nabend,
ich versuch Timer1 im CTC-Mode zum Laufen zu bringen (leeres 
Assemblerprojekt in AVR-Studio 4.14). Zuerst hab ichs mit nem TOP-Wert 
in IRC1 versucht - und weil das net gleich lief hab ichs mit OCR1A als 
TOP-Wert probiert. Läuft zwar, aber springt zu T0_compare statt 
T1_overflow! Da ich den Timer0 net angerührt hab, raff ich grad gar nix 
mehr! Ist der Quelltext (Interruptliste) aus dem Datenblatt falsch?!? 
Denn ein ATmega32 16PU im SDK500 verhält sich genauso wie der Simulator.

.include "m32def.inc"
  jmp  RESET        ; Reset Handler
  reti; IRQ0        ; IRQ0 Handler
  reti; IRQ1        ; IRQ1 Handler
  reti; IRQ2        ; IRQ2 Handler
  reti; T2_compare  ; Timer2 Compare Handler
  reti; T2_overflow ; Timer2 Overflow Handler
  jmp T1_capture    ; Timer1 Capture Handler
  jmp T1_compareA   ; Timer1 CompareA Handler
  reti; T1_compareB ; Timer1 CompareB Handler
  jmp T1_overflow   ; Timer1 Overflow Handler
  jmp T0_compare    ; Timer0 Compare Handler
  jmp T0_overflow   ; Timer0 Overflow Handler

von Johannes M. (johnny-m)


Lesenswert?

Deine Vektortabelle ist ja auch komplett falsch! Warum übernimmst Du 
nicht die aus dem Datenblatt (und lässt die jmp s von nicht benutzten 
Interrupts z.B. auf eine bestimmte Adresse zeigen, an der ein reti oder 
wahlweise eine Fehlerbehandlungsroutine steht)? Der ATMega32 hat mehr 
als 8 KiB Flash und dementsprechend sind die Interrupt-Vektoren 32 Bit 
(2 Worte) breit, und nicht 16 Bit, weil sonst kein jmp hineinpassen 
würde. reti hat aber auch nur 16 Bit, weshalb die Tabelle schon nach 
dem ersten reti nicht mehr stimmt und weshalb da jeweils mindestens 
noch ein nop mit rein muss. Oder Du arbeitest direkt mit .org ...

von fgutm (Gast)


Lesenswert?

1000 Dank!!! Daran hätt ich zuletzt gedacht!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.