5.4. Perifériák helyettesítése párhuzamos feldolgozással a Propeller esetében A nem standard szerkezetű mikorvezérlő, nem megszokott megoldások megvalósítására is alkalmazható, ami sok esetben, nagymértékben leegyszerűsíti a beágyazott eszközfejlesztést. Egész sor folyamatosan bővülő lehetőség található meg a következő címen ##LINK: http://obex.parallax.com/## Parallax mikrokontroller gyártó segíti a potenciális felhasználót abban, hogy mennél könnyebben megismerje és használni tudja a mikrovezérlőt ##LINK: http://www.parallaxsemiconductor.com/appnotes##. A Demo board fejlesztőlap elektromos rajza Parallax szintén biztosít egy ftp szerver hozzá férést is, ahol a C3-as fejlesztőhöz egy sor alkalmazási lehetőséget ír le: ##LINK: ftp://ftp.propeller-chip.com/propc3/ ##
Az egyetlen periféria, amely a Propeller chipbe van építve az UART ##Universal Asynchronous Receiver/Transmitter általános, aszinkron fogadó/küldő## Mivel a Propeller chipnek nyolc független processzormagja van, ezek vannak előrelátva a többi szükséges periféria megvalósítására. Szoftveres úton egy vagy több Cog-mag közösen úgy viselkedik, mint a megvalósítani kívánt hardveres periféria. A következő fejezetekben, kerül bemutatatásra hogyan lehet megvalósítani önálló modulokkal a SPI, IrDA, Bluetooth, USB, CAN perifériákat. Programozási példák A folytatásban gyakorlati példákon keresztül lesz bemutatva a Propeller chip programozása. Erre a célra két fejlesztőlap: a Demo board és az Appl-DSP board lesz felhasználva. A kezdéshez a mellékelt címről: ##LINK: http://www.parallax.com/productinfo/microcontrollers/propellergeneralinformation/propellerm ediapage/tabid/832/default.aspx#software ## le kell tölteni a Propeller Tool ingyenes fejlesztőeszközt, amely a programok a Propeller chipre történő lefordítására szolgál. Az ábrán a Demo board fejlesztő elektromos rajza látható. 1. feladat: A Demo board lapon található LED-ek közül egyet kell ki-/be- kapcsolgatni! Indítsák el a Propeller Tool-t, amelybe be kell gépelni a 14. ábrán látható programot! A LED villogtató programkód $$$ a megjegyzések fordítása: 1. ½ másodperc a LED villogási periódusa 2. a vezérelt LED a P23 lábon van
3. a P23 lábat kimenetnek állítjuk be 4. a P23 kimenetet magas logikai szintre, 1 -re állítjuk 5. a Blink rutint, végtelenül ismételjük 6. invertáljuk a LED állapotát a fordítás vége $$$ Első ránézésre észrevehető, hogy a Parallax fejlesztőkörnyezet kialakításakor nagy figyelmet fordított a vizuális elemek használatára, a programozási folyamat segítése céljából. A 14. ábrán egyértelműen elkülönül négy terület, amelyeket más-más szín jelez: CON a konstansok definiálására szolgáló terület, VAR a változók definiálására szolgáló terület, PUB a nyilvános metódusok definiálására szolgáló terület. A Propeller metódusok hasonlítanak más programozási nyelvek alprogramjaira: paramétereket kap a meghívásakor, elvégzi a szükséges feldolgozásokat, majd eredménnyel tér vissza. Minden programban szerepelnie kell legalább egy nyilvános metódusnak, mert az alkalmazás az első nyilvános metódus futtatásával kezdi meg működését. PRI a privát metódusok definiálására szolgáló terület. Ezek a metódusok a nyilvános metódusokhoz hasonlóan működnek, különbség csak a metódusokhoz való hozzáférésben van. A fenti négy területen kívül léteznek még más programterületek is: OBJ az objektumok definiálására szolgáló terület. A Propeller objektumok különálló egységet képező, metódusok halmaza. DAT a forráskód assemblyben írt részének fenntartott terület. A privát metódusok, csak az őket definiáló objektumok bírják meghívni. A nyilvános metódusok bármely objektum részéről meghívhatóak, még akkor is, ha nem az adott objektumon belül lettek definiálva. Az objektumokból, a privát és nyilvános metódusok, a metódus nevével hívhatóak meg. Az objektumokon kívül, ha egy nyilvános metódust szükséges meghívni, akkor először a célobjektumot szimbolikusan kell deklarálni az OBJ részben. Pl.: OBJ Clk : Clock Ebben az esetben a Clk egy szimbolikus azonosító, amelyet a Clock objektum hívásakor kell használni. Ezután az objektum nyilvános metódusának meghívása az objektum és a metódus nevének a jelölésével történik: Objektum.Metódus alakban. Pl.: PUB Main Clk.PauseMSec(100)
A programblokkok (CON, DAT, OBJ, PRI, PUB és VAR) a könnyebb vizuális elkülönülés céljából mind saját színezéssel vannak ellátva. Ez egyes blokk addig tart, míg nem követi őket egy másik programblokk. A program forráskódjában az utasítások behúzással vannak ellátva. Azok az utasítások, amelyek jobbra be vannak húzva, a felettük levő (egy kicsit balra elhelyezkedő) utasítás alá tartoznak. Például a 14. ábrán a repeat utasítástól egy kicsit jobbra található az őt követő Blink metódushívás, így a metódushívás a repeat utasítás hatáskörébe tarozik. a forráskód részletes tárgyalása: Az első programsorban a CON jelöli a programblokk kezdetét, amelyben a konstansok kerülnek definiálásra: _clkmode = xtal1 + pll2x _xinfreq = 5_000_000 A fenti két sor a Propeller chip órajelét definiálják. A _clkmode definiálása két részből áll: az első az órajelhez használandó forrást, míg a második a PLL ##Phase Locked Loop fáziszárt hurok## áramkör szorzóját határozza meg. A definíció két része a + jellel van összekötve. Az órajel forrása lehet belső vagy külső. A következő azonosítók használhatóak: azonosító a forrás helye a forrás rezgésszáma RCSlow belső 13 33 khz RCFast belső 9 20 MHz xtal1 külső 4 16 MHz xtal2 külső 8 32 MHz xtal3 külső 20 80 MHz A PLL szorzótényezőjének a lehetséges értékei *2, *4, *8 és *8. Az ehhez tartozó programazonosítók pedig: pll2x, pll4x, pll8x és pll16x. Az _xinfreq konstans a külső oszcillátor pontos rezgésszámát őrzi. Bekapcsoláskor a Propeller chip az RCSlow üzemmódban indul el, 50 ms elteltével átvált RCFast üzemmódba. Ezután külső forrásból (soros vagy E2PROM kapcsolat) betölti a programot a Hub memóriába a programot. Végül a programban definiált _clkmode és _xinfreq szerinti üzemmódba vált. A következő két programsor: waitperiod = 5_000_000 LED = 23 Az első a LED be- és kikapcsolásának gyakoriságát definiálja. A Demo Board elektromos rajzán (13. ábra) látható, hogy a LED-ek a P16-P23 lábakhoz vannak csatlakoztatva. A P23-as lábra
kötött LED-et szeretnénk villogtatni. A LED szimbolikus konstansnak 23-as értéket adván, ezt használhatjuk a 23-as érték helyett a program folyamán. A CON programrészt a VAR programrész zárja le. Mivel ehhez a példához nincs szükség változókra a VAR blokk üresen marad! A folytatásban a PUB nyilvános rész következik, amelyben csak egy, a Main metódus van definiálva. Mivel ez az első (és egyetlen) nyilvános metódus a programban, az alkalmazás futtatása ezzel a metódussal fog kezdődni. A Main metódusban található első két utasítás: DIRA[LED] := 1 OUTA[LED] := 1 A DIRA egy 32 bites regiszter, amely bitjeinek írásával az egyes lábak irányát tudjuk beállítani. Az 1 -be állított lábak kimenetek, míg a 0 -ba állítottak bemenetek. Az első utasítás a P23-as lábat kimenetnek definiálja. Az OUTA egy 32 bites regiszter, az egyes bitekbe írt értékek megjelennek a nekik megfelelő kimeneti lábakon. Természetesen csak akkor ha az adott láb kimenetnek van definiálva. A második utasítás a P23-as lábra 1 -es vagyis magas logikai szintet küld, ami ebben az esetben, fizikailag 3.3VDC-nek felel meg. A Main metódus utolsó két utasítása a : repeat Blink A repeat utasítás folyamatosan meghívja az alá tartozó (alatta és behúzott) Blink metódust. A PUB blokknak a PRI blokk kezdetével van vége. Ebben az új programblokkban egy privát metódus a Blink található, mely két utasítást tartalmaz:!outa[led] waitcnt(waitperiod+cnt) Az első utasítás invertálja a LED kimeneti láb (avagy P23) pillanatnyi értékét. A metódus utolsó utasítása a Cog-magot készenléti állapotba helyezi, míg a rendszerszámláló nem éri el a zárójelben megadott értéket. A cnt a rendszerszámláló pillanatnyi értéke. Vagyis a mag 5000000 órajelet fog várni. Ezután lezárul a Blink metódus és visszatér a meghívó Main metódushoz a végrehajtás, ami egy újboli repeat-blink páros A Demo board-ra tápfeszültséget kell kötni, összekötni a számítógéppel egy USB kábellel, a fejlesztőkörnyezetben meg kell nyomni az <F10> tasztert. Ezután a Propeller Tool fejlesztőkörnyezet le fogja fordítani az alkalmazást és felfogja programozni a Demo boardon található Propeller chippet.