Chiarimento interrupt

9 Anni 2 Mesi fa #1 da firstcolle
Chiarimento interrupt è stato creato da firstcolle
Buongiorno,
domanda da principiante....

in un progetto utilizzo un interrupt causato dal timer1. In un determinato punto del programma devo disabilitare l'interrupt (non il timer). cosa succede se, mentre l'interrupt è disabilitato, il timer arriva alla fine?
- mette comunque a un il relativo flag TMR1IF oppure ricomincia il conteggio e basta?
- in caso metta comunque a 1 il flag cosa succede quando riattivo l'interrupt? viene processato come al solito oppure viene ignorato fino ad un successivo interrupt causato mentre l'interrupt è attivo?

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • firstcolle
  • Avatar di firstcolle
  • Platinum Member
  • Platinum Member
Di più
9 Anni 2 Mesi fa #2 da alfa75
Risposta da alfa75 al topic Chiarimento interrupt
Ciao firstcolle

se l'interrupt è disabilitato tramite il bit T0IE il flag T0IF non verrà portato ad 1 e di conseguenza non si scatenerà la chiamata alla funzione di interrupt

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • alfa75
  • Avatar di alfa75
  • Platinum Member
  • Platinum Member
Di più
9 Anni 2 Mesi fa #3 da firstcolle
Risposta da firstcolle al topic Chiarimento interrupt
sono abbastanza sicuro che T0IF venga comunque portato a 1 anche con T0IE = 0, lo conferma anche Mauro nel libro alla sezione dedicata agli interrupt.
resta da chiarire se l'interrupt viene gestito una volta messo T0IE = 1 o se sia necessario un nuovo interrupt per gestirlo e di fatto perdere il precedente interrupt

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • firstcolle
  • Avatar di firstcolle
  • Platinum Member
  • Platinum Member
Di più
9 Anni 2 Mesi fa #4 da alfa75
Risposta da alfa75 al topic Chiarimento interrupt
hai ragione te il flag viene messo a 1 indipendentemente dall'attivazione del bit T0IE
per quanto riguarda la gestione dell'interrupt una volta riattivato T0IE secondo me considerando che T0IF resta sempre a 1 dopo il primo overflow del timer l'interrupt non dovrebbe perdersi

qui non si finisce mai di imparare :)

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • alfa75
  • Avatar di alfa75
  • Platinum Member
  • Platinum Member
Di più
9 Anni 2 Mesi fa #5 da Mauro Laurenti
Risposta da Mauro Laurenti al topic Chiarimento interrupt
Confermo che il bit di flag IF viene attivato indipendentemente dal bit di enable della periferica.
Questo vale sia per il timer che per altri moduli.
Il bit di enable e' posto in AND con il flag IF e permette il passaggio dello stesso alla logica di interrupt.

Inoltre, se il falg IF e' attivo quando il bit di enable viene attivato, avviene subito una chiamata all'ISR.
Per questo e' bene azzerare il bit IF prima di attivare il relativo interrupt.
In alcuni casi, l'ISR potrebbe comunque filtrare vecchi interrupt non piu' validi (dipende dal software) per cui non e' strettamente necessario azzerare il bit IF prima di attivare l'interruzione.

Quanto detto vale ingenerale per tutte le MCU, PIC16, PIC18, dsPIC...MSP430...

Il flag IF potrebbe infatti essere utilizzato per applicazioni dove non sono usate le interruzioni ma il polling della periferica stessa.

Saluti,

Mauro
Ringraziano per il messaggio: alfa75

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • Mauro Laurenti
  • Avatar di Mauro Laurenti
  • Moderator
  • Moderator
Di più
Moderatori: Mauro LaurentiPinnaStefAMatteo Garia

Registrati al sito

Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.

Registrati al sito LaurTec.

Login