Začínáme s dsPICem (4) - pojďme si zablikat - Assembler

Pokud se učíme nějaký programovací jazyk, v jedné z prvních lekcí zpravidla narazíme na aplikaci "Hello, World". Ta pochází z dílny jednoho z autorů programovacího jazyka C Briana Kernighana a prostě na obrazovku vypíše nápis přeložitelný do češtiny jako "Ahoj světe". U jednočipových procesorů zpravidla nemáme displej umožňující vypsání takového textu a i pokud ho tam máme, jeho zprovoznění rozhodně nepatří k triviálním úlohám vhodným pro úplné začátečníky. V oblasti jednočipů se proto místo aplikace "Hello, World" obvykle používá jako první programátorský pokus obyčejné blikání LED diodou. A přesně to je předmětem tohoto článku.

Zadání

Máme-li zprovozněnou pokusnou desku s bootloaderem, nic nám nebrání se vrhnout na skutečné programování a dělání pokusů s procesorem dsPIC. V tomto článku popíši program jednoduše blikající jednou ze dvou LED diod podle toho zda je či není zmáčknuté tlačítko. Pokud nemáte na své desce tak "bohatý" hardware, nezoufejte. Program bude fungovat i na desce, kde k procesoru není připojeno z periférií nic mimo jediné LED diody. Samozřejmě pak ale nebude možné žádné přepínání diod.

Diodami si zablikáme jak pomocí assembleru tak i jazyka C, abychom si ukázali, kde jsou odlišnosti respektive spíše, jak velmi podobné oba programy jsou. Než se dostaneme k vlastním programům, nejprve si řekneme jak nainstalovat potřebné vývojové prostředí a vytvořit v něm první projekt.

Instalace produktů MPLAB

Naštěstí nástroje pro vývoj aplikací pro procesory PIC (včetně našeho dsPIC) nabízí přímo firma Microchip. Assembler a celé integrované vývojové prostředí je zcela zdarma a kompilátor jazyka C je zdarma ve studentské verzi. Ta funguje neomezeně dlouho, pouze po 30 dnech činnosti přestane překládaný kód optimalizovat, což nám při našich pokusech ve většině případů opravdu nebude vadit. Vše potřebné nejprve stáhneme z Internetu ze stránek Microchipu. Odkaz na stránku s downloadem IDE (Integrated Development Environment) je hned na hlavní stránce Microchipu pod názvem MPLAB IDE. V době psaní tohoto článku je tam stabilní verze 7.60A a verze ve vývoji 7.62. Obě jsou zabaleny v zip souboru o velikosti cca 50MB a je celkem jedno, ketrou z nich si stáhneme.

Studentská edice kompilátoru jazyka C30 se musí stáhnout zvlášť. Procházením stránek Microchipu se hledá velmi těžko, ale pokud zadáte do okénka search: C30 Student Edition, najdete ji během několika sekund. V době psaní článku tam je verze 2.30 v zapakovaném exe souboru majícím cca 12MB.

Po stažení všeho potřebného nainstalujeme nejprve MPLAB IDE (doporučuji v instalaci jen odklikávat přednastavené hodnoty) a potom podobným způsobem doinstalujeme kompilátor C30. Pokud necháte během instalace všechny cesty tak, jak jsou Vám nabídnuty instalátorem, kompilátor C30 bude do MPLABu vinstalován na správné místo.

Blikáme assemblerem

Zde si tedy vyzkoušíme zablikat z jazyka assembler, v dalším článku pak z jazyka C. V souboru ZIP přibaleném na konci článku najdete soubor blikame.s to je zdrojový kód programu pro blikání napsaný v assembleru pro dsPIC. Převzal jsem ho ze stránek Microchipu a provedl v něm pouze minimální změny. Přeložil a doplnil jsem komentáře, aby byl soubor pro začátečníka co nejpřehlednější.

Na vhodném místě na disku si vytvořte složku, do které budete ukládat veškeré programy pro dsPICa a do ní vytvořte složku s názvem třeba BlikAsm. Do této složky ze zipu vybalte soubor blikasm.s.

Poznámka: Soubory s assemblerem mají u kompilátoru MPLAB standardně příponu .s (od slova Source).

Než kód poprvé zkompilujeme, je potřeba v prostředí MPLAB vytvořit takzvaný projekt. Účelem projektu je sdružit všechny potřebné zdrojové soubory, přiřadit k nim konkrétní typ procesoru, použité jazykové nástroje (některé projekty například mohou obsahovat části kódu psané v jazyku C a části v assembleru) a nastavit konfigurační registry procesoru atd.

Protože základní vytvoření projektu je mechanická opakující se činnost, s výhodou ji můžeme realizovat průvodcem. Případné jemné nuance, které není možno průvodcem nastavit, můžeme potom kdykoliv doladit ručně, ale ve velké většině případů to vůbec nebude nutné.

Spustíme MPLAB IDE a v menu Project vybereme Project Wizard... Objeví se uvítací stránka a my pokračujeme tlačítkem Další>.

Na další stránce vybereme požadovanou součástku, pro kterou budeme program kompilovat. Procesory jsou v seznamu dvakrát. Jednou pouze název a podruhé název s e na konci. Vybíráme název bez e, varianta s e je určena pro práci s emulátorem ICE4000 a pro umožnění jeho činnosti přesouvá některé části paměti (ovlivňuje funkci linkeru) a na reálném neemulovaném procesoru by program nefungoval. Pokračujeme tlačítkem Další>.

Na další stránce volíme balík jazykových nástrojů (kompilátor, linker a případně další nástroje). V našem případě zvolíme jako aktivní toolsuite Microchip ASM30 Toolsuite. Pak proklikáním nástrojů v seznamu Toolsuite Contents překontrolujeme zda jsou nastaveny správné cesty k nástrojům.

Poznámka: Pokud jsme při instalaci MPLAB neměnili žádné parametry, mělo by vše být nastaveno správně.

V dalším okně určíme pomocí tlačítka Browse... u Create project, kde bude náš projekt uložen (složka BlikAsm kterou jsme vytvořili dříve) a pojmenujem ho tím, že zvolíme název souboru třeba zase BlikAsm a necháme ho uložit. Tím se vrátíme na stránku Step Three a zde pokračujeme tlačítkem Další>.

Na stránce Step Four můžeme najít a do projektu přidat všechny soubory se zdrojovým kódem (v našem případe dříve uložený Blikame.s).

Poznámka: Pokud ve chvíli tvorbu projektu ještě žádný zdrojový kód nemáme napsaný, nic se neděje, jen pokračujeme tlačítkem Další>. Zdrojové soubory lze totiž přidávat kdykoliv v průběhu naší práce.

Okno vytvořeného projektu Nakonec nám MPLAB pouze oznámí, že bude vytvořen projekt a zároveň Workspace (pracovní prostor), do kterého bude projekt vložen. Průvodce ukončíme tlačítkem Dokončit.

Kupodivu pracovní plocha MPLABu pravděpodobně zůstane prázdná a šedivá. Ale stačí jít do menu View a kliknout tam na Project a uvidíme okno s naším novým projektem.

Všimněte si, kolik typů souborů může projekt zahrnovat a že pod zdrojovými soubory (Source Files) již je náš zdrojový soubor, který jsme vybrali v jednom z kroků průvodce. Pokud chceme některý ze souborů smazat, stačí ho označit myší a stisknout Delete. Pokud chceme naopak jakýkoliv soubor přidat, klikneme pravým tlačítkem na kontejner daného typu souboru (třeba Source Files) a zvolíme Add Files...

Kliknutím na záložku Symbols dole v okně projektu si můžeme přehledně zobrazit všechny námi definované symboly ve zdrojovém kódu. Pravděpodobně tam nyní nebude nic vidět, ale stačí pravým tlačítkem kliknout na BlikAsm.mcp v tomto okně, zvolit Update Tags Now a symboly se objeví.

Úprava zdrojového kódu

Vraťme se na záložku Files a dvojklikněme na název blikame.s. Otevře se okno editoru, ve kterém můžeme psát nebo upravovat naše programy. Vidíme, že editor příjemně barví různé části zdrojového textu, takže se v něm velmi pěkně orientujeme. Všimněte si, že řádky zdrojového programu týkající se hardwaru, tedy zapojení LED diod a tlačítka jsem v komentářích opatřil třemi hvězdičkami. Pokud máte hardware zapojený jinak než LED diody na pinu B6 a B7 a tlačítko na pinu D0, změňte tyto řádky podle Vašeho zapojení.

Je velmi vhodné (zejména pro začátečníka) si v sekci projektu Header Files otevřít příslušný include soubor použitého procesoru. Najdeme ho (pomocí Add Files...) ve složce c:\Program Files\Microchip\MPLAB ASM30 Suite\Support\inc a nese název podle použitého procesoru. Dvojkliknutím si ho otevřeme v editoru a můžeme se do něj při práci dívat na přesné názvy jednotlivých speciálních registrů procesoru a jednotlivých jejich bitů.

Po skončení práce na úpravách podle zapojení hardwaru je dobré z menu File/Save zdrojový soubor uložit.

Projekt je vytvořen, zdrojový kód upraven, ale než přistoupíme ke kompilaci, je třeba provést ještě další nastavení. Vybereme menu Project a v něm položku Build Options... a dále Project.

Na záložce Directories jen zkontrolujeme, že je zaškrtnuta úplně poslední volba dole Assemble/Compile/Link in project directory, která nám zajistí, že všechny soubory vznikající při překladu se budou ukládat do stejné složky, kde máme celý náš projekt. Ještě pro jistotu stiskneme tlačítko Suite defaults, které zajistí, že cesta pro hledání souborů include a library se nastaví na přednastavenou hodnotu prostředí MPLAB. Dialog uzavřeme tlačítkem OK a můžeme konečně zkusit projekt zkompilovat.

Překlad programu

Kompilace, respektive správně řečeno vybudování celého projektu se provede z menu Project pomocí volby Build All (klávesová zkratka Ctrl F10). Pokud jsme nikde neudělali chybu, měla by kompilace proběhnout (vytvoří se výstupní soubor s příponou .o, ale linkování zkolabuje chybovou hláškou podobnou této:

Skipping link step. The project contains no linker script. BUILD FAILED: Tue Oct 09 21:36:19 2007

To je způsobeno tím, že linker potřebuje vědět, jakými typy a velikostmi pamětí vybraný procesor disponuje, aby tam mohl kód a data správně rozmístit. Informujeme ho o tom prostřednictvím skriptu, který je pro každý procesor jiný.

V okně projektu klikněte pravým tlačítkem na Linker Script a zvolte Add Files... Skripty mají příponu .gld a pokud jsme při instalaci MPLABu nic neměnili, najdeme je ve složce c:\Program Files\Microchip\MPLAB ASM30 Suite\Support\gld. Skripty mají názvy totožné s názvy součástek a volíme opět variantu bez e na konci. Po stisku Ctrl F10 nebo menu Project/Build All... by již budování projektu mělo skončit úspěšně. V modré tabulce si můžete všimnout například velikostí, které program a data v procesoru zabírají. Ve složce projektu by měl vzniknout mimo jiné kýžený soubor s příponou .hex, což je přeložený program připravený k nahrání do procesoru.

Nahrátí do procesoru

Nahrávání pomocí bootloaderu Existují dvě cesty jak program do procesoru dostat. První možností je použití některého programátoru procesorů PIC. Druhou a daleko příjemnější cestou je nahrání pomocí bootloaderu (viz samostatný článek).

Používáme-li Tiny bootloader, je postup jednoduchý. Testovací desku připojíme k sériovému portu počítače kabelem. Zapneme její napájení a na počítači spustíme bootloader.

Vybereme v něm použitý sériový port. Jeho rychlost se musí shodovat s tou, pro kterou jsme samotný bootloader překládali. Provedeme reset procesoru na desce a ihned po tom klikneme na CheckPIC. Měl by se objevit nápis o nalezeném procesoru (viz obrázek vlevo).

Pomocí tlačítka Browse pak vybereme přeložený hex soubor. Zresetujeme procesor a ihned klikneme na Write Flash. Program se nahraje do procesoru a pokud jsme nikde neudělali chybu, hned se spustí, což poznáme podle blikající LED diody.

Pokud na vás dioda mrká svým okem, zkuste ještě stisknout tlačítko a měla by se rozmrkat druhá LEDka.

Nezbývá než si pogratulovat. Nejtěžší začátek máme za sebou. Teď už půjde práce jak na drátkách. Stačí nechat otevřený bootloader, Překliknout se do MPLABu, upravit zdrojový kód, stisknout F10 (případně Ctrl F10), přepnout se do bootloaderu, zresetovat procesor a kliknout na Write Flash. (Bootloader pozná, že má skompilovanou novou verzi hex souboru a nahraje automaticky právě ji).

Poznámka: Využijeme-li možnosti signálu sériového portu RST pro reset procesoru na desce (viz článek o bootloaderu), nemusíme pochopitelně před nahráváním programů procesor resetovat ručně, postará se o to samotný bootloader.

Náměty na procvičení

Zkuste program upravit tak, aby:

  • diody blikaly rychlostí 1 Hz (dvě periody časovače za sekundu)
  • diody blikaly bez stisknutého tlačítka na střídačku (LED1, LED2, LED1, LED2, atd.) a se stisknutým tlačítkem obě současně (LED1+LED2, zhasnuto, LED1+LED2, zhasnuto, atd.)
  • diody blikaly v sekvenci LED1, mezera, LED2, mezera, LED1, mezera, atd.
  • diody blikaly bez stisku tlačítka frekvencí 1 Hz a se stisknutým tlačítkem frekvencí 10 Hz
PřílohaVelikost
blikame.zip2.75 KB