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 [...]

Iscriviti e ricevi GRATIS
Firmware 126

Registrati e fai subito il DOWNLOAD

ATTENZIONE: quello che hai appena letto è solo un estratto, l'Articolo Tecnico completo è composto da ben 2839 parole ed è riservato agli abbonati PREMIUM. Con l'Abbonamento avrai anche accesso a tutti gli altri Articoli Tecnici PREMIUM e potrai fare il download (PDF) dell'EOS-Book e Firmware del mese. ABBONATI ORA con PAYPAL è semplice e sicuro.

Abbonati alle riviste di elettronica

6 Commenti

  1. Maurizio Di Paolo Emilio Maurizio Di Paolo Emilio 3 gennaio 2017
  2. Massimiliano.Elico 12 gennaio 2017
  3. GreenBoost 18 gennaio 2017
    • Luca Davidian 23 gennaio 2017
  4. annadema 31 gennaio 2017

Scrivi un commento

Iscriviti e ricevi GRATIS
Firmware 126

Registrati e fai subito il DOWNLOAD