| I. Az előző cikk folytatásaként Az előző részben az egyszerű külső megszakítások megvalósítását ismertük meg közösen. A megszakításokkal kapcsolatos gyakorlati tapasztalatok megszerzése után ebben a részben az időzítő megszakításokat tárgyaljuk. 4 időzítővel rendelkezik a CC2430, amelyek 3 kategóriába sorolhatók: Timer1, Timer2, Timer3/4 (a 3 és 4 használata megegyezik). Mivel a szerző is csak megérinti a CC2430-at, az időzítővel kapcsolatos projekt tapasztalata alapvetően nulla, ezért nem szándékozom (és nem tudok segíteni) az időzítő mélyreható elemzését. Ez a cikk csak az időzítő 1 számolásának túlcsordulási megszakítási használatáról szól, hogy egyszerű kísérleti feltárást végezzen, a bemeneti rögzítés / kimeneti összehasonlítás / PWM funkciója kimarad. A 2. időzítő és a 3/4. időzítő szintén csak röviden kerül bemutatásra. Várva, hogy a szerző hatalma elérje a tűz egy bizonyos szintjét, majd álljon a Zigbee harci tapasztalatainak magasságában, hogy javítsa ezt az esszét. Időzítő 1 Az időzítő1 egy 16 bites időzítő időzítő / számláló / impulzusszélesség-modulációs funkciókkal. Három külön-külön programozható bemeneti rögzítő / kimeneti összehasonlító csatornával rendelkezik, amelyek mindegyike PWM-kimenetként használható, vagy a bemeneti jel élidejének rögzítésére használható (további információkért arról, hogy mi a bemeneti rögzítés / kimeneti összehasonlítás és hogyan kell megvalósítani a PWM-kimeneteket, az olvasók saját maguk olvashatják a CC2430 kínai kézikönyvét). Az időzítőnek van egy nagyon fontos fogalma: működési mód. A működési módok közé tartoznak: szabadonfutás, modulo és fel-le. Az alábbiakban a három üzemmód bemutatása következik a CC2430 kínai kézikönyvéből:
A három üzemmódot összehasonlítva látható, hogy: a szabadon futó üzemmód túlcsordulási értéke 0xFFFF, ami nem változtatható; míg a másik két üzemmód pontosan szabályozható a T1CC0 értékének hozzárendelésével, hogy az időzítő túlcsordulási értéke pontosan szabályozható legyen. Ez a kísérlet ezt a funkciót használja ki, hogy az időzítő 1s-ként megszakítást indítson a specifikus T1CC0-n keresztül, hogy pontosan szabályozza az 1s LED villogási intervallumát. (1) A kísérlet bevezetése Az időzítő modulo üzemmódjában a LED villogási időközét pontosan 1s-re szabályozzuk, azaz: világos 0,5s → sötét 0,5s → világos 0,5s → sötét 0,5s ...... 0,5s → sötét 0,5s. → világos 0,5s → sötét 0,5s (azaz a sötétből világosba való átmenet pillanata 1s). A világos/sötét átváltás a túlcsordulás megszakításával valósul meg. (2) A program folyamatábrája (3) Kapcsolódó számítások Mint már említettük, a LED állapota: világos 0,5s → sötét 0,5s → világos 0,5s → sötét 0,5s ...... → világos 0,5s → sötét 0,5s, és a túlcsordulás megszakítással kell elérni, ezért az időzítő túlcsordulási periódusa 0,5s. Ehhez ki kell számítani a megfelelő túlcsordulási értéket (ideiglenesen N-re kell állítani). A rendszeróra frekvenciája 32MHz-re van beállítva, és az időzítő számára biztosított órajel frekvenciája alapértelmezés szerint 16MHz (mindkettőt a CLKCON speciális funkcióregiszterrel lehet konfigurálni, amely a CC2430 kínai kézikönyvében található). Az 1. időzítőhöz állítsa be az órajel frekvenciáját 128 osztásra. Összefoglalva, a képlet a következő lehet:
c
Derítsd ki, hogy N = 62500, annak hexadecimális értéke 0xF424, azaz be kell állítani T1CC0H = 0xF4, T1CC0L = 0x24 azaz .
(4) kísérleti forráskód és elemzés/* Kísérlet leírása: Timer1 kísérlet, időzítő számláló túlcsordulása, LED1 villogása */ #include #define led1 P1_0 # define led2 P1_1 #define led3 P1_0 #define led3 P1_1
1 #define led3 P1_2 #define led4 P1_3 &
n bsp; /* rendszeróra inicializálás-------------------------------------------------------*/void xtal_init( void ) { SLEEP &=~0x04;& nbsp; // mindkettő bekapcsolwhile (! (SLEEP & 0x40 )); //kristályos oszcillátor bekapcsolva és stabil CLKCON &=~0x47; &
nbsp; // 32MHz-es kristályoszcillátor kiválasztása SLEEP |=0x04; }/*LED inicializálás-------------------------------------------------------*/void led_init( void ) { & nbsp; P1SEL = 0x00; //P1 egy normál I/O port P1DIR |=0x0F; & nbsp; //P1.0 P1.1 P1.2 P1.3 kimenetek led1 =1; &
nbsp; //A LED-ek kikapcsolása led2 =1; led3 =1; led4 =1; }/*T1 inicializálás---------------------------
- ---------------------------*/void timer1_init( void ) {EA=1; // teljes megszakítás bekapcsolása & nbsp; T1IE=1; // T1 megszakítás bekapcsolásaOVFIM=1; // T1 túlcsordulás bekapcsolása
m egszakításT1CC0L=0x24; // túlfolyási érték alacsony 8 bit T1CC0H=0xF4; // túlfolyási érték magas 8 bit &
nbsp; T1CTL =0x0e; //128 osztás; modulo mód (0x0000->T1CC0); futás indítása;T1IF=0; &
nbsp; // megszakításjelző törlése }/* főfüggvény-------------------------------------------------------*/void main( void
) { xtal_init(); led_init(); timer1_init();while ( 1 ); &
nbsp; //várakozás a túlcsordulás megszakítására }/*T1 terminál szerviz alprogram-------------------------------------------------------*/#pragma vector=T1_VECTOR__interrupt
v oid T1_ISR( void ) {EA=0; //megszakítás kikapcsolása led1 = !
led1; //LED-ek fordítvaEA=1; //megszakításon  
; T1CTL &=~0x10; // megszakításjelző törlése } OK, fordítsuk le a programot és online hibakeresés, a fejlesztői kártya a LED1 villog fel a vártaknak megfelelően, érezzük a villogó intervallumot kb. 1s. De ez nem elég a kísérlet sikerének bizonyítására, ha szigorúan meg tudjuk határozni az 1s intervallumot, az tökéletes lenne ~ így megnyitottam a WIN 7 órát (kattintsunk a jobb oldalon a feladatsor idő lehet). Miközben a másodpercmutatót figyeltem, a szemem sarkából a villogó LED1-re pillantottam. Az eredmény: két perc múlva a kettő tempója lényegében megegyezik (ez a pontosság tolerálható ~). Ezen a ponton a kísérlet lényegében befejezettnek mondható, hehehe~ Harmadszor, a 2. időzítő Az IEEE 802.15.4 MAC-ben lévő eseménykövető protokoll támogatására kifejezetten az IEEE 802.15.4 MAC-ben lévő eseménykövető protokollt támogatja az időzítő2, más néven MAC időzítő. Az időzítőnek van egy 8 bites túlcsordulásszámlálója, amely a bekövetkezett ciklusok számának rögzítésére használható; van egy 16 bites rögzítő regisztere, amely a keretkezdet-határoló pontos időpontjának rögzítésére szolgál, amikor egy keretkezdet-határoló érkezik / továbbításra kerül, vagy amikor egy átvitel befejeződik; és tartalmaz egy 16 bites kimeneti összehasonlító regisztert is, amely arra szolgál, hogy különböző parancsszelektív kommunikációs jeleket generáljon a vezeték nélküli modulnak egy adott időpontban (vétel megkezdése, adás megkezdése stb.). Időzítő 3/4 A 3/4-es időzítő egy 8 bites időzítő időzítő/számláló/PWM funkciókkal. t3/t4 két kimeneti összehasonlító csatornával rendelkezik, amelyek mindegyike PWM kimenetként használható. V. Következtetés Ebben a szakaszban megtanultuk az 1. időzítő túlcsordulási megszakításának számlálási módszerét, és elértük a LED villogó 1 s-os intervallumának pontos vezérlését. Csak átfutjuk a többi időzítőt, majd később visszatérünk, hogy hozzáadjuk őket. A következő szakaszban bemutatjuk a CC2430 soros port kommunikációjáról szóló információkat. |