|
1. A felső és alsó szintek összekapcsolása Az előző cikkben együtt tanultunk az egyszerű külső megszakítások megvalósításáról. Most, hogy gyakorlati tapasztalatunk van a megszakításokkal, beszéljünk ebben a szakaszban az időzítő megszakításokról. A CC2430-nak összesen 4 időzítője van, amelyek három kategóriába oszthatók: 1-es időzítő, 2-es, 3/4-es időzítő (a 3-as és 4-es használata ugyanaz). Mivel a szerző szintén új a CC2430-ban, és gyakorlatilag nulla gyakorlati tapasztalata nincs időzítőkkel kapcsolatos projektekben, nem szándékomban áll (és nem is tudok semmit tenni) alaposan elemezni az időzítőt. Ez a cikk csak rövid kísérleti áttekintést nyújt az 1-es időzítő használatáról a túlfolyó megszakítások számlálásában, és nem említi annak bemeneti rögzítési/kimeneti összehasonlítása/PWM függvényeit. A 2-es és 3/4-es időzítő csak egyszerű funkcióbevezetések. Miután a szerző képességei elérnek egy bizonyos szintet, Zigbee gyakorlati tapasztalatának csúcsán állok, hogy javítsam ezt az esszét. 2. Időzítő 1Az 1-es időzítő egy 16 bites időzítő, időzítő/számláló/impulzusszélesség modulációval. Három külön programozható bemenet-rögzítési/kimeneti összehasonlító csatornája van, amelyek mindegyike használható PWM kimenetként vagy élidőként a bemeneti jel rögzítésére (a bemeneti rögzítési/kimeneti összehasonlításról és a PWM kimenet megvalósításáról az olvasók a CC2430 kínai kézikönyvhöz tekinthetők). Az időzítőknek van egy nagyon fontos fogalma:Működési mód。 Az üzemmódok a következők: Szabad működési mód (szabadon futó), molda mód (modulo) és Pozitív Számolás/Visszaszámlálás mód (Fel-le)。 Az alábbiakban egy részlet található a CC2430 kínai kézikönyvéből a három mód bevezetéséhez:
A három módmód összehasonlításakor látható, hogy a szabad működési mód túlcsordulás értéke 0xFFFF változatlan; A másik két mód lehetővé teszi az időzítő túlcsordulásának pontos szabályozását azáltal, hogy egy értéket rendelnek a T1CC0-hoz. Ez a kísérlet ezt a funkciót használja arra, hogy egy adott T1CC0-on keresztül 1 másodpercenként megszakítást indítson el az időzítő által, hogy pontosan szabályozzák a LED fény villogási intervallumát 1 másodpercig. (1) Bevezetés a kísérlethezAz időzítő modulo módjában a LED fény villogási intervallumát pontosan az 1-es fények szabályozzák, nevezetesen: világos 0,5s → sötét 0,5s → fényes 0,5s → halvány 0,5s ...... → Világos 0,5s → Sötét 0,5s (azaz a sötét és világos közötti időintervallum 1s). A világos/sötét inverziót túlcsorduló megszakítások érik el. (2) Programáram
(3) Releváns számításokAhogy korábban említettük, a LED fény állapota: világos 0,5s → sötét 0,5s → világos 0,5s → halvány 0,5s ...... → 0,5s fény → 0,5s sötét, és túlcsordulás megszakításokkal kell megvalósítani, így az időzítő túlcsordulási ideje 0,5s kell, hogy legyen. Ehhez ki kell számítani a megfelelő túlfolyó értéket (ideiglenesen N-re állítva). A rendszer órajel frekvenciája 32MHz-nek van kiválasztva, és a megadott órajel alapértelmezés szerint 16MHz (mindkettőt speciális függvényregiszterek határozzák meg).CLKCONRészletekért kérjük, tekintse meg a CC2430 kínai kézikönyvet. Az 1-es időmérő esetében állítsuk be az óra átjátszását 128 divízióra. Összefoglalva, a lista a következő:
Ahhoz, hogy megtaláljuk N=62500-at, annak hexadecimalája 0xF424, vagyis be kell állítani: T1CC0H=0xF4, T1CC0L=0x24 . (4) Kísérleti forráskód és elemzés/*
Kísérlet leírása: Timer Timer1 kísérlet, időzítő szám túlcsordulás, LED1 villogása
*/
#include
#define lead1 P1_0
#define led2 P1_1
#define lead3 P1_2
#define lead4 P1_3
/*系统时钟初始化
-------------------------------------------------------*/
Semmixtal_init(Semmi)
{ ALVÁS &= ~0x04; //都上电
miközben(! (ALVÁS &0x40)); //晶体振荡器开启且稳定 CLKCON &= ~0x47; Válassz egy 32 MHz-es kristályoscillátort ALVÁS |=0x04;
}
/*LED初始化
-------------------------------------------------------*/
Semmiled_init(Semmi)
{ P1SEL =0x00; A P1 a normál I/O port P1DIR |=0x0F; P1.0 P1.1 P1.2 P1.3 kimenet
led1 =1; //关闭所有LED led2 =1; led3 =1; led4 =1;
}
/*T1初始化
-------------------------------------------------------*/
Semmitimer1_init(Semmi)
{ EA=1; //开总中断 T1IE=1; //开T1中断 OVFIM=1; //开T1溢出中断
T1CC0L=0x24; //溢出值低8位 T1CC0H=0xF4; //溢出值高8位
T1CTL =0x0e; 128 crossover; modulo mód (0x0000->T1CC0); Kezdj el futni; T1IF=0; Töröld a megszakító táblát
}
/*主函数
-------------------------------------------------------*/
Semmimain(Semmi)
{ xtal_init(); led_init(); timer1_init();
miközben(1); //等待溢出中断
}
/*T1终端服务子程序
-------------------------------------------------------*/
#pragma vektor=T1_VECTOR __interruptSemmiT1_ISR(Semmi)
{ EA=0; //关中断
led1 = !led1; //LED灯反转
EA=1; //开中断
T1CTL &= ~0x10; //清中断标志
}
Rendben, fordítsd le a programot és debugálj online, a fejlesztő panel LED1 villog, ahogy tervezték, és úgy érzem, a villogási intervallum körülbelül 1 másodperc. De ez nem elég a kísérlet sikerének bizonyításához, ha az intervallum szigorúan 1-nek lehet meghatározni, tökéletes lesz~ Ezért bekapcsoltam a WIN 7 óráját (kattints a feladatsáv jobb oldalán lévő időre). Miközben a második mutatót nézte, a szeme sarkából a LED1 villogását látta. Az eredmény: két percen belül a kettő tempója gyakorlatilag pontosan ugyanaz (ez a pontosság elviselhető~). Ezen a ponton a kísérlet gyakorlatilag befejezett, hehe~ 3. Időzítő 2A 2-es időzítőt más néven is hívjákMAC időzítő, kifejezetten az IEEE 802.15.4 MAC eseménykövető protokolljának támogatására tervezték. Az időzítő 8 jegyű túlcsordulás számlálóval rendelkezik, amellyel rögzítheti a bekövetkezett ciklusok számát; Van egy 16 bites rögzítő regiszter, amely pontosan rögzíti, mikor kezd el egy képkocka elkapni/küldeni, vagy pontosan mikor fejeződik be az adás. Emellett tartalmaz egy 16 bites kimeneti összehasonlító regisztert is, amely különböző parancskapus jeleket generál (indítás, küldés indítása stb.) a vezeték nélküli modul felé egy adott időpontban. 4. Időzítő 3/4A 3/4-es időzítő egy 8 bites időzítő, időzítő/számláló/PWM funkcióval. A T3/T4-nek 2 kimeneti összehasonlító csatornája van, amelyek mindegyike PWM kimenetként használható. 5. ÖsszegzésEz a rész főként az 1-es időzítő számlálási túlfolyó megszakításának módszerét tanulja, és megvalósítja a LED fény villogási intervallumának pontos irányítását 1s. Csak néhány másik időzítő csak egy húzás, és később visszajövök, hogy hozzáadjam őket. A következő részben bemutatjuk a CC2430 soros port kommunikációt.
|