Hallo, ich arbeite mit einem ATmega1284P und möchte gerne den PC auslesen wenn der Watchdog Interrupt zuschlägt. Da ich ja 128k Flash habe ist der PC wohl nicht mehr 16bit Breit sondern 17bit. Kann man sich den PC Counter in der WDG Interrupt Routine überhaupt retten, wenn ja wie würde man das am elegantesten machen in C (avr-gcc)? (per inline asm, oder gibts noch einen anderen schöneren weg?) Bin für jeden tipp Dankbar.
Hallo, im Interrupt sollte das ganz einfach gehen: Du holst dir die Rücksprungadresse aus dem Stack, schreibst sie zurück und verarbeitest die Daten. Also etwa so (ASM): Interrupt: POP r16 POP r17 PUSH r17 PUSH r16 Verarbeitung RETI In R16:R17 steht jetzt immernoch die Adresse, wo der Interrupt zugeschlagen hat.
Hi >Da ich ja 128k Flash habe ist der PC wohl nicht mehr 16bit Breit sondern >17bit. Nein, der Speicher ist in Word organisiert. Da reichen 16 Bit. MfG Spess
Übrigens: Der PC ist im ATMega1284P auch nur 16 Bit breit, da der Flash ja Wortweise (65535 * 16 Bit = 128 kB) adressiert wird. EDIT: Da war spess53 wohl ein paar Sekunden schneller :D
Nabend, Du solltest den PC innerhalb der WDG Interrupt Routine auf dem Stack finden. MfG
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.