|
1. Augšējā un apakšējā līmeņa savienošana Iepriekšējā rakstā mēs kopā uzzinājām par vienkāršu ārējo pārtraukumu ieviešanu. Tagad, kad mums ir praktiska pieredze ar pārtraukumiem, šajā sadaļā parunāsim par taimera pārtraukumiem. CC2430 kopumā ir 4 taimeri, kurus var iedalīt 3 kategorijās: taimeris 1, taimeris 2, taimeris 3/4 (3 un 4 lietojums ir vienāds). Tā kā autors ir arī jauns CC2430 un viņam būtībā nav praktiskas pieredzes projektos, kuros iesaistīti taimeri, es neplānoju (un neko nevaru darīt) padziļināti analizēt taimeri. Šajā rakstā ir sniegts tikai īss eksperimentāls pētījums par taimera 1 izmantošanu skaita pārplūdes pārtraukumos, un nav pieminētas tā ievades uztveršanas/izvades salīdzināšanas/PWM funkcijas. Taimeris 2 un taimeris 3/4 ir tikai vienkārši funkciju ievadi. Pēc tam, kad autora prasmes sasniegs noteiktu karstuma līmeni, es stāvēšu Zigbee praktiskās pieredzes augstumā, lai uzlabotu šo eseju. 2. Taimeris 1Taimeris 1 ir 16 bitu taimeris ar taimeri/skaitītāja/impulsa platuma modulāciju. Tam ir 3 individuāli programmējami ieejas uztveršanas / izejas salīdzināšanas kanāli, no kuriem katru var izmantot kā PWM izeju vai kā malas laiku ieejas signāla uztveršanai (informāciju par to, kas ir ieejas uztveršanas / izejas salīdzinājums un kā ieviest PWM izeju, lasītāji var skatīt CC2430 ķīniešu rokasgrāmatu). Taimeriem ir ļoti svarīgs jēdziens:Darbības veids。 Darbības režīmi ietver: Brīvs darbības režīms (brīva darbība), pelējuma režīms (modulo) un pozitīvā skaitīšanas/atpakaļskaitīšanas režīmā (Uz augšu-uz leju)。 Šis ir fragments no CC2430 ķīniešu rokasgrāmatas par 3 režīmu ieviešanu:
Salīdzinot trīs režīmus, var redzēt, ka brīvā darbības režīma pārplūdes vērtība ir 0xFFFF nemainīga; Pārējie divi režīmi ļauj precīzi kontrolēt taimera pārplūdes vērtību, piešķirot vērtību T1CC0. Šis eksperiments izmanto šo funkciju, lai aktivizētu pārtraukumu ik pēc 1s ar taimeri caur konkrētu T1CC0, lai precīzi kontrolētu LED gaismas mirgošanas intervālu līdz 1s. (1) Ievads eksperimentāTaimera modulo režīmā LED gaismas mirgojošo intervālu precīzi kontrolē 1s, proti: spilgti 0,5 s → tumši 0,5 s → spilgti 0,5 s → blāvi 0,5 s ...... → Gaišs 0,5 sekundes → Tumšs 0,5 sekundes (t.i., laika intervāls no tumsas līdz gaismai ir 1 s). Gaismas / tumsas inversija tiek panākta ar pārpildītiem pārtraukumiem. (2) Programmas plūsmas diagramma
3) Attiecīgie aprēķiniKā minēts iepriekš, LED gaismas statuss ir: spilgts 0,5 s → tumšs 0,5 s → spilgts 0,5 s → blāvs 0,5 s ...... → 0,5 sekundes gaišas → 0,5 sekundes tumšas, un tas ir jāīsteno ar pārplūdes pārtraukumiem, tāpēc taimera pārplūdes periodam ir jābūt 0,5 sekundēm. Lai to izdarītu, ir jāaprēķina atbilstošā pārplūdes vērtība (īslaicīgi iestatīta uz N). Sistēmas pulksteņa frekvence ir izvēlēta kā 32 MHz, un norādītā pulksteņa frekvence pēc noklusējuma ir 16 MHz (abas nosaka speciāli funkciju reģistri).CLKCONSīkāku informāciju skatiet CC2430 ķīniešu rokasgrāmatā). Taimeri 1 iestatiet pulksteņa krustojumu uz 128 nodaļām. Rezumējot, saraksts ir šāds:
Lai atrastu N=62500, tā heksadecimāls ir 0xF424, tas ir, jums jāiestata T1CC0H=0xF4, T1CC0L=0x24 . (4) Eksperimentālais pirmkods un analīze/*
Eksperimenta apraksts: Taimeris Taimeris1 eksperiments, taimera skaita pārplūde, LED1 mirgo
*/
#include
#define led1 P1_0
#define led2 P1_1
#define led3 P1_2
#define led4 P1_3
/*系统时钟初始化
-------------------------------------------------------*/
Tukšumsxtal_init (Tukšums)
{ MIEGS &= ~0x04; //都上电
kamēr(! (MIEGS &0x40)); //晶体振荡器开启且稳定 CLKCON &= ~0x47; Izvēlieties 32MHz kristāla oscilatoru MIEGS |=0x04;
}
/*LED初始化
-------------------------------------------------------*/
Tukšumsled_init (Tukšums)
{ P1SEL =0x00; P1 ir parastais I/O ports P1DIR |=0x0F; P1.0 P1.1 P1.2 P1.3 izeja
led1 =1; //关闭所有LED led2 =1; led3 =1; led4 =1;
}
/*T1初始化
-------------------------------------------------------*/
Tukšumstimer1_init (Tukšums)
{ EA =1; //开总中断 T1IE =1; //开T1中断 OVFIM =1; //开T1溢出中断
T1CC0L =0x24; //溢出值低8位 T1CC0H =0xF4; //溢出值高8位
T1CTL =0x0e; 128 krosovers; modulo režīms (0x0000->T1CC0); Sāciet skriet; T1IF=0; Notīriet pārtraukuma zīmi
}
/*主函数
-------------------------------------------------------*/
Tukšumsgalvenais(Tukšums)
{ xtal_init (); led_init (); timer1_init ();
kamēr(1); //等待溢出中断
}
/*T1终端服务子程序
-------------------------------------------------------*/
#pragma vektors=T1_VECTOR __interruptTukšumsT1_ISR (Tukšums)
{ EA =0; //关中断
led1 = !led1; //LED灯反转
EA =1; //开中断
T1CTL &= ~0x10; //清中断标志
}
Labi, kompilējiet programmu un atkļūdojiet tiešsaistē, LED1 uz izstrādes plates mirgo, kā plānots, un šķiet, ka mirgojošais intervāls ir aptuveni 1s. Bet ar to nepietiek, lai pierādītu eksperimenta panākumus, ja intervālu var stingri noteikt kā 1s, tas būs ideāls ~ Tāpēc es ieslēdzu WIN 7 pulksteni (noklikšķiniet uz laika uzdevumjoslas labajā pusē). Skatoties uz otro roku, viņš paskatījās uz LED1 mirgošanu no acs kaktiņa. Rezultāts: divu minūšu laikā abu temps būtībā ir tieši tāds pats (šī precizitāte ir pieļaujama~). Šajā brīdī var teikt, ka eksperiments būtībā ir pabeigts, hehe~ 3. Taimeris 2Taimeri 2 sauc arī parMAC taimeris, ir īpaši izstrādāts, lai atbalstītu notikumu izsekošanas protokolu IEEE 802.15.4 MAC. Taimeri ir 8 ciparu pārplūdes skaitītājs, ko var izmantot, lai reģistrētu notikušo ciklu skaitu; Ir 16 bitu uztveršanas reģistrs, kas ieraksta precīzu laiku, kad kadrs sāk saņemt / sūtīt vai precīzu laiku, kad pārraide ir pabeigta. Tajā ir arī 16 bitu izejas salīdzināšanas reģistrs, kas ģenerē dažādus komandu signālus (sākt pieņemt, sākt sūtīšanu utt.) uz bezvadu moduli noteiktā laikā. 4. Taimeris 3/4Taimeris 3/4 ir 8 bitu taimeris ar taimeri/skaitītāju/PWM funkciju. T3/T4 ir 2 izejas salīdzināšanas kanāli, no kuriem katru var izmantot kā PWM izeju. 5. SecinājumsŠajā sadaļā galvenokārt tiek apgūta taimeri 1 skaita pārplūdes pārtraukuma metode un precīzi kontrolēta LED gaismas mirgošanas intervāls 1s. Tikai daži citi taimeri ir tikai insults, un es atgriezīšos, lai tos pievienotu vēlāk. Nākamajā sadaļā mēs iepazīstināsim ar CC2430 seriālā porta sakariem.
|