Forum: Mikrocontroller und Digitale Elektronik Program Counter auslesen nach WDG Interrupt


von avr-gast (Gast)


Lesenswert?

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.

von Jonathan S. (joni-st) Benutzerseite


Lesenswert?

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.

von spess53 (Gast)


Lesenswert?

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

von Jonathan S. (joni-st) Benutzerseite


Lesenswert?

Ü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

von Sauger (Gast)


Lesenswert?

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