Fondamenti · Lezione 5 di 11 · circa 15 min
Timer e interrupt
Tempi esatti senza sprecare la CPU
Un ciclo di attesa tiene tutta la CPU occupata a non fare nulla, e i suoi tempi sono a occhio. Due funzioni hardware risolvono il problema: timer e interrupt.
Timer: un contatore che conta da solo
Il prescaler (PSC) rallenta il clock, e il contatore riparte da 0 ogni volta che raggiunge il valore di ricarica (ARR). Ogni ripartenza è un evento di update.
Interrupt: l’hardware batte sulla spalla della CPU
Quando succede un evento, la CPU mette in pausa il tuo codice, esegue una breve funzione chiamata routine di servizio dell’interrupt (ISR), poi riprende esattamente da dove si era fermata. Per chi viene dal software: una callback di evento, scatenata dall’hardware.
La vera app, nel tuo browser: questa lezione con la sua anteprima 3D su una scheda Raspberry Pi Pico simulata. Niente da installare, niente da collegare.
void TIM2_IRQHandler(void) { // the name comes from the vector table
if (TIM2->SR & (1 << 0)) { // update event flag
TIM2->SR &= ~(1 << 0); // clear it, or the ISR runs again forever
GPIOA->ODR ^= (1 << 5); // toggle the LED
}
}
// in main(): 16 MHz / 16000 = 1 kHz ticks, 1000 ticks = 1 second
TIM2->PSC = 15999;
TIM2->ARR = 999;
TIM2->DIER |= (1 << 0); // interrupt on update
TIM2->CR1 |= (1 << 0); // start counting
NVIC_EnableIRQ(TIM2_IRQn); // let the CPU accept it
- Tieni brevi le routine di interrupt: imposta un flag ed esci. Il lavoro pesante va nel ciclo principale.
- Azzera sempre il flag dell’interrupt.
- Dichiara volatile ogni variabile condivisa con un interrupt.
Domande da colloquio
- Qual è la differenza tra polling e interrupt?
- Perché una routine di interrupt deve essere breve?
- Come si scelgono PSC e ARR per un interrupt ogni secondo?
Qui non ci sono le risposte, apposta: prova prima a rispondere ad alta voce. Nell’app BoardPilot l’allenatore per i colloqui legge la tua risposta e ti dice cosa era giusto, cosa manca e cosa chiederebbe dopo un intervistatore senior (usa il fornitore di IA che scegli nell’app). Domande da colloquio sui sistemi embedded →
Parole chiave
Tabella dei vettori Timer Prescaler e auto-reload (PSC, ARR) Interrupt ISR (routine di servizio dell’interrupt) Polling volatile STM32
Nell’app le lezioni prendono vita
Nell’app le lezioni hanno demo interattive ed esercitazioni pratiche verificate sulla tua scheda. Queste pagine sono la versione da leggere: le demo sono descritte a parole e le esercitazioni richiedono l’app.