Rivista #231: CIPs, Core Indipendent Peripherals 2^

Tra i contenuti del numero 231 (Dicembre 2018/Gennaio 2019) ,attualmente in edicola, la seconda puntata del Corso dedicato alle Core Indipendent Peripherals implementate in molti microcontrollori Microchip.

Nella prima puntata, abbiamo spiegato il concetto di CIP evidenziando i vantaggi che la loro implementazione apporta rispetto all’utilizzo del microcontrollore canonico con la CPU che deve occuparsi, tra i vari compiti, anche della gestione diretta delle periferiche.

A partire da questa seconda puntata cominciamo ad esaminare alcune delle più interessanti ed utili unità CIP che si trovano integrate in alcune MCU a 8 e 16 bit di Microchip. Per le “prove pratiche” previste a corredo delle nozioni teoriche esposte utilizzeremo la scheda di sviluppo “Curiosity” (Part Number Microchip DM164137) che vedete nella Fig. 1 e che viene equipaggiata con un PIC16F1619, microcontrollore dotato di un gran numero di CIP, che ci permetterà di sperimentare quanto vedremo.

Come ambiente software utilizzeremo MPLAB X, attualmente alla versione 5.05, il plugin MCC (MPLAB Code Configurator), attualmente giunto alla versione 3.65.1, nonché il compilatore XC8 (attualmente giunto alla versione 2.0).

CLC (Configurable Logic Cell)

La prima CIP di cui ci occupiamo è la CLC, ovvero “Cella Logica Configurabile”: si tratta di una logica programmabile che opera al di fuori dei limiti di velocità dell’esecuzione del software, in alcuni casi replicata all’interno della MCU: nel caso della nostra scheda di sviluppo, la MCU PIC16F1619 dispone internamente di ben 4 CLC. La CLC può essere immaginata come composta da quattro blocchi distinti di seguito descritti.

  1. Ingressi; possono essere fino a 16 a seconda della della MCU;
  2. Porte collegate agli ingressi; sono logiche AND/NAND/OR/NOR che prendono gli “Ingressi” e producono quattro segnali di uscita.
  3. Funzioni Logiche; blocco configurabile per svolgere una funzione logica a scelta tra:
  4. AND/OR;
  5. OR/XOR;
  6. AND a quattro ingressi;
  7. flip-flop di tipo Set-Reset;
  8. flip-flop di tipo J-K;
  9. flip-flop di tipo D a uno o due ingressi;
  10. input latch.
  11. Uscita: unica uscita risultato dei blocchi precedenti.

Schematicamente una CLC può quindi essere rappresentata come mostrato nella Fig. 2. Riassumendo, la CLC accetta fino a 16 segnali di ingresso e attraverso l’uso di porte configurabili riduce i 16 ingressi a quattro linee logiche che pilotano una delle otto funzioni logiche con un’uscita singola.

Naturalmente, ogni singola CLC, prima di poter essere utilizzata, deve essere configurata; tale configurazione si può fare sia in modo classico, programmando a mano, uno per uno, i vari registri di configurazione della periferica, o, in modo molto più rapido ed intuitivo, tramite l’apposito tool grafico MCC (MPLAB Code Configurator).

Per questa volta, proprio per dimostrare la tediosità della configurazione manuale rispetto all’utilizzo di MCC, effettueremo entrambe le cose. Configurazione “manuale” di una CLC tramite registri La configurazione di una CLC prevede la configurazione di otto registri, impostati i quali, la CLC inizierà a funzionare autonomamente ed indipendentemente dal codice che gira nella CPU.

I registri che dovremo configurare a mano sono:

  • CLCxCON
  • CLCxSEL0
  • CLCxSEL1
  • CLCxGLS0
  • CLCxGLS1
  • CLCxGLS2
  • CLCxGLS3
  • CLCxPOL

Per prima cosa configureremo gli “Ingressi” che possono arrivare a ricevere 16 segnali differenti provenienti da:

  • Pin di I/O
  • Timers
  • Uscita di altre periferiche
  • Bits di registro

Gli ingressi sono selezionati tramite i bits nei registri CLCxSEL0 e CLCxSEL1 (x rappresenta il numero della CLC) come vediamo in Fig. 3. Ogni input ha un identificativo a 3 bit associato che viene inserito nei registri CLCxSELn per abilitare l’input voluto secondo la Tabella 1. Terminata la selezione degli “Ingressi” dobbiamo passare a configurare il blocco successivo, ovvero il blocco delle “Porte collegate agli Ingressi”. Tale blocco ha quattro porte logiche che devono essere configurate. Ciò richiede la configurazione di cinque registri. Ogni ingresso può essere configurato diretto, invertito connesso e non connesso. I cinque registri da configurare sono:

  • CLCxGLS0
  • CLCxGLS1
  • CLCxGLS2
  • CLCxGLS3
  • CLCxPOL

Di base, ogni porta è configurata come una porta OR, ma ogni suo ingresso e la sua uscita, può essere impostato invertito o non invertito; ciò consente di creare porte AND, NAND, OR e NOR. Le porte possono anche essere impostate su un un livello logico costante 1 o 0. Schematicamente abbiamo quanto riportato nella Fig. 4. Ogni ingresso di una porta logica ha una coppia di bit in uno dei registri CLCxGLSx; i due bit che debbono essere programmati sono un bit che indica non invertito (T) ed uno che indica invertito (N). Se si programma (1) il bit T, l’ingresso non è invertito, mentre se si programma (1) il bit N, l’ingresso è invertito.

Se entrambi sono impostati su zero, l’ingresso non è collegato al gate (Fig. 5). Infine, il bit LCxGxPOL del registro CLCxPOL invertirà o non invertirà l’uscita del gate; se messo a zero l’uscita sarà non invertita, mentre se posto ad 1 l’uscita sarà invertita.

Terminata anche la configurazione delle “Porte collegate agli Ingressi” si può passare alla configurazione del blocco successivo, ovvero quello relativo alle “Funzioni Logiche”.

….

L’articolo prosegue con:

Configurazione “assistita” di una CLC tramite MCC

Esempio 1 – Generazione di un’onda quadra

Esempio 2 – “Debouncing” di un pulsante

Conclusioni

Siamo quindi arrivati alla fine di questa puntata, nella quale abbiamo esaminato in dettaglio una delle più comode e flessibili CIP, vale a dire la CLC, che è la “Cella Logica Configurabile”; questa periferica, proprio grazie alla sua estrema versatilità , può essere configurata e utilizzata per gli scopi più svariati al fine di scaricare la CPU di lavori che rallenterebbero solamente l’esecuzione del programma da parte di quest’ultima. Abbiamo anche visto come, grazie all’uso del tool di sviluppo MCC, sia possibile configurare sia la MCU che le sue periferiche, senza dover programmare a mano i vari bit dei vari registri, evitando possibili errori e sviste e velocizzando enormemente lo sviluppo di una qualsiasi applicazione.

Un esame dei sorgenti generati rivelerà inoltre un’ottima qualità del codice ‘C’ prodotto, facilmente leggibile e ben commentato (nei .h) per spiegare la logica delle varie funzioni. Nelle prossime puntate continueremo l’esame di altre CIP e della loro configurazione con il preziosissimo tool MCC.

L’articolo completo è pubblicato sul numero 231 (Dicembre 2018/Gennaio 2019), acquistabile in tutte le edicole.

 

 

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.

0