I registri
La gestione dell' interrupt è effettuata con numerosi
registri :
-
RCON
-
INTCON
-
INTCON2
-
INTCON3
-
PIR1 e PIR2
-
PIE1 e PIE2
-
IPIR1 e IPIR2
La tabella seguente raccoglie questi registri :
Registro
|
Bit
7
|
Bit
6
|
Bit
5
|
Bit
4
|
Bit
3
|
Bit
2
|
Bit
1
|
Bit
0
|
RCON
|
IPEN
|
-
|
-
|
RI
|
TO
|
PD
|
POR
|
BOR
|
INTCON
|
GIE/GIEH
|
PEIE/GIEL
|
TMR0IE
|
INT0IE
|
RBIE
|
TMR0IF
|
INT0IF
|
RBIF
|
INTCON2
|
RBPU
|
INTEDG0
|
INTEDG1
|
INTEDG2
|
-
|
TMR0IP
|
-
|
RBIP
|
INTCON3
|
INT2IP
|
INT1IP
|
-
|
INT2IE
|
INT1IE
|
|
INT2IF
|
INT1IF
|
PIR1
|
PSPIF
|
ADIF
|
RCIF
|
TXIF
|
SSPIF
|
CCP1IF
|
TMR2IF
|
TMR1IF
|
PIR2
|
-
|
CMIF
|
-
|
EEIF
|
BCLIF
|
LVDIF
|
TMR3IF
|
ECCP1IF
|
PIR3
|
IRXIF
|
WAKIF
|
ERRIF
|
TXB2IF
|
TXB1IF
|
TXB0IF
|
RXB1IF
|
RXB0IF
|
PIE1
|
PSPIE
|
ADIE
|
RCIE
|
TXIE
|
SSPIE
|
CCP1IE
|
TMR2IE
|
TMR1IE
|
PIE2
|
-
|
CMIE
|
-
|
EEIE
|
BCLIE
|
LVDIE
|
TMR3IE
|
ECCP1IE
|
PIE3
|
IRXIE
|
WAKIE
|
ERRIE
|
TXB2IE
|
TXB1IE
|
TXB0IE
|
RXB1IE
|
RXB0IE
|
IPR1
|
PSPIP
|
ADIP
|
RCIP
|
TXIP
|
SSPIP
|
CCP1IP
|
TMR2IP
|
TMR1IP
|
IPR2
|
-
|
CMPIP
|
-
|
EEIP
|
BCLIP
|
LVDIP
|
TMR3IP
|
ECCP1IP
|
IPR3
|
IRXIP
|
WAKIP
|
ERRIP
|
TXB2IP
|
TXB1IP
|
TXB0IP
|
RXB1IP
|
RXB0IP
|
Processori con diverso set di periferiche avranno anche un
set di registri differente; pero, in linea di massima, i registri base sono
quelli indicati.
-
RCON contiene il bit IPEN di scelta del modo a priorità
e i 5 bit identificatori di evento di reset nel caso di RESET,
Sleep/wake-up , WDT, ecc.
-
I registri INTCON contengono i bit di controllo degli
interrupt "non periferici".
-
I registri PIR/PIE contengono i bit di controllo degli
interrupt "periferici".
-
I registri IPR contengono i bit di assegnazione del
livello di priorità degli interrupt "periferici".
I bit di controllo
Come detto prima, in generale le sorgenti di interrupt hanno
tre bits di controllo distribuiti nei vari registri :
-
un flag , il cui nome tipicamente termina con IF (Interrupt
Flag) che indica l' avvenuto evento di interrupt. Questo flag va a 1 a
seguito dell' evento e va riportato a zero a cura dell' utente (ad
esclusione dei casi in cui questo flag è di sola lettura e viene azzerato
automaticamente). Inoltre va considerato che , prima di abilitare o
testare una sorgente di interrupt, il relativo flag va azzerato onde
evitare di avere una segnalazione per un evento avvenuto prima dell'
abilitazione o del test.
-
un bit di abilitazione il cui nome tipicamente
termina con IE (Interrupt Enable) che consente di rendere attiva la
richiesta di interrupt.Il flag indicatore viene settato sia che il bit di
abilitazione sia attivato o no : nel caso in cui sia attivato, l' evento
di interrupt sarà abilitato alla chiamata dell' interrupt; se il bit di
abilitazione non è attivato il flag potrà essere usato come bit di
polling per l' evento.
-
un bit di assegnazione del livello di priorità, il
cui nome tipicamente termina con IP (Interrupt Priority). Questo
bit addizionale, che non esiste nella famiglia mid-range è legato alla
possibilità di avere due livelli di priorità nella gestione dell'
interrupt.
Una particolare avvertenza viene introdotta da Microchip
riguardo alla manipolazione dei bit nei registri di controllo delle sorgenti
di interrupt e, in particolare, a riguardo dell' istruzione MOVFF : ne
viene decisamente sconsigliato l' uso in questo ambito in quanto la sua
struttura 32 bits rischia di essere troncata da una richiesta di interrupt
attiva e ripresa alla sua uscita con i possibili disastri conseguenti.
Ovviamente la MOVFF può essere usata in ogni altro contesto anche se è
attivo l' interrupt. Quindi:
movff
setup,INTCON ; questa non è ammessa e va sostituita con
movff setup,w ;
queste due
movwf INTCON
movff INTCON,save ; questa è
consentita perchè non modifica il registro
; INTCON |
|
|
Copyright © afg. Tutti i diritti riservati.
Aggiornato il 09/12/10.
|