venerdì 21 giugno 2013

Introduzione ad ASF (Atmel Software Framework)

Scopriamo in una serie di articoli il framework di Atmel per la programmazione dei microcontrollori

asf_structure

ASF è un framework organizzato in strati a livelli di astrazione diversi, facciamone una panoramica:

Boards rappresenta i dettagli della scheda fisica es. pin, led, pulsanti, etc..

Drivers offrono funzionalità di basso livello per interfacciarsi con le periferiche, esempi di Drivers sono ADC, DAC, DMA, SPI, TC (Timer Counter), IOPORT etc.. non hanno nulla a che fare coi Driver di Windows, nonostante il nome sono in genere semplici da usare, sono normali funzioni C

Components come HX8347A Display Controller Low Level driver offrono funzionalità per componenti esterni come display LCD, sensori, etc..

Services come SPI, PWM, FIFO, FatFS, etc.. che spesso offrono funzionalità a più alto livello dei Drivers. Ad esempio il driver SPI offre funzionalità come spi_get ed spi_put per leggere o scrivere un byte sull’interfaccia mentre il servizio SPI offre funzionalità come spi_write_packet che permettono di scrivere pacchetti (sequenze di byte). Un altro esempio è il servizio

Applications sono semplicemente gli esempi da cui è possibile partire scegliendo New Example Project dalla schermata iniziale

Utilities sono funzioni utilizzate trasversalmente da tutti gli strati

Your Code sarà il codice che scriveremo noi

A mio parere personale ASF è più propriamente una libreria piuttosto che un framework in quanto il nostro codice chiama la libreria al posto di essere chiamato dal framework. Ma diciamo che è una sottile distinzione e visto che la sigla contiene la parola framework lo utilizzerò intercambiabilmente con entrambi i termini.

atxmega32a4u_breakout_board-500x500Utilizzeremo nel nostro viaggio la scheda EWS ATXmega32A4U Breakout Board (link produttore, schema) che sostanzialmente espone con semplicità tutti i pin del micro ATXMEGA32A4U ed è precaricata col bootloader Atmel Flip che permette di caricare i nostri programmi tramite USB senza l’acquisto di un programmatore aggiuntivo.

Gli XMega sono una “via di mezzo” tra i micro ad 8 bit e i micro a 32 bit e permetteranno di esplorare parecchi moduli della libreria ASF che non sarebbero utilizzabili con degli ATTiny o ATMega.

Per semplificare l’utilizzo della scheda ho creato un template per creare rapidamente nuovi progetti: scarica il template

Per installare il template una volta aperto Atmel Studio andare su File/Import/Project Template e selezionare il file .zip scaricato

0.importtemplate

Al riavvio di Atmel Studio scegliendo New Project sarà disponibile un nuovo tipo di progetto EWS ATXMEGA32A4U

1newproject

Diamo il nome HelloASF al progetto e scegliamo OK, verrà creata una serie di file che serviranno come infrastruttura per il nostro firmware e l’utilizzo della framework ASF.

Iniziamo con l’analizzare la struttura di file creata col Solution Explorer che troviamo di default sulla barra di destra, dentro la cartella src è presente:

solexpl- cartella asf
relativa ad ASF, contiene a sua volta diverse cartelle

     - cartella common
contiene dei file interessanti nella cartella boards (illustrati sotto), la cartella services relativa ai vari moduli che si aggiungeranno e sarà popolata automaticamente, la cartella utils relativa a file che in genere non vanno modificati e sono di supporto alla programmazione

     - cartella xmega
codice di supporto per i micro XMega, è possibile ignorarla in quanto difficilmente da modificare

- cartella config
è la cartella dove verranno inseriti tutti i file di configurazione per i moduli ASF scelti, ad esempio il servizio System Clock Control aggiungerà il file conf_clock.h che permetterà di impostare la frequenza del clock da utilizzare.

- asf.h  
file automaticamente generato, include tutti gli header necessari per utilizzare i moduli ASF selezionati, non va modificato manualmente

- main.c  
il file iniziale del nostro firmware, contiene la funzione main e un’include alla libreria asf

 

Vediamo adesso alcuni file particolarmente interessanti che consiglio di leggere mentre i rimanenti file delle cartelle services, utils e xmega possono essere ignorati e visti come file di supporto.

asf/common/boards/user_board/init.c contiene una funzione per inizializzare la scheda, vengono impostati i pin dei led come uscite e dei pulsanti come ingressi

asf/common/boards/user_board/user_board.h
contiene #define che danno ai pin dei led e dei pulsanti nomi mnemonici, contiene impostazioni sull’oscillatore presente sulla scheda

asf/common/boards/board.h
sostanzialmente il file non è da modificare, contiene degli include condizionali in base a dei #define definiti nelle opzioni del compilatore

config/conf_board.h
aggiunge se non presente #define CONF_BOARD_H che però non è utilizzato, è il posto dove inserire dei propri #define per personalizzare la configurazione della scheda

Per il momento è tutto, lascio un utile link: http://asf.atmel.com che contiene la documentazione ufficiale ASF e segnalo il canale video di Atmel http://www.youtube.com/user/AtmelCorporation che contiene numerosi video tra cui alcuni dedicati ad ASF

Prossimamente analizzeremo nel dettaglio il file main.c e vedremo come aggiungere nuovi moduli al nostro progetto

Nessun commento:

Posta un commento