MSP430: Architettura e periferiche Ultra Low Power (Parte 1)

Valutazione attuale: 4 / 5

Introdotti gli strumenti con i quali poter programmare gli MSP430 è possibile fare un ulteriore passo in avanti, ma prima di salutare il mondo è bene dare uno sguardo all'architettura degli MSP430 e alle periferiche disponibili. La descrizione s´incentrerà prevalentemente sulla famiglia MSP430F2xx ed in particolare la Value Line. Ciononostante s’introdurranno anche le differenze e miglioramenti apportati nelle altre famiglie, in maniera da poter permettere al lettore un’appropriata scelta dell'MSP430 che permette di risolvere le problematiche associate alla propria applicazione.
 

Prima di iniziare

Sebbene l´architettura delle varie famiglie MSP430 sia in pratica uguale, è bene precisare che la parola “architettura” fa riferimento alla CPU. Le periferiche e moduli che arricchiscono il microcontrollore non sono necessariamente uguali come la CPU, per cui come visto in precedenza, sono presenti molte varianti di MSP430. Sebbene questo capitolo possa essere una valida guida all'architettura e periferiche degli MSP430 non deve essere considerata l´unica fonte d´informazione, ma piuttosto un punto di partenza. Molti dettagli sui registri e le impostazioni sono volutamente tralasciati per non rendere il capitolo troppo pesante ma anche per non ripetere dettagli che saranno trattati nei capitoli dedicati alle varie periferiche. Come detto ogni famiglia MSP430 possiede una “Family User Guide”. La User Guide contiene la descrizione dell'architettura e introduce le varie periferiche e registri presenti nella famiglia stessa. Non tutte le periferiche introdotte in una User Guide sono effettivamente presenti in ogni microcontrollore. Normalmente, per ragioni di prezzo, sono presenti diverse varianti di microcontrollori che possono o meno avere determinate periferiche.
Oltre alla User Guide, bisogna fare riferimento al datasheet del relativo microcontrollore utilizzato. Nel datasheet sono presenti altre informazioni specifiche del dispositivo o variante della famiglia. In particolare la piedinatura, periferiche effettivamente disponibili, le caratteristiche elettriche e configurazioni dei pin associati alle periferiche. Questa organizzazione della documentazione permette di avere un´unica User Guide per ogni famiglia e avere un datasheet con informazioni essenziali.
In un primo momento, per chi fosse abituato con i PIC18 può risultare un po' scomodo, ma quando si ha a che fare con più di un microcontrollore, rappresenta una soluzione ottimale oltre che da un punto di vista logistico anche da un punto di vista ambientale. Questo stesso approccio è utilizzato dalla Microchip per i microcontrollori con architettura 16 e 32 bit.
 

MSP430: Architettura della CPU

Gli MSP430 sono stati progettati Ultra Low Power sin dalla prima versione, infatti uno dei motti TI è affermare che Ultra Low Power è nel DNA degli MSP430. Effettivamente, come vedremo in varie parti del corso tutte le scelte sono guidate tenendo a mente la necessità di essere Ultra Low Power. Architettura e periferiche giocano un ruolo importante al fine di avere un sistema a basso consumo. Infatti ciò  che alla fine interessa non è solo che la CPU consumi poco ma che l’intero sistema abbia consumi contenuti. Nella prima parte del corso abbiamo brevemente introdotto l’architettura degli MSP430 accennando solamente che era di tipo RISC (Reduced Instruction Set Computer) von-Neumann a 16 bit, come riportato in Figura 1.

Figura 1: Architettura di von-Neumann usata negli MSP430
Figura 1: Architettura di von-Neumann usata negli MSP430.

Maggiori dettagli possono essere visti nello schema a blocchi di un MSP430 riportato in Figura 2. E’ possibile vedere la presenza di un solo bus d’indirizzo (MAB, Master Address Bus) e un Master Data Bus MDB. Entrambi sono a 16 bit ma il MDB ha alcune parti ad 8 bit per ospitare le periferiche ad 8 bit. Si noti che l’interfaccia JTAG utilizzata per la programmazione e Debug del sistema ha accesso ad entrambi i bus permettendo di effettuare Debug real Time senza interferire con l'esecuzione del programma.

Figura 2: Schema a blocchi di un MSP430
Figura 2: Schema a blocchi di un MSP430.

L’architettura di von-Neumann ha la caratteristica di avere una sola area di memoria dove risiedono sia il programma che i dati. Questo, se da un lato non rappresenta un’ottimizzazione da un punto di vista della manipolazione dei dati, come per l’architettura Harvard,  rappresenta una soluzione ottimale per ridurre al minimo la complessità della CPU. Ridurre la complessità si traduce nell’utilizzare meno “circuiteria” e questo permette, in generale, di ridurre i consumi.  La scelta dell’architettura von-Neumann discende anche da una ragione di semplicità concettuale che permette ai programmatori di utilizzare direttamente l’Assembly senza eccessivo stress. A supporto di questa semplicità gli MSP430 possiedono solo 27 istruzioni, che permettono praticamente di essere imparate a memoria in poche ore di pratica. Sebbene i compilatori in C integrati in CCS (Code Composer Studio) e IAR siano ottimizzati per raggiungere un buona efficienza di compilazione, scrivere in l’Assembly permette in generale di raggiungere codici ottimizzati all’estremo (presupponendo che il programmatore sia esperto). Personalmente ho incontrato molte società che scrivono il codice in Assembly al fine di ottimizzare il codice (ottimizzare significa spesso cercare di ottenere un codice di dimensioni ridotte o un codice che permetta di ridurre i consumi). Dunque avere un’architettura semplice che permetta di scrivere codice anche in Assembly può tornare utile. Personalmente però, se non necessario, prediligo scrivere il codice in C poiché mantiene una più facile leggibilità del codice, ed eventualmente impostare il compilatore al fine di ottimizzare in termini di dimensioni del codice, velocità o consumi. Alcune volte le ragioni dello scrivere il codice in Assembly risiedono nel fatto che i compilatori Assembly sono gratuiti mentre quelli per linguaggio ad alto livello sono a pagamento.    
Grazie ad un’unica area di memoria è stato inoltre possibile ottimizzare il trasferimento dati rendendo l’architettura “ortogonale” nel senso che i dati possono essere letti, scritti trasferiti da varie parti di memoria per mezzo di una sola istruzione MOV. Le varie tipologie d’indirizzamento o addressing modes sono sette, ma rimando alla user guide per maggior dettagli (scrivendo il codice in C, l'utilizzo delle varie modalità è trasparente). Ogni istruzione, sebbene l’architettura degli MSP430 sia a 16 bit, può essere utilizzata sia in operazioni a 16 bit che a 8 bit. Per la natura dell’architettura MSP430, molti registri sono a 16 bit, ma in diverse applicazioni ritorna utile scrivere e leggere dati in formato ad 8 bit (in Assembly le istruzioni su byte sono caratterizzate dall’avere un .B dopo l’istruzione stessa).
L’architettura MSP430, sebbene sia semplice a tal punto da permettere di essere programmata in Assembly, è ottimizzata per permettere a compilatori di alto livello di realizzare codice ottimizzato. In particolare possiede 16 registri interni nominati da R0 a R15 che permettono un movimento rapido dei dati nello svolgimento di molte operazioni. In Figura 3 è riportato un dettaglio dei registri interni.

Figura 3: MSP430, rappresentazione dei registri R0-R15

Figura 3: MSP430, rappresentazione dei registri R0-R15.

Il registro da R4 a R15 sono per utilizzo generico mentre i registri R0 – R3 hanno una funzione speciale. R0 rappresenta il Program Counter, ovvero il registro che punta all'indirizzo di memoria che contiene la prossima istruzione da eseguire. Sebbene l’architettura sia a 16 bit la memoria è in realtà strutturata in byte, dunque ogni istruzione occupa due byte o meglio 2,4,6 a seconda della tipologia dell'istruzione stessa. Durante l’esecuzione di un programma il Program Counter viene automaticamente incrementato di 2 al fine di puntare l’istruzione successiva, in particolare il suo bit meno significativo è sempre 0 ovvero allineato ad indirizzi pari.
Il registro R1 rappresenta lo Stack Pointer, ovvero il registro che tiene l’indice sullo Stack in cui vengono memorizzati gli indirizzi di ritorno dopo l’esecuzione di una subroutine d’interrupt o semplice funzione (anche le istruzioni PUSH e POP fanno uso dello Stack).  Diversamente dai PIC lo Stack non ha uno spazio limitato e predefinito bensì deve essere inizializzato all’avvio di un programma. In Assembly questo è obbligatorio mentre in C viene fatto in automatico e posto alla fine della memoria RAM. Questo deriva dal fatto che lo SP viene decrementato ad ogni nuovo indirizzo da memorizzare nello Stack e incrementato quando questo deve essere riscritto sul Program Counter (non ho considerato le istruzioni PUSHe POP che permettono di memorizzare nello Stack anche dei dati)
Il registro R2 rappresenta lo Status Register, ovvero il Registro di Stato (si veda Figura 4).

Figura 4: MSP430 Status Register (Registro di Stato)
Figura 4: MSP430 Status Register (Status Register).

Questo registro è di particolare importanza poiché oltre ad avere i bit classici di uno Status Register (Z, N, C) possiede anche i bit relativi alle modalità a bassa potenza, come vedremo nel paragrafo dedicato alle modalità Ultra Low Power, questa scelta permette di semplificare il passaggio da una modalità all’altra.
Il registro R3 rappresenta il Costant Generator ovvero generatore i costanti. Tale registro è tanto semplice e banale quanto efficace. Ha il compito di generare le costanti 0,1,2,4,8. Se un’istruzione contiene una di queste costanti permette di ridurre la dimensione di quest’ultima risparmiando il byte per memorizzare la stessa.   
Arrivati a questo punto aggiungiamo qualche nota relativamente alle poche istruzioni presenti negli MSP430 e diciamo che paradossalmente non possiede l’istruzione d’incremento INC, decremento DEC e clear CLR,  oltre ad altre che ci si aspetterebbe di trovare in un microcontrollore sia esso da 4bit o 64 bit!    
Gli MSP430 oltre alle 27 istruzioni base, possiedono altre 24 istruzioni dette emulate. La parola emulata non deve però trarre in inganno, infatti si tenderebbe a pensare agli emulatori software che rallentano il PC, mentre le istruzioni emulate non portano in generale svantaggi.
Normalmente molti microcontrollori hanno registri con la possibilità di essere incrementati direttamente in hardware oltre che ad essere decrementati o resettati (clear) . Questo si traduce spesso nella possibilità di eseguire le istruzioni sopra elencate in un solo ciclo istruzione. Gli MSP430 non supportano questo ma in Assembly si può scrivere:


CLR Registro
INC Registro
DEC Registro


Queste istruzioni, come detto, sono emulate (il compilatore le sostituisce in automatico) per mezzo dell’istruzione


MOV R3, registro


La cui lunghezza dell’istruzione è di una word (16 bit) e viene eseguita comunque in un solo ciclo istruzione! Si capisce quindi che l’utilizzo dell’emulazione non ha portato svantaggi, ma permette di avere grazie all’utilizzo del Costant Generator (registro R3) un hardware efficiente. Ottimizzazioni facendo uso dell’emulazione sono fatte in automatico dal compilatore ogni qual volta si scriva o si faccia uso di costanti 0,1,2,4,8.
Quanto appena descritto rappresenta l'architettura degli MSP430 (non me ne vogliate per l’essere stato troppo breve). Prima di andare avanti vorrei però descrivere un altro aspetto importante. Gli MSP430 sono a 16 bit, ed in particolare l’Address Bus (MAB, Master Address Bus) e il Data Bus (MDB, Master Data Bus) sono a 16bit. Questo significa che è possibile indirizzare uno spazio di memoria fino a 64KB (tra Flash e RAM). I primi MSP430 avevano una memoria Flash di pochi KB e solo in seguito si è arrivati a 64KB per poi superarli. Gli MSP430 sin dall’inizio sono nati senza paginazione della memoria, ovvero, diversamente dai PIC16, in cui è per esempio necessario impostare il banco della memoria (chi ha programmato in Assembly i PIC16 sa di cosa parlo), gli MSP430 hanno un unico spazio di memoria, dunque questo semplifica molto la stesura dei programmi anche in Assembly. Ciononostante quando la memoria degli MSP430 ha superato i 64KB indirizzabili dai 16bit, ci si è trovati ad un bivio, …sein oder nicht sein, das ist die Frage (probabilmente era esattamente questa la domanda dei progettisti tedeschi!). La risposta è stata quella di mantenere gli MSP430 senza paginazione della memoria; questa scelta ha richiesto notevoli modifiche alla CPU. L’estensione della memoria ha portato alla nascita dell’architettura MSP430X (estesa) a 20 bit che permette un indirizzamento di memoria massima fino a 1MB. Tutti i registri interni (e quasi tutti i registri delle periferiche) ad eccezione dello Status Register sono stati estesi da 16 a 20 bit, inoltre sono state introdotte nuove istruzioni al fine di poter gestire operazioni a 20bit. Per esempio l’istruzione MOV esiste ora oltre che con MOV.B anche come MOVX (le istruzioni estese  sono caratterizzate dal fatto che terminano con X). I dettagli sulle nuove istruzioni disponibili possono essere trovati all’interno della User Guide. Qualche nota merita il fatto che lo il Program Counter, nel caso si verifichino delle interruzioni, viene salvato come in precedenza ma i 4 bit in eccesso, sono salvati all’interno dello Status Register, nei bit che nella vecchia architettura risultavano riservati. Questo permette di risparmiare l’over head derivante dal salvataggio dei 20 bit del PC, infatti lo Status Register viene salvato anche nell'architettura MSP430 Standard. Questa è la ragione per cui lo Status Register è  rimasto a 16 bit, infatti in questo modo salvare il PC e lo SR non porta nessun over head rispetto alla struttura tradizionale degli MSP430. Lo spezzettamento e ricomposizione del PC nello Stack è trasparente al programmatore, dunque non c'è nulla di cui preoccuparsi.
Il PC nel caso di semplici chiamate di funzioni è invece salvato facendo uso di 4 byte, ovvero senza utilizzare lo Status Register, che infatti non viene messo nello Stack .  
Alcune istruzioni con il formato X sono state ottimizzate al fine di ridurre l'over head derivante dalla nuova architettura a 20 bit. Queste ottimizzazioni permettono di eseguire un’applicazione praticamente in maniera inalterata sia in CPU con architettura a 16 bit classica che con architettura a MSP430X (almeno da un punto di vista temporale).  
La nuova architettura è talmente trasparente al programmatore che anche sul catalogo non sono riportati i dettagli sul tipo di CPU, MSP430 o MSP430X, ma vedendo la dimensione della memoria è subito possibile dire che l’architettura è sicuramente MSP430X qualora la memoria Flash + RAM siano maggiori di 64KB. Per memoria inferiore a 64KB non è detto..., prendendo per esempio la nuova famiglia MSP430FR5739 con memoria FRAM, pur essendo a 16KB possiede un’architettura MSP430X. Infatti  gli MSP430 con FRAM hanno un’architettura ereditata dalla famiglia MSP430F5xxx.
Dal lato della programmazione, utilizzare un’architettura MSP430 o MSP430X non porta molti cambiamenti ma effettivamente bisogna saperlo al fine di una corretta programmazione, qualora si voglia ottimizzare il codice o si voglia mantenere compatibilità tra un codice scritto per MSP430 e MSP430X. In particolare i compilatori permettono di selezionare se utilizzare lo spazio di memoria ridotto o esteso. Se si fa uso del modello ridotto, compatibile sia con gli MSP430 che MSP430X è possibile fare dei salti di memoria in un range di 64KB, per cui bisogna fare attenzione che tutte le funzioni di gestione delle interruzioni risiedano nella parte bassa della memoria flash, come anche puntatori o variabili di “grosse dimensioni”. Nel caso degli MSP430 della Value Line utilizzati nella scheda LaunchPad, non ci sono problemi o domande da porsi visto che l’architettura è di tipo MSP430 e non estesa. L’utilizzo o meno di un’architettura MSP430X si sente di più qualora si stia scrivendo il codice in Assembly. Infatti in questo caso è necessario specificare il tipo di chiamata alle funzioni, estesa o non estesa, come anche utilizzare il formato corretto con o senza X. Qualora si faccia uso di un’architettura MSP430X  ma si utilizzano solo istruzione Assembly dell’architettura MSP430, il programma è più facilmente trasferibile, in quanto compatibile, all’interno della famiglia MSP430 e MSP430X. Maggiori dettagli sull’architettura MSP430X possono essere trovati nella User Guide della famiglia MSP430F5xx.
 

Organizzazione della Memoria

Dal primo sguardo sull’architettura abbiamo visto che gli MSP430 possiedono una sola area di memoria e un solo bus d’indirizzamento, per cui l’architettura è di tipo di von-Neumann. La memoria interna pur avendo un'unica area d’indirizzamento è suddivisa in varie parti. La divisione è differente a seconda della MCU, ma in grandi linee è possibile mostrare le principali varianti (per maggiori dettagli far sempre riferimento al datasheet del microcontrollore utilizzato).
L’organizzazione più semplice della memoria è quella presente nella Value Line. In particolare lo spazio di memoria è diviso in area Flash e RAM. Osservando la tabella è possibile vedere lo spazio dedicato all’Interrupt Vector e alla memoria codice (ovvero dove andrà il codice da noi scritto). Tale memoria risiede in Flash. In seguito è presente la memoria nominata Information Memory (Memoria Informazioni), questa pur essendo di tipo Flash ha qualche peculiarità. La memoria programma è divisa infatti in pagine da 512 byte mentre la memoria per le informazioni in pagine da 64 Byte. Questo è stato fatto per semplificare il processo di scrittura in tale area di memoria. In particolare potrebbe essere utilizzata come memoria EEPROM ma pur sempre considerando che per cancellare una locazione di memoria è necessario cancellare una pagina intera. Le pagine dell’Information Memory sono nominate A,B,C e D. La pagina A ha la caratteristica di possedere i valori di calibrazione che sono salvati all’interno dell’MSP430 (i valori presenti dipendono dalla MCU). Di seguito è presente la RAM, di dimensioni variabili a seconda della variante del microcontrollore. In ultimo sono presenti i registri associati alle periferiche interne ovvero gli SFR (Special Function Registers). Maggiori dettagli sono riportati in Tabella 1.

Tabella 1: Organizzazione della memoria negli MSP430G2xx1
Tabella 1: Organizzazione della memoria negli MSP430G2xx1.

L’organizzazione della memoria è leggermente diversa per dispositivi non della Value Line e con memoria inferiore a 64KB (in Tabella 2 è riportato un esempio). Si noti in particolare la presenza della Boot Memory. Questa area di memoria è di tipo ROM ovvero scritta direttamente da TI in fase di produzione dell’MSP430. Quest’area possiede il boot loader anche noto come boot strap loader. La versione standard fa uso della porta seriale per poter programmare il dispositivo senza far uso del programmatore. Varianti della famiglia MSP430F5xx e MSP430F6xx con modulo USB, possiedono il boot loader USB e l’area definita Boot Memory è di tipo Flash.

Tabella 2: Organizzazione della memoria negli MSP430F23x0
Tabella 2: Organizzazione della memoria negli MSP430F23x0.

Un’ultima organizzazione della memoria che è bene tener conto è quella dei dispositivi che hanno un’area di memoria maggiore di 64KB, ovvero con architettura MSP430X (alcuni dettagli sono riportati  in Tabella 3).
La differenza maggiore, oltre alla diversa organizzazione degli spazi, legata alle nuove dimensioni, è la presenza della memoria RAM mirrored, ovvero riportata a specchio. La sua presenza serve solo per compatibilità con l’architettura MSP430 e il desiderio di non avere la memoria RAM spezzettata in vari spazi della memoria.

Tabella 3: Organizzazione della memoria negli MSP430F2x1x
Tabella 3: Organizzazione della memoria negli MSP430F2x1x.

Un’architettura come quella degli MSP430, sebbene l’area Flash e RAM sia distinta, permette facilmente di eseguire il programma sia in Flash che in RAM. Normalmente i programmi che vengono eseguiti in RAM consumano molta meno potenza. Grazie ai soli 100nA necessari per mantenere i dati in memoria RAM trovare applicazioni in RAM, ovvero che partano dalla memoria Flash e che vengano poi caricati in RAM, non è  inusuale qualora si faccia uso degli MSP430.
In ultimo, ma non meno importante è bene ricordare che i nuovi MSP430 con FRAM rivoluzionano  totalmente la filosofia di organizzazione della memoria. Infatti la memoria FRAM può essere usata sia in veste di memoria Flash, RAM ed EEPROM ed è possibile partizionarla a piacimento come si farebbe con un hard disk. Gli MSP430FR5xx possiedono comunque della memoria RAM aggiuntiva ma il compilatore Code Composer Studio, ogni qual volta venga creata una variabile la alloca in FRAM e non in RAM!  
 

MSP430: Clock

Il clock, o meglio i modulo dedicato per generare il clock è di particolare importanza ai fini di ottimizzare i consumi. In Figura 5 è riportato come esempio il Basic Clock Module+ utilizzato nell’architettura MSP430F2xx (anche nella Value Line salvo qualche eccezione).

Figura 5: Modulo Basic Clock+  interno agli MSP430F2xx
Figura 5: Modulo Basic Clock+  interno agli MSP430F2xx.

Si può subito notare che sono presenti tre diversi clock nominati MCLK (Master Clock), ACLK (Auxiliary Clock) e SMCLK (Sub Main Clock). La CPU utilizza MCLK mentre le periferiche possono utilizzare a seconda delle esigenze sia ACLK che il SMCLK. Questo permette di ottimizzare le risorse energetiche disattivando un clock e mantenerne attivi altri per il funzionamento delle periferiche d’interesse. La caratteristica del MCLK e SMCLK è di poter operare al massimo della frequenza di clock, che a seconda dei modelli può variare da 8MHz-25MHz. L'ACLK è invece caratterizzato dal poter operare a più basse frequenze, normalmente 32KHz, ovvero frequenze tipiche per far operare un Real Time Clock Calendar. Gli MSP430 possiedono anche tutta la circuiteria per poter collegare direttamente un quarzo al microcontrollore e a seconda dei modelli sono anche presenti delle capacità interne che possono essere selezionate al fine di risparmiare ulteriori componenti esterni.
I vantaggi derivanti da un clock flessibile non fanno riferimento alla sola possibilità di poterlo selezionare ma anche nella maniera con cui sono generati. In particolare gli MSP430 possiedono un DCO (Digital Controlled Oscillator) che permette di generare un clock ad alta frequenza ed impostabile on the fly. Tra le sue caratteristiche principali vi è quella di attivarsi in pochi us (particolarmente importante in applicazioni Ultra Low Power dove bisogna attivarsi rapidamente ed andare in Sleep Mode nel più  breve tempo possibile) . Il DCO è inoltre collegato ad un modulatore che permette di alternare la frequenza del DCO tra due step n e n+1. Per esempio supponiamo di impostare il nostro DCO ad una frequenza 1MHz e il passo successivo sia ipoteticamente a 1,1MHz. Il modulatore permette di variare il clock da 1MHz a 1,1MHz ogni x periodi impostabili nel registro MODx. Questa variazione del clock crea un jitter voluto, che in alcuni casi potrebbe anche non essere desiderato, ma permette di limitare le radiazioni elettromagnetiche generate dal clock della CPU. Infatti, l’energia irradiata dovuta al clock interno viene a distribuirsi su uno spettro più ampio riducendo il picco massimo, in altre parole semplificando eventuali certificazioni Europee (CE) o Americane (FCC).  
Il DCO possiede alcuni valori calibrati a determinate frequenze, che se caricate negli appositi registri di controllo permettono di impostare il DCO ad un valore noto di frequenza con una tolleranza di pochi  centesimi percentuale. Il valore di frequenza calibrato può essere trovato all’interno dell’header file associato al microcontrollore utilizzato. Gli MSP430 della serie Value Line possiedono solo il valore 1MHz quale valore calibrato.
Volendo andare Ultra Low Power è possibile utilizzare anche un secondo oscillatore interno nominato VLO (Very Low Power Oscillator). La sua caratteristica è di avere una bassa frequenza (tipicamente 12KHz) con pessima tolleranza ma che richiede una bassa potenza operativa (si ricorda che ingenerale lavorare a frequenze più basse permette di ridurre i consumi) .
Si capisce quindi che in applicazioni in cui la base tempi non sia richiesta accurata è possibile far uso di questo oscillatore che assieme al DCO permettono praticamente all’MSP430 di eseguire un programma senza richiedere necessariamente un quarzo esterno.
Gli MSP430 della famiglia MSP430F4xx possiedono un’architettura più complessa per il clock ed in particolare possiedono un FLL (Frequency Lock Loop) molto simile ad un PLL (Phase Lock Loop) ma il cui controllo avviene sulla frequenza e non sulla fase. Questo permette di semplificare l’architettura di controllo ottenendo consumi ridotti. La famiglia MSP430F5xx e MSP430F6xx possiedono il modulo Unified Clock System (UCS) come riportato in Figura 6. La caratteristica di questa architettura, più recente, è quella di essere più flessibile, infatti ogni uscita del clock può essere impostata su un qualunque clock interno o esterno (per tale ragione, come per gli indirizzamenti interni si parla anche di struttura Ortogonale, ovvero tutte le combinazioni sono possibili). Anche in questo caso sono presenti diverse variazioni a seconda del modello MSP430 utilizzato.
Il modulo UCS ha introdotto anche nuove funzioni per garantire il clock in casi di emergenza e on demand, ovvero quando una periferica viene attivata e richiede un clock disattivo questo viene attivato anche se una particolare modalità low power lo aveva disattivato.

Figura 6: Modulo Unified Clock System interno agli MSP430F5xx e MSP430F6xx
Figura 6: Modulo Unified Clock System interno agli MSP430F5xx e MSP430F6xx.

Alte frequenze di clock si traducano in un elevato MIPS (Milioni di istruzioni per secondo) ma il modo con cui questo avviene dipende molto dall’architettura. Gli MSP430 possiedono un ciclo istruzione pari alla  frequenza di clock quindi MIPS e Frequenza di clock coincidono. Strutture come PIC18 hanno invece il famoso numero 4 che divide il clock, ovvero sono necessari 4 cicli di clock per compiere una istruzione. Questo si traduce che i MIPS attuali di un PIC18 sono 4 volte inferiori alla frequenza di clock. I PIC24 e dsPIC possiedono un’altra architettura ed in particolare hanno bisogno di 2 cicli di clock per istruzione. In Tabella 4 sono riportati alcuni dettagli relativi ad altre architetture (Informazione prelevata dall’Application Note della Texas Instruments)
 

Tabella 4: Rapporto cicli Istruzione e cicli Clock

Tabella 4: Rapporto cicli Istruzione e cicli Clock.

Oltre a quanto appena visto è necessario anche considerare il numero di cicli istruzioni necessari per compiere una determinata operazione. Infatti a seconda delle operazioni da compiere sono necessari un numero di cicli istruzioni diversi. Dettagli sul numero di cicli istruzioni sono riportati nella User Guide della famiglia utilizzata. Per esempio l’istruzione MOV R5,R8 richiede una sola word per memorizzare l'istruzione ed un solo ciclo istruzione (per gli MSP430 equivalente a dire in un ciclo di clock). Da questo esempio si capisce anche la ragione per cui l’istruzione emulata INC che fa utilizzo del Constant Generator non porta alcun degrado in performance rispetto ad una vera istruzione INC implementata a livello di registro. A solo scopo di completezza, si fa notare che le fasi tipiche per eseguire un'istruzione, ovvero fase di Fetch (caricamento), Decode (decodifica) ed Execute (esecuzione), non sono identificabili qualora si abbia l'esecuzione di un'istruzione in un solo ciclo di clock. Ciononostante, sebbene il tutto avvenga via hardware,  concettualmente le tre fasi esistono ancora seppur non distinguibili temporalmente.

 

Forum

Per qualunque domanda e chiarimento potete scrivere sul primo Forum in Italia dedicato agli MSP430.

 

Bibliografia

[1] : Home page dei microcontrollori MSP430 (Texas Instruments)

[2] : User Guide MSP430x2xx

[3] : User Guide MSP430x5xx MSP430x6xx

[4] : Scarica Code Composer Studio

[5] : Wiki Page per il LaunchPad

 

Capitoli del Corso MSP430

Corso

Data

 

Titolo


Parte I 16-10-2011   MSP430: Microcontrollori Ultra Low Power
       
Parte II 23-10-2011   MSP430: Strumenti per Iniziare
       
Parte III 11-12-2011   MSP430: Code Composer Studio e LaunchPad
       
Parte IV- 1 15-04-2012   MSP430: Architettura e periferiche Ultra Low Power (Parte 1)
       
Parte IV- 2 22-04-2012   MSP430: Architettura e periferiche Ultra Low Power (Parte 2)
       
Parte V
13-05-2012   MSP430: Hello World
       
Parte VI 01-07-2012   MSP430: Utilizzo ed impostazione delle Porte I/O
       
Parte VII 18-11-2012   MSP430: Il modulo di distribuzione del Clock e modalità Ultra Low Power
       
Parte VIII 10-03-2013   MSP430: Le interruzioni e le modalità Ultra Low Power
       
Parte IX-1 13-10-2013   MSP430: Utilizzo del Modulo Timer_A (Parte 1)
       
Parte IX-2 13-10-2013   MSP430: Utilizzo del Modulo Timer_A (Parte 2)
       
      ...nuovi in arrivo...tieniti informato

 


You don`t have permission to comment here!

Registrati al sito

Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.

Registrati al sito LaurTec.

Login

Ultimi messaggi

  • Nessun messaggio da mostrare.

Online

Abbiamo 137 visitatori e nessun utente online