Scopri le nuove caratteristiche del nuovo microcontroller da Microchip ATtiny 817e scopri come è possibile utilizzare questa soluzione ricca di funzionalità per le tue applicazioni.
Trattamento interruzione nel nuovo ATtiny817
Scritto da: Arild Rodland, marketing di prodotto per la divisione MCU08 di Microchip Technology Inc.
Il trattamento dell'interruzione è diventato molto più intelligente nei nuovi microcontroller (MCU) AVR® e ATtiny817 da Microchip è il primo dispositivo AVR a sfruttare questi cambiamenti.
Chi ha confidenza con le varie famiglie di AVR dovrebbe sapere che, tradizionalmente, il trattamento dell'interruzione per i dispositivi tinyAVR® e megaAVR® è stato molto diretto, ove tutte le interruzioni hanno una priorità predefinita in cui il minimo indirizzo di vettore di interruzione avrà la massima priorità. Per la più grande famiglia XMEGA® MCU, il sistema di interruzione contiene un controller multilivello programmabile (PMIC) che consente all'utente di assegnare le interruzioni a tre livelli di priorità, consentendo di personalizzare la coda di priorità.
Il nuovo controller interruzione su ATtiny817 è una via di mezzo tra questi due. Quindi, guardiamo e scopriamo cosa c'è di nuovo.
Priorità interruzione
Le impostazioni predefinite su ATtiny817 verranno impostate con una tabella di vettori di interruzione con priorità statica dove il minimo indirizzo di vettore di interruzione ha la massima priorità. Vedere Figura 1. Questo è identico agli altri tinyAVR.
FIGURA 1: PRIORITÀ INTERRUZIONE UTILIZZANDO LO SCHEMA DI PRIORITÀ STATICA
Ci sono un paio di potenziali problemi con la priorità statica. In primo luogo, se si dispone di molte interruzioni con priorità elevata, è possibile finire in una situazione in cui l'interruzione ad alta priorità blocca costantemente le interruzioni a bassa priorità. Il risultato è il bisogno di interruzione. Ciò significa che non si ha abbastanza tempo per servire tutti le interruzioni e le priorità minime non riceveranno mai alcun servizio. Al fine di risolvere questo problema, ATtiny817 utilizza un regime prioritario dinamico (round-robin). Se si abilita questo schema rotatorio, l'ultima interruzione assistita avrà priorità minima quando si verifica un'altra interruzione. Vedere Figura 2.
FIGURA 2: SCHEMA DI PRIORITÀ DINAMICA ROUND-ROBIN
Controller interruzione a due livelli
Lo schema di priorità round-robin consente di interrompere la necessità, ma cosa si deve fare se si desidera dare una priorità periferica massima rispetto a quella definita nella tabella del vettore di interruzione?
Anche se il team di progetto ha inserito una priorità molto sensibile e condivisa tra le periferiche, capiamo che c'è sempre la possibilità che alcune persone abbiano bisogno di dare una priorità massima rispetto a quanto definito dalla priorità di interruzione predefinita.
In ATtiny817 abbiamo la possibilità di elevare un vettore di interruzione selezionabile per avere priorità massima. Per utilizzare questa funzione, occorre semplicemente scrivere l'indirizzo del vettore desiderato nella registrazione LVL1VEC e questa interruzione avrà la priorità.
Tabella vettore compatta
C'è una nuova funzionalità su tinyAVR, chiamata Tabella Vettore Compatta (TVC). L'utilizzo di questa funzione troncherà tutti le interruzioni all'interno di tre vettori. Uno per le interruzioni non-mascherabili (per ATtiny817: interruzione di errore CRC) uno per tutte le interruzioni di Level0 (per ATiny817: tutte le interruzioni sono di livello predefinito level0) e uno per le interruzioni di level1 (per ATtiny817: a una singola interruzione può essere assegnata la massima priorità inserendo il suo vettore indirizzo nella registrazione LVL1VEG).
Questa funzione può essere utile quando si utilizzano solo alcune interruzioni. Ridurre la tabella del vettore a soli tre vettori significa che la tabella di interruzione occuperà meno localizzazioni Flash, liberando essenzialmente questo spazio da poter utilizzare per il codice utente. Tuttavia, se si utilizza questo approccio, si dovrà aggiungere un codice addizionale nel gestore di interruzione per scoprire quale interruzione effettivamente richiede il servizio. Ciò aggiungerà tempo, sia per la scrittura del codice, sia per i test di verifica, per il completamento del vostro progetto. Per questa ragione, la tabella del vettore compatta è più utile se vengono utilizzati solo poche interruzioni.
Funzione avanzata: Se il round-robin non è abilitato, la registrazione LVL0PRI è ancora attiva e definirà ancora il punto di partenza dell'interruzione di priorità minima, quindi, se lo si desidera, è possibile spostare staticamente la priorità nella tabella del vettore. Ad esempio, è possibile spostarla per dare alla USART la massima priorità. Il valore predefinito di questa registrazione è 0x00, quindi dopo il reset, il vettore di interruzione minimo avrà la massima priorità come previsto.
Spostamento della priorità della tabella vettore
Chiuderò questo articolo con un trucco o caratteristica non menzionata esplicitamente nella scheda dati. Quando si utilizza la priorità round-robin, è presente una registrazione denominata LVL0PRI che contiene l'indirizzo dell'ultima interruzione eseguita. Questa sarà l'interruzione con la priorità minima quando si seleziona quale interruzione occorre eseguire subito dopo. Se questo valore viene modificato, si condizioneranno direttamente le interruzioni che hanno la priorità minima e massima.
Come mostrato qui, il nuovo ATtiny187 MCU offre potenti funzionalità di gestione delle interruzioni che consentono ai progettisti di controllare la priorità e il tempo di risposta dell'interruzione per soddisfare i loro requisiti di progetto. Ora, l'ultima domanda è: che cosa si può creare per sfruttare queste funzionalità?