Interrupt

In occasione di una richiesta di interrupt il uC interrompe ciò che stava facendo per andare a rispondere alla periferica che ha lanciato la richiesta.
In questo modo fintantoché la periferica non ha nulla da dire al uC quest%u2019ultimo può occuparsi di altre cose e non deve perdere tempo per andare a interrogare le varie periferiche e vedere se hanno bisogno (polling).
L%u2019interrupt è un evento con priorità assoluta che deve essere gestito via software.
Un interrupt può essere di tipo asincrono, generato da una periferica esterna e non prevedibile dal sistema, oppure sincrono, cioè generato da una periferia interna tipo il Timer0 per esempio.
Nel PIC16F877 a seguito di un qualsiasi interrupt il PC va a puntare la locazione 0004h denominata Interrupt Vector.
A quella locazione ci sarà la routine di riconoscimento dell%u2019interrupt e della sua gestione, siccome la locazione è unica per tutte le periferiche alla locazione 0004h (Interrupt Vector) ci dovrà essere una routine che riconosca la periferica che ha lanciato l%u2019interrupt (potrebbe infatti verificarsi il caso che più periferiche possano lanciare la richiesta di interrupt).
Il fatto che esista una sola locazione è una limitazione in termini di velocità per il fatto che il uC, a seguito di un interrupt, deve andare a scoprire, in caso di concomitanza di periferiche che possano richiedere l%u2019interrupt, chi lo ha richiesto.
Un buon programma deve rimanere dentro le routine di interrupt il meno possibile, tutto ciò che può essere differito deve essere eseguito nel programma principale. Molto spesso nella routine di gestione dell%u2019interrupt ci si limita ad alzare uno o più flag attraverso i quali il programma principale può fare determinate operazioni, differite, per soddisfare la richiesta di interrupt.
Un buon programma ha molte routine di gestione dell%u2019interrupt ma brevi.
Prima di entrare nella routine di gestione dell%u2019interrupt il uC salva il contentuto del PC nello stack.
Se mentre il uC sta gestendo un interrupt ne riceve un altro, prima finisce quello che stava facendo, poi va a vedere chi ha richiesto il successivo interrupt.
I flag di abilitazione degli interrupt ed i flag del loro avvento sono contenuti nel registro INTCON.
A seguito di un interrupt andrà interrogato questo registro per vedere quale periferica ha richiesto l%u2019interrupt.
Vedere pag. 20 e 131 del datasheets.


Stampa la pagina