- Messaggi: 362
- Ringraziamenti ricevuti 39
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?
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
- Autore della discussione
- Platinum Member
Riduci
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
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
- Platinum Member
Riduci
Di più
- Messaggi: 527
- Ringraziamenti ricevuti 86
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
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
- Autore della discussione
- Platinum Member
Riduci
Di più
- Messaggi: 362
- Ringraziamenti ricevuti 39
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
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
- Platinum Member
Riduci
Di più
- Messaggi: 527
- Ringraziamenti ricevuti 86
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
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.
Moderatori: Mauro Laurenti, Pinna, StefA, Matteo Garia
Registrati al sito
Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.