Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Interrupt: varie ed eventuali

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

3
voti

[1] Interrupt: varie ed eventuali

Messaggioda Foto UtentePaolino » 16 gen 2013, 23:47

A seguito di un commento di Foto UtenteMatteo1991 a questo articolo di Foto Utenteildani - Un paio di precisazioni. Per quanto la gestione degli interrupt, i PIC16F hanno solo un vettore di interrupt, ossia una sola locazione alla quale salta il program counter a seguito di un interrupt. I PIC18F hanno invece due vettori, locazioni alle quali si salta in funzione della priorità (bassa o alta) assegnata alla sorgente di interrupt. Per quanto riguarda i PIC a 16bit e quelli a 32 bit, la faccenda è un po' più complicata, ma non ne parliamo qui.

Nei PIC16F, quindi, qualunque sorgente di interrupt porta il program counter ad una unica routine. Ma come discriminare un interrupt da un altro? Come si fa a capire quale sia stata la causa scatenante l'interrupt? Si va ad interrogare i bit di interrupt flag relativi agli interrupt che sono stati abilitati nel codice sorgente: quando si trova un IF (interrupt flag) a valore logico alto, allora BINGO! Lo si resetta e si eseguono le operazioni che è necessario svolgere.

Quindi, per esempio, nel main() si abilitano alcuni interrupt:

Codice: Seleziona tutto
void main (void)
{
..............
..............
..............
T0IE = 1;
TMR1IE;
INTIE = 1;
..............
..............
..............
}


Poi, la routine di interrupt gestisce i vari casi:

Codice: Seleziona tutto
void interrupt InterruptServiceRoutines (void)
{
    if (T0IF)
    {
        T0IF = 0;
        ...
        ...
        ...
    }

    if (TMR1IF)
    {
        TMR1IF = 0;
        ...
        ...
        ...
    }

    if (TMR2IF)
    {
        TMR2IF = 0;
        ...
        ...
        ...
    }
}


Spero di aver aiutato a fugare qualche dubbio.

Ciao.

Paolo.
"Houston, Tranquillity Base here. The Eagle has landed." - Neil A.Armstrong

-------------------------------------------------------------

PIC Experience - http://www.picexperience.it
Avatar utente
Foto UtentePaolino
32,6k 8 12 13
G.Master EY
G.Master EY
 
Messaggi: 4226
Iscritto il: 20 gen 2006, 11:42
Località: Vigevano (PV)

0
voti

[2] Re: Interrupt: varie ed eventuali

Messaggioda Foto UtenteCandy » 16 gen 2013, 23:59

E Qui si impara a programmare ed ogttimizzare il codice... Tra registri da salvare e ripristinare oltre che molte if da controllare, si rischia che ad ogni uscita sia gia' ora di rientrare...
Avatar utente
Foto UtenteCandy
32,5k 7 10 13
CRU - Account cancellato su Richiesta utente
 
Messaggi: 10123
Iscritto il: 14 giu 2010, 22:54

0
voti

[3] Re: Interrupt: varie ed eventuali

Messaggioda Foto Utenteildani » 17 gen 2013, 0:26

Candy ha scritto:E Qui si impara a programmare ed ogttimizzare il codice... Tra registri da salvare e ripristinare oltre che molte if da controllare, si rischia che ad ogni uscita sia gia' ora di rientrare...

Non ci puoi mettere queste pulci nell'orecchio e poi lasciarci a bocca asciutta senza un esempio :-)
Avatar utente
Foto Utenteildani
1.565 4 10
 
Messaggi: 30
Iscritto il: 23 mar 2009, 22:06

0
voti

[4] Re: Interrupt: varie ed eventuali

Messaggioda Foto UtenteTardoFreak » 17 gen 2013, 1:11

Beh, non è che ci sia molto da "esempiare". Si mettono i test dei bit delle interrupt a priorità più elevata (decise dallo sviluppatore) per prime, quelle a bassa priorità o più lente dopo.
E se sono troppe e troppo frequenti tali da ingolfare il micro vuol dire che ... bisogna cambiare micro :mrgreen:
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
Avatar utente
Foto UtenteTardoFreak
73,9k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15754
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

0
voti

[5] Re: Interrupt: varie ed eventuali

Messaggioda Foto Utenteildani » 17 gen 2013, 1:14

TardoFreak ha scritto:Beh, non è che ci sia molto da "esempiare". Si mettono i test dei bit delle interrupt a priorità più elevata (decise dallo sviluppatore) per prime, quelle a bassa priorità o più lente dopo.
E se sono troppe e troppo frequenti tali da ingolfare il micro vuol dire che ... bisogna cambiare micro :mrgreen:

Sicuro che Candy intendesse solo questo?
Io mi immaginavo ragionamenti contorti e codice assembly per far girare la ISR più velocemente possibile ?%
Avatar utente
Foto Utenteildani
1.565 4 10
 
Messaggi: 30
Iscritto il: 23 mar 2009, 22:06

0
voti

[6] Re: Interrupt: varie ed eventuali

Messaggioda Foto Utentesimo85 » 17 gen 2013, 1:30

Le interrupt devono essere il più corte possibile. Se non è Assembly è C, e dipende dal compilatore come assembla o traduce il codice secondo quali istruzioni.
Avatar utente
Foto Utentesimo85
30,9k 7 12 13
Disattivato su sua richiesta
 
Messaggi: 9927
Iscritto il: 30 ago 2010, 4:59

0
voti

[7] Re: Interrupt: varie ed eventuali

Messaggioda Foto UtenteMatteo1991 » 17 gen 2013, 1:37

Idee, progetti, esperimenti, prove.... Il mio cervello è in overflow! =P~
Tornando a noi, cosa succede se accade un altro interrupt durante l'esecuzione della isr?
Avatar utente
Foto UtenteMatteo1991
406 2 4 12
Frequentatore
Frequentatore
 
Messaggi: 280
Iscritto il: 28 giu 2012, 16:38

0
voti

[8] Re: Interrupt: varie ed eventuali

Messaggioda Foto UtenteTardoFreak » 17 gen 2013, 1:44

Che viene richiamata di nuovo e sul PIC16 sono dolori. :mrgreen:
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
Avatar utente
Foto UtenteTardoFreak
73,9k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15754
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

0
voti

[9] Re: Interrupt: varie ed eventuali

Messaggioda Foto UtenteMatteo1991 » 17 gen 2013, 1:51

Mentre con le priorità come funziona? se viene chiamata un isr ad alta priorità il micro non considera un eventuale interrupt a bassa priorità? :shock:
Avatar utente
Foto UtenteMatteo1991
406 2 4 12
Frequentatore
Frequentatore
 
Messaggi: 280
Iscritto il: 28 giu 2012, 16:38

0
voti

[10] Re: Interrupt: varie ed eventuali

Messaggioda Foto UtenteTardoFreak » 17 gen 2013, 2:04

Le priorità nel PIC16 non esistono. Quello che intendevo dire è che, visto che per riconoscere quale interrupt ha generato l' evento devo andare a fare un po' di verifiche, verificherò prima le interrupt che IO SO che necessitano di essere servite per prime, magari perché più importanti o più frequenti.
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
Avatar utente
Foto UtenteTardoFreak
73,9k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15754
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

Prossimo

Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 8 ospiti