Fórum témák

» Több friss téma
Cikkek » Launchpad: ismerkedés az MSP430 mikrovezérlőkkel III.
Launchpad: ismerkedés az MSP430 mikrovezérlőkkel III.
Szerző: icserny, idő: Jún 19, 2012, Olvasva: 20554, Oldal olvasási idő: kb. 3 perc
Lapozás: OK   6 / 10

Programmegszakítások

Az újabb kiadású Launchpad kártyához kapott MSP430G2553 és MSP430G2452 mikrovezérlők megszakítási rendszere mindenben megegyezik a második cikk 4. oldalán leírtakkal.  Itt most csupán az ott bemutatott mintapéldák adaptálásához fűzök néhány megjegyzést.

Természetesen az új Launchpad kártyához minden projektben át kell állítani a mikrovezérlő típusát. A cikk végén megadott linkről összecsomagolva letölthető példaprogramokban már mindenütt az MSP430G2553 mikrovezérlő van beállítva! Ezen kívül azonban néhány esetben további változtatásra is szükség lehet, ahogy azt az alábbiakban látni fogjuk.

2_p1_3_interrupt

Ebben példában a főprogram LED2-t villogtatja, végtelen ciklusban. Ez lesz az a tevékenység, amelyet egy külső esemény (példánkban az S2 nyomógomb lenyomása) megszakít. A megszakítás kiszolgálásakor átbillentjük LED1 állapotát. Végeredményben tehát a program folyamatosan villogtatja a zöld LED-et, mi pedig eközben az S2 nyomógombbal ki-be kapcsolgathatjuk a piros LED-et.

Módosítás: Az új kártyánál az S2 nyomógomb használatához be kell kapcsolnunk a belső felhúzást. Ehhez az alábbi utasításokra van szükség:

A programban néhány olyan módosítás is történt, amelyeknek nincs különösebb jelentősége (pl. kivettem a P2 port beállítására vonatkozó utasításokat), maradhattak volna eredeti formájukban is.

2_p1_3_change_state

Ebben a példában az S2 nyomógombokkal keltett, hogy a megszakítás befolyásolja a főprogram további menetét. Az egyszerűség kedvéért az előző programot variáltuk meg egy kicsit: a főprogramban nem egy, hanem nyolc tevékenység közül lehet választani egy szoftveres kapcsoló és egy jelző segítségével. Az S2 gomb megnyomásakor mindig eggyel léptetjük a jelzőt, ügyelve, hogy annak értéke csak 0 és 7 közötti szám lehet. Végeredményben a főprogram állapotától függően vagy a piros vagy a zöld LED fog villogni, a villogás frekvenciája pedig négy-négy fokozatban léptethető.

Módosítások:

  • A programnak tévedésből egy korábbi, hibás változata került be a második cikk példái közé, ezért az alábbiakban a kijavított teljes programlistáját bemutatom.
  • Az új kártyánál az S2 nyomógomb használatához az előző programnál bemutatott módon be kell kapcsolnunk a belső felhúzást.

Energiatakarékos üzemmódok

Az MSP430 mikrovezérlőket, s különösen az ultra-alacsony-energiaigényű MSP430G2xxx sorozatot alacsony fogyasztású alkalmazásokhoz szánták, s ez abban is tükröződik, hogy az aktív mód mellett több energiatakarékos üzemmóddal is rendelkezik: LPM0, LPM1, LPM2, LPM3, LPM4. Az energiatakarékos üzemmódok jelölésében az LPMx rövidítés a Low Power Mode (alacsony fogyasztású mód) elnevezést takarja.

A beállítható energiatakarékos módok bemutatása a az MSP430x2xx Family Users Guide kézikönyv 2. fejezetében, valamint a cikksorozatom második részének 5. oldalán található.

2_p1_3_insleep  

Ebben a programban az inicializálás után a CPU-t altatjuk, s minden órajelet kikapcsolunk (LPM4 mód). A CPU felébresztése ilyenkor csak külső megszakítással lehetséges. Mi most az S2 nyomógombbal keltett megszakításokkal LED1-et kapcsolgatjuk. Induláskor és felébredéskor MCLK és SMCLK órajele az alapértelmezett 1 MHz-es DCO frekvencia lesz. ACLK-val most nem foglalkozunk. Az interupt kiszolgálása után a mikrovezérlő újra LPM4-es energiatakarékos módba kerül.

A szükséges változtatások: P1.3 belső felhúzását engedélyezni kell.

2_p1_3_wakeup

Az előző példában a külső esemény bekövetkeztekor a megszakítást kiszolgáló eljárásban végeztük el a teendőket. Vannak azonban olyan alkalmazások, amelyeknél ennél bonyolultabb a feladat, mert a külső megszakítás után egy hosszabb tevékenységsorozatot kell elvégeznünk, amit már nem célszerű a megszakítás szintjén futtatni (mert közben esetleg újabb megszakításokat kellene feldolgoznunk). Ilyen esetekben fel kell ébresztenünk a főprogramot. C nyelvű programokban ehhez a megszakítást kiszolgáló eljárás végén a  __low_power_mode_off_on_exit() függvényhívást kell kiadnunk.

Ebben a programban külső eseménnyel (szokásos módon az S2 gomb megnyomásával) ébresztjük fel a főprogramot, ami minden felébresztéskor egy adott ideig tartó tevékenységet végez (itt most kb. 2,5 másodpercig ellenütemben villogtatja a LED-eket), majd újra aludni tér, az LPM4-es mód beállításával.

A szükséges változtatások:

  • P1.3  felhúzását engedélyezni kell.
  • P1OUT kezelését módosítani kell, mert az eredeti programban gondatlanul nulláztuk azt a bitet, amelyik most a fel/lehúzás irányát állítaná be. Tehát POUT1 = valami; helyett P1OUT |= valami;, illetve P1OUT &= ~valami; típusú kezelés kell.

A cikk még nem ért véget, lapozz!
Következő: »»   6 / 10
Értékeléshez bejelentkezés szükséges!
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem