Come gestire interrupts temporizzati anche complessi sul Raspberry PI RP2040: progettazione, schedulazione ed esecuzione del codice sorgente.
In un precedente articolo abbiamo parlato della gestione di interrupt a eventi con il Raspberry PI Pico. Oggi tratteremo invece gli interrupt temporizzati. Buon divertimento!
Interrupts temporizzati
Oltre a catturare gli interrupt da un ingresso digitale, puoi anche impostare interrupt periodici da un timer hardware in esecuzione sul Pico. Ad esempio, potremmo modificare il programma di lampeggiamento del LED per utilizzare un’interruzione del timer, in modo che funzioni senza la necessità di chiamate alla funzione sleep(). In questo modo si libera il loop eterno per altre attività.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
from machine import Pin, Timer from utime import sleep led = Pin('LED', Pin.OUT) def tick(timer): global led led.toggle() Timer().init(freq=2, mode=Timer.PERIODIC, callback=tick) x = 0 while True: print(x) x += 1 sleep(1.2) |
Giusto per rendere il programma un po’ più interessante, il ciclo eterno conta nella Shell, dimostrando che il timer non influenza negativamente qualsiasi altra cosa accada nel programma.
La funzione tick è associata a un’interruzione temporizzata utilizzando il metodo init su Timer. La frequenza dell’interruzione (volte al secondo) è specificata nel parametro freq . La modalità
PERIODIC significa che l’interruzione continuerà a ripetersi. Puoi anche specificare ONE_SHOT , se vuoi che l’interruzione temporizzata avvenga una sola volta. È una buona idea mantenere il codice in una routine di servizio di interruzione il più breve e veloce possibile, perché, anche se può sembrare che Pico stia facendo due cose contemporaneamente, il conteggio viene in realtà interrotto per un periodo molto breve di tempo mentre il LED viene attivato/disattivato nella funzione tick.
Rispetto alla versione a eventi, l’interrupt temporizzato garantisce un funzionamento mantenuto dal timer interno del microcontrollore, senza dover dipendere dalla cattura e riconoscimento di un evento esterno.
(Fonte: Programming the Pico)
Join our groups on Telegram…