Architettura del dsPIC33F: il DSC della Microchip

Una analisi dettagliata dell’architettura interna del DSC (Digital Signal Controller) dsPIC33F di Microchip: un single chip con funzioni DSP ad elevate prestazioni per controllo industriale e sistemi audio. I DSC integrano al loro interno  un potente microcontrollore 16bit e un DSP. La famiglia dsPIC33F  comprende due categorie, la prima con una periferica CODEC per applicazioni audio o di riconoscimento vocale. La seconda comprende una periferica PWM a otto canali e si adatta ad applicazioni industriali per controllo motore o sistemi di conversione di potenza. Le tabelle 1 e 2 elencano i dettagli delle due famiglie con i principali IC.

Introduzione

I dsPIC33F raggiungono velocità di 40Mips, la dimensione della memoria flash può arrivare a  256Kbyte  mentre  la  memoria  RAM a 30KByte. Tutti i dispositivi includono le periferiche di comunicazione più comuni come UART SPI e I2C. Su alcune versioni sono presenti 1 o 2 periferiche CAN configurabili  secondo la specifica 1.2,  2.0A, 2.0B. Completano la dotazione il convertitore  A/D completamente configurabile per acquisizione a 10 o 12 bit con un massimo di 32 ingressi, l’oscillatore interno e un controller DMA con bus dedicato, per il trasferimento dati tra periferiche e memoria RAM senza impegnare la CPU. L’alimentazione del dsPIC33F è a 3.3V ma gli ingressi digitali sono 5V tolerant.

LE CARATTERISTICHE PRINCIPALI

La CPU

Il dsPIC33F è un dispositivo con architettura Harvard modificata: memoria dati (RAM) e programma (Flash) sono separate ed accessibili mediante  due bus distinti.  Lo spazio indirizzabile nella memoria flash è di 4Mb con accesso a 24bit. In realtà l’allineamento  delle word  è a 32bit  ma il byte alto della upper word non  è implementato.  I 2MB inferiori sono disponibili per l’indirizzamento di memoria programma  mentre i 2MB superiori sono riservati per l’accesso a registri di configurazione del dispositivo. L’architettura  Harvard modificata  consente la presenza di dati anche all’interno della memoria programma. L’accesso a questi dati può avvenire in due modi: utilizzando le instruction table oppure modificando la mappatura dello spazio dati. Le instruction table sono istruzioni dedicate per la lettura/scrittura delle word della memoria flash. Queste istruzioni sono utilizzate anche nella programmazione della memoria flash.  La mappatura della memoria invece abilita la visibilità di una pagina della memoria flash nei 32Kbyte superiori dello spazio dati. Questa tecnica permette  di  accedere a dati  statici o tabelle di setup memorizzate nella memoria flash. L’accesso a 24bit nello spazio programma si ottiene unendo un registro di pagina a 8 bit, che rappresenta la parte alta dell’indirizzo e definisce la pagina di 16Kword di flash visibile nello spazio dati, con i 15bit inferiori dell’indirizzo dello spazio dati. Un’altra interessante caratteristica del dsPIC33F è la possibilità di programmare la memoria flash in-circuit  con una semplice interfaccia tre pin Data/Clock/Reset.

Tabella 1. La famiglia dsPIC33F con periferica

Tabella 1. La famiglia dsPIC33F con periferica

 

Tabella 2. La famiglia dsPIC33F con periferica per controllo motore

Tabella 2. La famiglia dsPIC33F con periferica per controllo motore

La memoria RAM è invece accessibile a 16bit per uno spazio totale di indirizzamento a 64Kbyte. I 32Kbyte inferiori sono riservati alla memoria RAM, i 32Kbyte superiori sono riservati per il program memory visibility  descritto  in  precedenza. Per l’accesso al data space ci sono due blocchi d’indirizzamento indipendenti X e Y che permettono alla CPU l’accesso simultaneo a due operandi. In un solo ciclo la CPU del dsPIC33F può accedere in lettura alla memoria programmi e in lettura/scrittura alla memoria dati. La CPU include anche un motore DSP costituito  da  un moltiplicatore  17x17  bit in grado di svolgere moltiplicazioni con e senza segno, un barrel shifter che può  eseguire lo shift di  una word  in  un  ciclo e un’unità  somma/sottrazione a 40bit con due accumulatori.  Rispetto al suo predecessore dsPIC30F sono stati introdotti dei nuovi bit per il controllo dell’errore di overflow nel calcolo aritmetico, nelle operazioni di shift o divisione. Contrariamente a quanto avviene per i bit d’errore della CPU questi bit di stato una volta attivati restano  attivi  anche se si eseguono nuove  operazioni matematiche. Solo cancellando il flag MATHERR la condizione di errore viene rimossa. Il flag MATHERR può generare un trap interrupt per attivare una procedura di recovery dall’errore.

Il DMA

Il DMA controller permette di trasferire dati in diverse modalità tra la RAM del dsPIC33F e le periferiche utilizzando un bus dedicato che non interferisce con la CPU. Le modalità di trasferimento sono:

  • One-shot block transfer che trasferisce un singolo blocco dati;
  • Continuous block transfer che trasferisce un determinato buffer in modo ciclico riprendendo dallo start address una volta raggiunto il termine del buffer;
  • PingPong transfer che utilizza alternativamente due buffer distinti mappati sulla ram DMA per il trasferimento dei dati.

Il controller include otto canali configurabili separatamente per diverse modalità di trasferimento dati. In caso di collisione il canale con numero più basso guadagna l’accesso alle risorse. Il DMA controller  e la CPU condividono  una dual port RAM da 2Kbyte che permette l’accesso contemporaneo ai dati. Il bit DMAFLT segnala condizioni di errore o collisione nell’accesso alla RAM da parte del DMA e della CPU (figura 3).

Figura 3. Accesso al program space attraverso il data space

Figura 3. Accesso al program space attraverso il data space

L’Interrupt controller

La tabella di interrupt del dsPCI33F è formata da 118 vettori di interrupt e 8 vettori non mascherabili associati ai trap flag che sono attivati in presenza di un errore. Il DSC implementa  67 interrupt diversi. Gli interrupt possono essere abilitati singolarmente e ad ogni vettore è possibile associare 8 livelli di priorità gestita poi dall’interrupt controller.  La priorità  zero disabilita l’interrupt  mentre la priorità 7 rappresenta la priorità massima. Se ci sono due o più interrupt contemporanei con la stessa priorità il vettore di indice più basso viene eseguito per primo. I trap interrupt non sono mascherabili e occupano i primi vettori della tabella di interrupt. Ogni trap interrupt è associato ad una condizione di errore. Nel dsPIC33F sono stati implementati i seguenti trap:

  • Oscillator fault
  • Address error
  • Stack error
  • Math error
  • DMA error

La routine associata alla trap qualora sia inutilizzata deve comunque cancellare l’error flag che ha generato la trap. Il circuito  di clock Ci sono quattro sorgenti possibili per il clock del DSC:

  1. un oscillatore RC interno  denominato  FRC (Fast RC oscillator) con frequenza nominale a 7.37MHz;
  2. un oscillatore primario in grado di accettare in ingresso quarzi fino a 40MHz oppure un segnale di clock esterno;
  3. un oscillatore secondario a cui può essere collegato un quarzo a 32KHz o un risonatore ceramico (quest’ultima soluzione è adatta per applicazioni low power).
  4. Un secondo oscillatore RC interno denominato LRC (Low RC oscillator) con frequenza di 32.768KHz.

Per rendere più flessibile la scelta della frequenza di sistema le uscite dell’FRC e dell’oscillatore primario possono essere applicati ad un PLL in grado di generare frequenze tra 25 e 160MHz partendo da una frequenza d’ingresso compresa tra 1,6MHz e 16MHz. L’uscita dell’oscillatore o del PLL viene poi divisa per 4 per ottenere la frequenza di sistema (figura 4 e 5).

Figura 4. Schema a blocchi del dsPIC33F

Figura 4. Schema a blocchi del dsPIC33F

 

Figura 5. Schema a blocchi del dsPIC33F

Figura 5. Schema a blocchi del dsPIC33F

Periferiche  di comunicazione

Come accennato all’inizio il DSC include moltissime periferiche di comunicazione. Tutti i modelli della famiglia dsPIC33F includono due UART, due periferiche SPI  e due periferiche I2C. In alcuni modelli (tabelle 1 e 2) sono presenti anche una o due periferiche CAN. La UART è full duplex con il controllo hardware del flusso di comunicazione mediante pin dedicati RTS/CTS.  La UART è bufferizzata con  due  FIFO a quattro livelli sia per la trasmissione che per la ricezione. Il baudrate può raggiungere 1Mbit  con clock di sistema a 16Mips. L’hardware della periferica include anche la logica per comunicazione secondo lo standard IrDA. Le linee RX e TX della porta in modalità IrDA si collegano direttamente al trasmettitore e ricevitore a infrarossi. Le due periferiche SPI possono funzionare sia in modalità  master che slave. I dati  transitano in  un doppio  buffer  di ricezione/trasmissione e possono essere trasferiti a 8bit o 16bit. Anche per questa periferica è possibile prevedere il trasferimento in DMA da e per la RAM del dsPIC33F. In modalità master il clock per la periferica SPI è ricavato dal clock di sistema del DSC tramite un doppio  prescaler in cascata che consente di ottenere fino a 20 frequenze diverse. Anche le periferiche I2C sono completamente configurabili per funzionamento salve o multimaster, indirizzamento a 7 o 10 bit, frequenza di clock a 100KHz o 400KHz. La logica hardware dell’interfaccia include anche il controllo per bus multimaster che termina automaticamente la comunicazione quando rileva un conflitto sul bus I2C e un registro di mask per l’indirizzo slave che permette  di  assegnare alla periferica un range d’indirizzi anziché ad un indirizzo univoco. La periferica CAN è presente solo su alcuni modelli del DSC. Il modulo CAN supporta CAN1.2, CAN2.0A e CAN2.0B passivo/attivo. La periferica è analoga a quella del dsPIC30F.

Convertitore  analogico  digitale

Nel DSC possono essere presenti 1 o 2 periferiche di conversione analogica digitale.  Le caratteristiche del convertitore sono: convertitore SAR con velocità di conversione a 1,1Msps per la risoluzione a 10bit e 500Ksps per la versione a 12bit. Gli ingressi analogici dipendono dal modello del DSC considerato e variano da 18 a 32 configurabili sia come single ended che come differenziali. Quando si configura il convertitore per funzionamento a 10bit è possibile utilizzare quattro circuiti di sample&hold per quattro acquisizioni contemporanee.

Power saving

Il dsPIC33F include tre modalità di funzionamento in basso consumo: sleep, idle e doze. Le prime due sono le condizioni classiche presenti in ogni microcontrollore. La modalità sleep ferma l’oscillatore del micro riducendo pertanto i consumi al minimo  mentre la modalità idle mantiene l’oscillatore acceso bloccando solamente l’attività della CPU. In modalità doze invece, si riduce di un fattore prestabilito solamente il clock della CPU, che non  viene fermata, lasciando inalterato il clock delle periferiche. In questo modo è possibile mantenere la completa  funzionalità  delle periferiche di comunicazione o di acquisizione A/D riducendo però i consumi della CPU.

Sistemi di sviluppo  e librerie  software

Il dsPIC33F è supportato dall’IDE integrato MPLAB che comprende assemblatore e linker. Per utilizzare il linguaggio  C  è  necessario il  compilatore  ANSI MPLABC30 acquistabile separatamente. L’IDE MPLAB comprende anche dei tools molto utili come il simulatore e il VDI (Visual Device Initializer) che permette di configurare in modo visuale tutte le periferiche del DSC generando poi automaticamente il software di inizializzazione del componente. Completa anche la dotazione di librerie software fornite gratuitamente che includono funzioni matematiche trigonometriche,  filtri FIR, IIR, calcolo vettoriale, FFT. Altre librerie per la gestione segnale vocale e crittografia dei dati sono invece disponibili a pagamento.

 

 

Scarica subito una copia gratis

Una risposta

  1. Maurizio Di Paolo Emilio Maurizio 24 Giugno 2016

Scrivi un commento

Seguici anche sul tuo Social Network preferito!

Send this to a friend