11.3.1. Az MSP430 energiatakarékos használata A Texas Instruments ##LINK: www.ti.com## által fejlesztett MSP430 ##Mixed Signal Processor## család tagjai létrehozásakor a tervezők fontos célja volt a rendkívül alacsony fogyasztás. Ennek érdekében az MSP430 család tagjai több, egymástól teljesítmény-felvételben eltérő módban képesek működni. Például az MSP430F261x processzorcsoport jellemző áramfelvétele (2.2VDC táplálás és 1 MHz-es órajel mellett): aktív módban, 365 µa, készenléti módban, 0.5 µa, lekapcsolt módban (RAM megőrzéssel): 0.1 µa. Az MSP430 mikrovezérlő, készenléti módból kevesebb mint 1 µs alatt ébred fel és vált át a teljesen aktív üzemmódra (1. irodalom). Az üzemmódok kialakításakor figyelembe vették a három leggyakoribb, de egymással ellentétes elvárást (2. irodalom): rendkívül alacsony fogyasztás, nagysebességű feldolgozás és adatmozgatás, az egyes perifériák áramfelvétele. Az MSP430 mikrovezérlőknek egy aktív és öt alacsony teljesítményű üzemmódja (LPMx) ##Low Power Mode## van. Az 1. ábrán az áramfelvétel van bemutatva (1 MHz-es órajel és két különböző tápfeszültség mellett) (2. irodalom):. 1. ábra az MSP430 mikrovezérlők áramfelvétele Az MSP430 mikrovezérlők működési módjait négy vezérlőbit befolyásolja (CPUOff, OscOff, SCG0 és SCG1), amelyek kombinációi az órajeleket előállító oszcillátorokat és a periferiákat engedélyezik vagy tiltják le. Az összes felsorolt vezérlőbit az állapotregiszterben kap helyet, így megszakítás esetén mentésük és visszaállításuk automatikusan megtörténik.
2. ábra az MSP430 működési módjai, állapotdiagram Szempontok az MSP430-al megvalósítandó alacsonyfogyasztású rendszer tervezéséhez: A legfontosabb tényező hogy az MSP430-as órajel rendszerét úgy használjuk, hogy a mikrovezérlő minél több időt töltsön az LPM3 üzemmódban. Az LPM3 üzemmódban az áramfelvétel kevesebb mint 2 µa, ami mellett a valós idejű óra/számláló és megszakítási rendszer mégis aktív marad. Külső 32768Hz-es óra kristályt használjunk az ACLK órajel előállítására, miközben a CPU magot az egyébként kikapcsolt állapotban levő belső DCO ##Digitally Controlled Oscillator digitálisan vezérelt rezgőkör## órajelgenerátorral hajtjuk meg. A rendszer így 6 µ-os ébredési idő alatt tud aktív üzemmódba lépni. A megszakítási rendszert kell használni a processzor ébresztésére és a program folyamatának vezérlésére.
A perifériákat csak akkor kapcsoljuk be, és csak addig tartsuk bekapcsolva, amikor és amíg szükség van rájuk. Használjuk ki az alacsony fogyasztású beépített perifériális egységeket a szoftveres megoldások helyett. Például az A és B időzítők önállóan képesek PWM ##Pulse Width Modulation impulzus szélesség moduláció## jel előállítására, annélkül, hogy ehhez CPU erőforrásra lenne szükségük. A kiszámított ugrások és a táblázatos függvények használata ajánlott, a zászló lekérdezés és hosszadalmas szoftveres számítások helyett. Kerüljük a gyakori alprogram- és függvényhívásokat, mert ez többletterhelés a CPU-nak Az intenzíven használt szoftver rutinok írásakor, ajánlott az egy gépi ciklus igénybevevő, a CPU belső regisztereit használó optimalizálás bekapcsolása. Az MSP430 alacsony fogyasztási mód be- és kikapcsolása A vezérlőbitek segítségével bármikor be tudunk lépni az öt alacsony fogyasztású üzemmód egyikébe (2. irodalom). Megjegyzés: BIS BIt Set bit magasra állítása. példa 1.: ; LPM0-ba lépés assembly példa BIS #GIE+CPUOFF,SR ; belépés az LPM0 módba... ; a program itt megáll! példa 2.: ; LPM3-ba lépés assembly példa BIS #GIE+CPUOFF+SCG1+SCG0,SR ; belépés az LPM3 módba... ; a program itt megáll! Amennyibben olyan megszakítási kérés érkezik, amely lekezelése engedélyezve van, felébreszti az MSP430 mikrovezérlőt bármely alacsony fogyasztású üzemmódból, hogy kiszolgálhassa a beérkezett megszakítást. Ez a következő módon és sorrendben történik meg: 1. megérkezik egy engedélyezett megszakítás 2. a verembe tárolásra kerül a programszámláló (PC) ##Program Counter## és állapotregiszter (SR) ##Status Register## 3. a programszámláló (PC) ##Program Counter## felveszi a megfelelő megszakítás kiszolgáló alprogram (ISR) ##Interrupt Service Routine## kezdőcímét 4. a CPUOFF, SCG1 és OSCOFF bitek 0-ba állítása, ébredés, aktív módba való áttérés Amikor a megszakítást kiszolgáló alprogram elvégezte a feladatát kétféleképp tudja befejezni az alprogramot:
a veremről visszaállítja az eredeti állapotregiszter (SR) ##Status Register## állapotot ami az eredeti működési mód állapotba való visszatérést jelenti, a veremben tárolt állapotregiszter (SR) ##Status Register## állapotát megváltoztatva tér vissza az alprogramból, így a mikrovezérlő bármelyik működési állapotban tudja folytatni a munkáját. Megjegyzés: BIC BIt Clear bit alacsonyra állítása RETI RETurn from Interrupt visszatérés a megszakítási alprogramból példa 3.: ; kilépés az LPM0 módból assembly példa BIC #CPUOFF,0(SP) ; kilépés az LPM0-ból RETI-re RETI ; SR és PC vissza a veremről példa 4.: ; kilépés az LPM3 módból assembly példa BIC #CPUOFF+SCG1+SCG0,0(SP) ; kilépés az LPM3-ból RETI-re RETI ; SR és PC vissza a veremről MSP430F26x alacsony fogyasztási módja C nyelvű példa feladat: egy LED-et kell villogtatni 2s-os periódusidővel, alacsonyfogyasztású üzemmód használatával. a megoldás folyamata: A P2-es port 0. kimenetére van rákapcsolva a LED, a TimerA számláló/időzítőt használjuk az órajel leosztására és a megszakítási kérelem előállítására. Az inicializálás után a mikrovezérlő LPM0 alacsonyfogyasztású üzemmódban van, csak a megszakítás kiszolgálására ébred fel, ami után ismét visszatér az LMP0 üzemmódba (3. ábra).
a C nyelvű forráskód: 3. ábra LED 2s villogtatása, folyamatábra #include <msp430x26x.h> void main(void) { WDTCTL = WDTPW + WDTHOLD; P2DIR = 0xff; P2OUT = ~ 0x01; CCTL0 = CCIE; CCR0 = 4096; TACTL = TASSEL_1 + + ID_3 + MC_2; // az MSP szimbólum definíciók // a wachdog időzítő kikapcsolása // a P2 mint kimenet // az P2.0 kimenet negatív log. aktív // CCR0 számláló megszakítás // engedélyezés // a (vissza)számláló kezdőértéke // a 8-al osztott ACLK lesz az // időzítő órajele, // a számlálás folyamatos (contmode) } _BIS_SR(LPM0_bits + GIE); // LPM0 módba lépés a megszakítások // engedélyezésével. A CPU itt megáll! // TimerA0 ISR az időzítő megszakítás kiszolgáló alprogramja #pragma vector = TIMERA0_VECTOR interrupt void Timer_A (void) { } P2OUT ^= 0x01; CCR0 += 4096; // A P2.0 negálása, LED átkapcsol // Az időzítő (vissza)számlálója // újra feltöltve
magyarázat: a megfelelő port és számláló inicializálás után a mikrovezérlő LPM0-ba kerül. Az ACLK órajelet a külső kristály, 32768Hz értékre stabilizálja. Ez 8-al történő előosztás után, mint 4096Hz órajel jut el az időzítőbe. Az időzítő CCR0 számlálója 4096 órajelente vagyis 1 másodpercenként vált ki megszakítást. A megszakítás felébreszti a mikrovezérlőt. A megszakítás kiszolgáló alprogramban negálásra kerül a LED-et meghajtó P2.0 port pillanatnyi állapota, és a CCR0 számláló újból felveszi a kezdőértékét. A kiszolgáló alprogram lefutása után a mikrovezérlő ismét visszatér az LMP0 alacsonyfogyasztású üzemmódba. irodalom: (1) MSP430F241x, MSP430F261x Mixed Signal Microcontroller: ##LINK: http://www.ti.com/lit/ds/slas541j/slas541j.pdf## (2) MSP430x2xx Family felhasználói kézikönyv: ##LINK: www.ti.com/lit/ug/slau144i/slau144i.pdf## (referencia dokumentumok: Lásd az MSP felépítése fejezetet!!!)