Tutorials - PIC18 by Data Sheet

 

INTERRUPT


Il ritorno dall' interrupt

Il ritorno dalle routine di interrupt avviene con la classica istruzione RETFIE, indipendentemente si tratti di alta o bassa priorità.

Rispetto ai mid-range, la famiglia PIC18F ha come caratteristica il salvataggio automatico dei registri principali WREG, STATUS e BSR se viene usata la modalità FAST RETURN.

La chiamata di interrupt nei PIC18 salva automaticamente i registri principali, cioè WREG, STATUS e BSR in un gruppo di registri speciali non accessibili e, con la dichiarazione 

      retfie FAST

si ottiene il restore automatico dei registri salvati. Molto comodo.

Questa possibilità esiste nel modo senza priorità e nel modo con, dove, però, riguarda solamente l' alta priorità. Questo richiede che eventuali salvataggi di registri per chiamate di interrupt a bassa priorità siano a cura dell' utente, evitando confusioni con il salvataggio e il restore automatico. 

Se questo non viene usato o si utilizza la doppia priorità, può rendersi necessario il salvataggio di questi e di altri registri, come nell' esempio seguente; l' istruzione MOVFF permette l' allocazione diretta in qualsiasi banco:

; save registers
    MOVWF  W_TEMP                 ; W_TEMP is in virtual bank
    MOVFF  STATUS, STATUS_TEMP    ; STATUS_TEMP located anywhere
    MOVFF  BSR, BSR_TEMP          ; BSR_TMEP located anywhere
; ....
; USER ISR CODE
; ....
; restore registers

    MOVFF BSR_TEMP, BSR            ; Restore BSR
    MOVF   W_TEMP, W               ; Restore WREG
    MOVFF  STATUS_TEMP, STATUS     ; Restore STATUS

 


Breve riassunto

Quanto visto si può riassumere come segue :

  • le sorgenti di interrupt nei PIC18F sono molteplici e si dividono in due famigli : gli interrupt non-periferici (Timer0, PORTB change, External INT) e quelli periferici (EUSART, MSSP, Timer 1,2 e 3, ecc).

  • nei PIC18F esistono due livelli di priorità dell' interrupt, uno alto e uno basso; ogni sorgente può essere assegnata ad un livello.
    Esiste però un bit IPEN che determina a priori se si desidera o no il doppio livello di priorità; infatti è possibile operare con un solo livello, con compatibilità alla famiglia mid-range.

  • ad ogni sorgente di interrupt sono associati tre bit :
    - un bit xxxIE che abilita o disabilita la funzione
    - un bit xxxIF che va a 1 quando l'interrupt relativo viene attivato . Questo bit va cancellato via   
     software
    - un bit xxxIP che assegna alla sorgente di interrupt una delle due priorità

  • come per i PIC mid-range, l' aver abilitato il singolo interrupt richiede ancora di abilitare un bit GIE che attiva la globalità degli interrupt presenti. Se sono impegnati interrupt periferici occorre abilitare anche il bit PEIE.
    Dato che la struttura prevede il doppio livello di priorità, nel caso esso sia scelto, si ha uno sdoppiamento del bit GIE in GIEH che abilita globalmente gli interrupt programmati ad alta priorità e un GIEL che abilita globalmente gli interrupt a bassa priorità.

  • I flag IF vanno azzerati a cura dell' utente dopo aver servito l' interrupt (e, per sicurezza, prima di abilitare la sorgente)

 


 

Copyright © afg. Tutti i diritti riservati.
Aggiornato il 09/12/10.