Introduzione
Nello scorso articolo siamo andati ad approfondire l'argomento ADC mettendo poi a confronto la funzione analogRead con quella digitalRead, mettendo in evidenza le differenze e ambiti di applicazione.
In questo articolo andremo a descrivere gli interrupt ovvero le interruzioni, mostrando uno sketch che ci permetterà di utilizzare questa funzione.
Materiale necessario
Per il nostro progetto abbiamo bisogno del seguente materiale:
- Software Energia
- Scheda di sviluppo LaunchPad MSP430 con MSP430G2553
Cos'è un Interrupt?
Da Wikipedia:
“In informatica, un interrupt o interruzione è un segnale asincrono che indica il “bisogno di attenzione” da parte di una periferica finalizzata ad una particolare richiesta di servizio, un evento sincrono che consente l’interruzione di un processo qualora si verifichino determinate condizioni (gestione dei processi) oppure più in generale una particolare richiesta al sistema operativo da parte di un processo in esecuzione.”
Nell'ambiente di sviluppo Energia l'interrupt è una funzione speciale che opportunamente settata permette di eseguire una determinata parte di programma, ovvero funzione, assegnata all'evento dell'interruzione stessa. Utilizzando un linguaggio da programmatore si dice che una funzione viene collegata all'evento di interruzione, ovvero “attached”.
Per capire al meglio questa opzione modificherò uno Sketch d'esempio presente all'interno del sito Energia.nu. La sintassi utilizzata da energia per definire una interruzione è:
attachInterrupt(interrupt, function, mode)
In particolare i parametri forniti alla funzione sono:
Interrupt: il pin di interrupt a cui attaccare la funzione specificata.
Function: la funzione da richiamare quando si verifica un evento sul pin specificato.
Mode: la modalità in cui l’interrupt è attivato.
In particolare il parametro Mode può assumere i seguenti valori:
- LOW: genera un evento di interrupt ogni volta che il pin ha valore logico basso.
- CHANGE: genera un evento di interrupt quando il pin cambia stato.
- RISING: genera un evento di interrupt quando il pin passa da LOW a HIGH.
- FALLING: genera un evento di interrupt quando il pin passa da HIGH a LOW.
Esempio Applicativo
Per prima cosa andiamo a scrivere lo Sketch di esempio nel quale utilizzeremo la funzione interrupt.
Figuta 1: Sketch.
Nella prima parte dello Sketch abbiamo inizializzato le variabili.
A differenza degli esercizi che abbiamo mostrato fino ad ora, in questo esempio assegneremo ad una variabile oltre che il singolo valore numerico anche uno stato logico.
Nel caso specifico la variabile “state” è stata impostata con lo stato HIGH mentre la variabile “count” al valore 0. Come possiamo vedere nella Figura 2 abbiamo inizializzato anche la funzione “attachInterrupt” rispettando la sintassi che abbiamo descritto poco fa.
Figura 2: Prima parte dello Sketch.
In particolare i parametri passati alla funzione sono:
Il pin al quale è collegato l'interrupt, nel nostro caso con il comando PUSH2 abbiamo legato il pulsante “S2” presente sulla scheda LauchPad, all'attivazione dell'interrupt.
La funzione da eseguire in caso di chiamata dell'interrupt, ovvero la funzione blink.
La tipologia di interrupt FALLING. Abbiamo utilizzato questa funzione visto che i pulsanti sono collegati a massa quindi si verifica lo stato LOW quando questi sono premuti.
Nella seconda parte dello Sketch viene eseguito il programma principale in un loop infinito.
In particolare nel loop viene stampata su terminale la variabile state, la quale non viene cambiata nel loop in questione ma dalla funzione d'interrupt.
Figura 3: Seconda parte dello Sketch.
Nel momento in cui si preme il pulsante S2, viene generato un segnale d'interruzione che permette di richiamare la funzione blink, nella quale viene invertito lo stato della variabile state.
In questo caso lo stato del LED subisce un'inversione di stato dato che l'operatore matematico ! indica una negazione. In particolare se state vale HIGH dopo l'inversione vale LOW e viceversa.
A questo punto non vi resta che lanciare il programma e divertirvi ad apportare tutte le modifiche che volete.
Spero di essere riuscito a trasmettervi in maniera semplice ed accurata il funzionamento delle interruzione, in caso contrario potete sempre postare i vostri dubbi sul Forum.
Buon lavoro!
Autore : Andrea Valeriani
Bibliografia
- Ambiente di sviluppo Energia – per MSP430
- Scheda di sviluppo LauchPad MSP-EXP430G2
- Corso di programmazione MSP430 basato su Code Composer Studio e LaunchPad MSP430
- Adattatore schede Arduino – LauchPad
- Domande? Forum MSP430
-
Fritzing : programma per realizzare le immagini per l'assemblaggio di uno schema elettrico.
{jcomments on}
RE: Energia 09 - Gestione delle Interruzioni
Ok grazie, ma nello specifico di ogni interrupt programmabile ci sono interrupt con priorità più alta ?RE: Energia 09 - Gestione delle Interruzioni
agric detto: Ciao agric.L'approccio è identico a quello utilizzato nella gestione del singolo.Nel caso dei multipli dovrai però aggiungere i termini di attivazione di ogni interrupt andando a considerarli come singoliGestione multipla interrupt
Ok perfetto.Una sola domanda, l'esempio mostra una sola chiamata , nel caso di più interrupt programmati Qual è l'approccio?You don`t have permission to comment here!