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
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 ...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.