Corso Embedded ARM: introduzione al core ARM Cortex-M

Benvenuti a questa serie di lezioni dedicate ai professionisti che vogliono compiere i primi passi nello sviluppo di applicazioni per processori a 32 bit. Il corso è rivolto a tutti coloro che hanno già esperienza con la programmazione embedded su piattaforme a 8/16 bit e desiderano fare un passo in avanti ed entrare nel mondo dei processori ARM. La piattaforma che utilizzeremo sarà un evoluzione dell'Arduino UNO a 8 bit: l'Arduino M0 PRO. Clicca qui per scoprire come ricevere in omaggio la scheda Arduino M0 Pro

La piattaforma ARM

Il cuore di Arduino M0 PRO è un microcontrollore Atmel SAMD21G18A (Smart Arm based Microcontroller) basato su un processore ARM Cortex-M0+ a 32 bit. ARM (precedentemente Acorn RISC Machines ora Advanced RISC Machines) progetta principalmente processori a 32 bit, e ne concede la licenza ai produttori di chip in silicio secondo un modello di business chiamato IP (intellectual propertylicensing. Le varie aziende come ST Microelectronics, Texas Instruments o Atmel nel nostro caso acquistano la licenza e integrano i processori ARM all'interno dei loro progetti (ad esempio Microcontrollori o System on a chip (SoC)). Recentemente, con la nascita della linea Cortex, ARM ha suddiviso i suoi processori in tre famiglie (o profili), per differenziare i suoi prodotti in base alle diverse esigenze del mercato: sono nati quindi i Cortex-A (Application processors), ad alte prestazioni, con supporto per sistemi operativi come Linux e utilizzati nei telefoni cellulari o nei tablet; i Cortex-R (Real- Time processors), per applicazioni real time con gestione degli interrupt fortemente deterministica ed efficiente; la serie Cortex-M dedicata prevalentemente al mercato dei microcontrollori. I processori Cortex serie M (M0,M0+,M3,M4 e M7) sono dei processori RISC (Reduced Instruction Set Computer) e hanno un set d'istruzioni relativamente piccolo (56 istruzioni); i Cortex-M sono facili da programmare, dato che quasi tutto può essere programmato in C o C++ (l'architettura dei processori Cortex è C-friendly ed è facile per un compilatore generare codice macchina da codice sorgente scritto in linguaggio C), e sono realizzati in maniera da offrire una risposta rapida e deterministica agli interrupt, per questo il core contiene al suo interno un controller dedicato chiamato Nested Vectored Interrupt Controller (NVIC), che consente una gestione degli interrupt semplice e flessibile. Altre periferiche fanno parte del core, come un timer di sistema chiamato System Tick Timer o SysTick e altre che vedremo in seguito. Il produttore del microcontrollore (il chip di silicio che vediamo fisicamente sulla nostra scheda di sviluppo) aggiunge poi la memoria flash, la RAM e le periferiche (timer, interfacce di comunicazione seriale, pin di GPIO e altre).

Arduino M0 PRO e il SAMD21

La scheda Arduino M0 PRO si presenta col tipico pinout di Arduino, dividendo i pin in digitali, analogici e di alimentazione (figura 1). A differenza dell'Arduino UNO la scheda è alimentata a 3.3 V (gli header dei pin sono grigi e non neri ad indicare questo). E' possibile alimentare la scheda dai due connettori micro USB (massimo 500 mA di corrente assorbita), dal jack accanto ad essi o dal pin Vin (range 6-20 V). Sotto la scritta M0 PRO troviamo il SAMD21G18A, con 256 KB di memoria flash per il codice (dei quali 4 KB sono riservati dal bootloader a meno che non vogliamo farne a meno, come vedremo) e 32 KB di SRAM. L'altro chip presente sulla scheda è il programmatore/debugger chiamato EDBG (Embedded DeBuGger) che ci consentirà di programmare la memoria del microcontrollore, ma anche grazie all'interfaccia di debug messa a disposizione da quest'ultimo di eseguire passo passo il nostro codice alla ricerca di eventuali errori o bug.

Arduino M0 PRO pinout_

Figura 1: i pin dell'Arduino M0 PRO e i corrispondenti pin del SAMD21 con le funzioni alternative

La scheda presenta due porte micro USB ed entrambe consentono di programmare il micro: la prima, programming, è la porta consigliata per la programmazione ed è collegata all'EDBG che ci permette di comunicare con l'interfaccia di debug del SAMD21 (per programmare il microcontrollore o eseguire il debug) e alla prima UART del microcontrollore (svolgendo il ruolo di convertitore USB-seriale e programmare la memoria utilizzando il bootloader e quindi l'IDE ufficiale di Arduino); la seconda, denominata native USB, è collegata direttamente al controller USB presente sul SAMD21 e può anch'essa essere impiegata per programmare il microcontrollore utilizzando l'IDE. In definitiva gli approcci per programmare l'Arduino M0 PRO sono due: utilizzare il bootloader precaricato e quindi l'ambiente di sviluppo di Arduino (come spiegato nella prima parte di questo articolo) o (approccio che seguiremo in questo corso) utilizzare Atmel Studio 7.0 come IDE e sfruttare l'EDBG sulla scheda per programmare e, cosa fondamentale, debuggare [...]

ATTENZIONE: quello che hai appena letto è solo un estratto, l'Articolo Tecnico completo è composto da ben 2839 parole ed è riservato agli ABBONATI. Con l'Abbonamento avrai anche accesso a tutti gli altri Articoli Tecnici che potrai leggere in formato PDF per un anno. ABBONATI ORA, è semplice e sicuro.

Scarica subito una copia gratis

7 Commenti

  1. Avatar photo Maurizio Di Paolo Emilio 3 Gennaio 2017
  2. Avatar photo Massimiliano.Elico 12 Gennaio 2017
  3. Avatar photo GreenBoost 18 Gennaio 2017
    • Avatar photo Luca Davidian 23 Gennaio 2017
  4. Avatar photo annadema 31 Gennaio 2017
  5. Avatar photo skizzo942 22 Aprile 2017

Scrivi un commento

Seguici anche sul tuo Social Network preferito!

Send this to a friend