ELEMANIA
PIC16F690 - Interrupt: definizioni generali
Il meccanismo dell'interrupt

L'interrupt (interruzione) è un meccanismo per mezzo del quale la normale sequenza di esecuzione delle istruzioni del processore può essere interrotta dal verificarsi di un evento esterno. In risposta a una richiesta di interrupt il processore avvia automaticamente una routine detta routine di servizio dell'interrupt (interrupt service routine o ISR - sull'argomento interrupt vedi anche le lezioni nella sezione microprocessori).

A differenza delle normali routine, che vengono chiamate da programma con un'istruzione CALL, le routine di servizio degli interrupt vengono attivate da un evento hardware (per esempio la pressione di un pulsante, l'azzeramento di un contatore etc.). Si dice che gli interrupt sono eventi asincroni, cioè, in altre parole, non previsti all'interno del normale flusso di un programma.

Per fare un paragone, una normale chiamata a subroutine assomiglia a una telefonata che l'impiegato di un certo ufficio decide di fare a un certo punto del proprio lavoro. L'interrupt invece può essere paragonato a una telefonata imprevista ricevuta in un momento qualsiasi.

Routine di servizio dell'interrupt

La routine di servizo dell'interrupt (ISR, interrupt service routine) dev'essere scritta dal programmatore e in generale deve  rispondere all'evento che ha scatenato l'interrupt. Se per esempio l'interrupt è stato provocato da una caduta nell'alimentazione di un processore, la routine di servizio dovrà provvedere a salvare le informazioni importanti contenute nei registri e in RAM prima che il processore stesso smetta di funzionare. Se invece l'interrupt è stato causato da un timer che ha terminato un conteggio, la routine di servizio potrebbe per esempio acquisire un dato in ingresso. Questi sono ovviamente solo due esempi fra i moltissimi possibili.

Inoltre, siccome l'interrupt è un evento imprevedibile che può verificarsi in qualsiasi punto dell'esecuzione di un programma, la routine di servizio dovrà in generale salvare da qualche parte il contenuto dei registri interni del microprocessore, in modo da poterli ripristinare al termine dell'interruzione stessa. In caso contrario infatti il programma interrotto non sarebbe in grado di riprendere l'esecuzione come se non fosse accaduto nulla, poiché si ritroverebbe con i dati modificati dalla routine di interrupt.

Infine la routine di servizio deve azzerare la segnalazione della richiesta di interrupt. Infatti l'evento che richiede l'interrupt (per esempio la pressione di un pulsante) attiva un bit di flag per segnalare la richiesta. Questo bit, quando l'interrupt viene servito, dev'essere resettato dalla routine di servizio: in caso contrario al termine dell'esecuzione della ISR, ci si ritroverebbe con una richiesta di interrupt pendente (che in realtà è sempre quella precedente).

Dunque possiamo così sintetizzare la sequenza di operazioni che in generale devono essere svolte da una ISR:

  1. salvataggio dei registri interni del processore;

  2. identificazione della causa dell'interrupt (in caso di più sorgenti di interrupt);

  3. reset dei bit di flag di richiesta interrupt;

  4. risposta all'interrupt;

  5. ripristino dei registri salvati al punto 1

  6. ritorno dall'interrupt.

Interrupt mascherabili e non mascherabili

In generale un interrupt si dice mascherabile quando può essere disabilitato da programma: in pratica quando un interrupt viene mascherato, eventuali richieste di interrupt da quella sorgente verranno ignorate dal processore.

Viceversa un interrupt non mascherabile è un interrupt che non può essere disabilitato, ma deve essere servito in ogni caso.

 

precedente - successiva

Sito realizzato in base al template offerto da

http://www.graphixmania.it