Qual è il meccanismo utilizzato per conservare il registro di stato, sreg, in un microcontrollore AVR? RETI
implica che questi bit non sono in pila. Uno dei registri di scopo generale è anche lo sreg o qualcosa del genere?Conservazione della sreg negli interrupt AVR
8
A
risposta
11
Questo è spiegato in ogni scheda tecnica AVR. Per esempio a pagina 8 del ATtiny2313 datasheet si dice:
Il registro di stato non viene memorizzato automaticamente quando si entra in una routine di interrupt e restaurato al ritorno da un interrupt. Questo deve essere gestito dal software.
È possibile raggiungere questo obiettivo riporlo in un registro temporaneo:
interrupt:
in r16, SREG ; save SREG
...
out SREG, r16 ; restore SREG
reti
Si noti inoltre che se si sta accedendo registri che non sono utilizzate esclusivamente in questa routine di interrupt, è necessario salvare coloro, pure. Inoltre si può spingere il valore del SREG nello stack, se siete a corto di registri:
interrupt:
push r16 ; save global registers on stack
push r17
push r18
in r16, SREG ; save SREG
push r16 ; do this if you want to use r16 in your interrupt routine
...
pop r16 ; do this if you pushed SREG above
out SREG, r16 ; restore SREG
pop r18 ; restore global registers
pop r17
pop r16
reti
Per ulteriori informazioni consultare here.
1
alternativa
PUSH Rn
LDS Rn, SREG
PUSH Rn
e
POP Rn
STS SREG, Rn
POP Rn
sembra valido.
Il registro di stato non è un registro generale. Risiede nel file di registro I/O ed è accessibile tramite le istruzioni 'in' e' out'. –