Programmare ARM – Compilare il bin da caricare sulla Board LPC-P1343


Posted: luglio 4th, 2011 | Author: | Filed under: ARM, Embedded, Guide, Howto, Programmazione | Tags: , , , , , , , , , | No Comments »


Abbiamo visto come caricare sulla scheda un firmware che già abbiamo, ma come possiamo compilarne uno noi?

Layout della board

Il primo passo è ovviamente ottenere il compilatore, chi ha letto il vecchio articolo avrà sicuramente notato, in fondo alla pagina, la presenza del link ad un compilatore ARM, è proprio quello che utilizzeremo per creare il firmware da caricare:

 

wget http://www.codesourcery.com/sgpp/lite/arm/portal/package8734/public/\
arm-none-eabi/arm-2011.03-42-arm-none-eabi-i686-pc-linux-gnu.tar.bz2
tar jxvf arm-2011.03-42-arm-none-eabi-i686-pc-linux-gnu.tar.bz2

Facciamo attenzione alla directory che utilizziamo per contenere il compilatore, dato che ci servirà per permetterci di raggiungerlo, infatti occorre impostare una variabile del nostro terminale con il percorso esatto. Dal terminale dove successivamente eseguiremo la compilazione digitiamo:

export CROSS_COMPILE=/PERCORSO_VERSO_IL_COMPILATORE/arm-2011.03/bin/arm-none-eabi-

In alternativa possiamo aggiungere la riga all’interno del file ~/.bashrc in modo da non doverlo riscrivere ogni volta.

Ora non ci resta che trovare qualcosa da compilare. Per i miei esperimenti utilizzo il mini-sistema operativo creato da Alessandro Rubini per processori Cortex-M3 che si può scaricare da questo indirizzo. Questo sistema è un buon inizio per inziare a muovere i primi passi con la board (sto inziando anche io con questo), infatti permette di avere un sistema che si avvia e sul quale è possibile effettuare delle aggiunte. Una volta scaricato e scompattato, occorre prima effettuare una modifica al main.c:

#include <stdint.h>
#include "io.h"

void main(void)
{
 volatile int i;
 int on = 0;

 /*
 * Call the mimmo application. Turn this if to false if you want to
 * run the older code that just flashes leds
 */
 if (0) {
 extern void do_mimmo(void);
 do_mimmo();
 }

 /* Older led-toggling application */
 *(volatile uint32_t *)0x50038000 = 0xf; /* port C: all 4 out */

 while (1) {
 puts("stuff\n");
 if (++on & 1)
 *(volatile uint32_t *)0x5003003c = 0xf;
 else
 *(volatile uint32_t *)0x5003003c = 0;
 for (i = 0; i < 1000*1000; i++)
 ;
 }
}

In particolare occorre modificare la riga 13, non facendo entrare il programma all’interno dell’if, cambiano quindi l’1 in 0. Dopo aver salvato il file, non ci resta che lanciare il comando

make

dalla cartella estratta per eseguire la compilazione. Come si può leggere dal pdf allegato ai sorgenti, vengono creati due file bin, uno per l’esecuzione da ROM e uno per l’esecuzione da RAM. Dato che per programmare la RAM è necessario usare UART, quello che interessa a noi e che quindi dobbiamo trasferire sulla board è il file m3c.rom.bin:

mdel c:firmware.bin
mcopy m3c.rom.bin c:new.bin

Per chi non capisse cosa sono questi ultimi due comandi, consiglio la lettura del precedente articolo che spiega, tra l’altro, come configurare mtools per permettere il riconoscimento della board. Dopo aver resettato la board (togliere il jumper dai piedini JMP BLD_E e premere il tasto di Reset) il nuovo programma appena compilato e caricato verrà eseguito, facendo lampeggiare 4 led.

La prossima volta vedremo come accedere ai registri di configurazione e accendere dei led a piacere.



Leave a Reply

  • Articoli Recenti:

  • Tag

  • Categorie

  • Meta

  • Licenza Creative Commons

    Copyright © 2018, | ldlabs.org – Blog is proudly powered by WordPress All rights Reserved | Theme by Ryan McNair modified By Francesco Apollonio

    Smilla Magazine Il Bloggatore iwinuxfeed.altervista.org Feedelissimo - tecnologia WebShake - tecnologia