2012-01-17 13 views
8

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

+1

Il registro di stato non è un registro generale. Risiede nel file di registro I/O ed è accessibile tramite le istruzioni 'in' e' out'. –

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.

Problemi correlati