Produkty Novinky Články Návody Kontakty

První program pro NXP LPC1115

Napsali jsme krátký program, abychom vyzkoušeli, jak bude fungovat procesorový modul s NXP LPC1115, který jsme zasunuli do Lipicano Board. Program je velice jednoduchý, pouze bliká LEDkami, ale abychom viděli, jestli funguje, musíme jej nejdříve přeložit, prohnat linkerem a výslednou binárku musíme naprogramovat do Flash paměti mikrokontroléru.

Zdrojáky jsou na GitHubu

Na zdrojáky příkladů pro Lipicano Board jsme na GitHubu založili repository lipicano_examples. Příklady si stáhnete jako zip soubor nebo si je naklonujete pomocí Gitu příkazem:
git clone https://github.com/ucsimply/lipicano_examples.git
Jak budeme přidávat nové příklady, obsah repository se bude postupně rozrůstat. Aktualizace si stáhnete příkazem Gitu:
git pull origin master

Překladač GNU GCC

Abychom mohli programy pro moduly s mikrokontroléry NXP LPC1xxx překládat, stáhli jsme si a nainstalovali překladač jazyka C s dalšími programy GCC ARM Embedded ze serveru Launchpad.net. Programy ze sady GNU GCC jsou doma na unixových operačních systémech. Řadu programů, které jsou standardně součástí Unixu nebo Linuxu, na Windows nenajdete. Proto jsme si na Windows nainstalovali program make a pár dalších utilit ze sady GnuWin32.

Na programování paměti je Flash Magic

Binárku v hexadecimálním formátu, která je produktem překladu a linkování našeho programu, musíme nějakým způsobem naprogramovat do Flash paměti mikrokontroléru. K tomu nám posloužil program Flash Magic, který umí po sériové lince komunikovat s bootloaderem mikrokontrolérů NXP LPC a umí programovat jejich interní Flash paměť.
Mikrokontroléry NXP LPC používají 32bitové slovo v tabulce vektorů pro uložení kontrolního součtu, podle kterého bootloader rozhoduje, zda Flash paměť obsahuje platný kód programu. Proto jsme si stáhli program fix_checksum.exe, který se postará o doplnění kontrolního součtu do binárního obrazu programu. Tady ale pozor, kontrolní součet je potřeba doplnit jen do binárního (.bin) obrazu, který je určen pro programování Flash paměti pomocí pyOCD, OpenOCD nebo jiného debuggeru, který při programování kontrolní součet nedoplní. Hexadecimální soubor (.hex), který je pro Flash Magic, zůstává beze změny, o doplnění kontrolního součtu se postará samotný Flash Magic.
Použití utilit pro generování obrazů paměti je vidět v souboru Makefile.

Zapojíme dráty a přeložíme program

Vlastnosti mikrokontroléru LPC1115 podrobně popisuje User manual pro řadu NXP LPC111x. Drátovými propojkami jsme spojili porty P3.4 a P3.5 mikrokontroléru LPC1115 se dvěma LEDkami, které jsou na Lipicanu.
Program pro LPC1115, který s LEDkami bliká, je v podadresáři lpc1115/01_simple_blinky/. Zdrojové soubory programu jsou v podadresáři source. Skript pro linker lpc1115.ld specifikuje, jak mají být přeložený kód a proměnné programu umístěny v paměťovém prostoru mikrokontroléru. O překlad programu, linkování a vygenerování binárky, kterou zapíšeme do Flash paměti, se postará program make a skript Makefile.
Z příkazového řádku v podadresáři lpc1115/01_simple_blinky/ jsme zadali příkaz make dep, který vytvořil soubor závislostí překládaných zdrojáků make.dep a příkaz make, který zdrojáky přeložil, slinkoval object soubory a vygeneroval obrazy paměti simple_blinky.hex a simple_blinky.bin.
make dep
make

Flešování s Flash Magic

Obsahem souboru simple_blinky.hex jsme naprogramovali Flash paměť mikrokontroléru LPC1115. V okně Device Manageru jsme si ověřili, že Windows vidí virtuální COM port Lipicana a svázaly jej s COM3 portem. Modré jumpery RXD a TXD spojují UART mikrokontroléru na Lipicanu s UARTem mikrokontroléru na modulu. Tlačítky RST a ISP se mikrokontrolér na modulu resetuje a případně se uvede do ISP režimu.
V programu Flash Magic jsme vybrali typ mikrokontroléru LPC1115/303, sériový port COM3, rychlost přenosu 115200 baud, typ rozhraní ISP, frekvenci oscilátoru na modulu 48 MHz a cestu k souboru simple_blinky.hex. Na Lipicano Board jsme stiskli a drželi tlačitko ISP, krátce jsme stiskli tlačítko RST a pak jsme pustili tlačítko ISP. Tím jsme zresetovali mikrokontrolér LPC1115 na modulu a uvedli jej do ISP režimu. Tlačítkem Start jsme spustili programování Flash paměti.
Ve stavovém řádku na spodku okna se zobrazoval průběh programování. Po úspěšném dokončení operace se zobrazila zpráva Finished. Ze zvědavosti jsme zkusili ověřit, jestli se Flash paměť naprogramovala správně a porovnali jsme ji s Hex souborem. Klikli jsme na ikonu Verify, v dialogu jsme zadali cestu k souboru simple_blinky.hex a srovnání jsme spustili tlačítkem Verify.

Už to bliká

Verifikace byla podle očekávání úspěšná. Takže teď zbývá jen probrat mikrokontrolér z ISP režimu, abychom viděli, jestli budou LEDky blikat. K tomu stačilo stisknout na Lipicanu tlačítko RST.
Mohly by LEDky blikat rychleji? Nebo pomaleji? Není nic snazšího.
V souboru main.c nastavíme poloviční nebo dvojnásobnou délku zpožďovacího cyklu a změnu uložíme.
Příkazem make v podadresáři lpc1115/01_simple_blinky/ překompilujeme změněný zdroják a vygenerujeme aktualizovaný Hex soubor. Tlačítky RST a ISP uvedeme mikrokontrolér do režimu ISP a programem Flash Magic naprogramujeme nově vygenerovaný soubor simple_blinky.hex do jeho Flash paměti. Tlačítkem RST mikrokontrolér resetujeme.
Bliká vám to tak, jak jste chtěli?