Tutorials - PIC18 by Data Sheet

 

pag 91 - INTERRUPT


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 :

  1. 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.

  2. 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.

  3. 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.