| I. Turpinot iepriekšējo rakstu Iepriekšējā nodaļā mēs uzzinājām par vienkāršu ārējo pārtraukumu kopīgu īstenošanu. Pēc tam, kad esam guvuši praktisku pieredzi ar pārtraukumiem, šajā nodaļā aplūkosim taimeru pārtraukumus. CC2430 ir 4 taimeri, kurus var iedalīt 3 kategorijās: Timer1, Timer2, Timer3/4 (3 un 4 izmantošana ir vienāda). Tā kā arī autors tikai pieskaras CC2430, pieredze projektā, kas saistīts ar taimeriem, būtībā ir nulle, tāpēc es neplānoju (un nevaru palīdzēt) padziļināti analizēt taimerus. Šis raksts attiecas tikai uz taimera 1 skaitīšanas pārplūdes pārtraukuma izmantošanu, lai veiktu vienkāršu eksperimentālu izpēti, jo tā ieejas uztveršanas/izvades salīdzināšanas/PWM funkcija ir izlaista. Arī 2. taimeris un 3/4 taimeris ir tikai īsi aprakstīti. Gaidot, kad autora jauda sasniegs noteiktu ugunsgrēka līmeni, un tad stāvēt Zigbee kaujas pieredzes augstumā, lai uzlabotu šo eseju. Taimeris 1 Taimeris1 ir 16 bitu taimeris ar taimera/skaitītāja/pulsa platuma modulācijas funkcijām. Tam ir trīs individuāli programmējami ieejas uztveršanas/izvades salīdzināšanas kanāli, no kuriem katru var izmantot kā PWM izeju vai izmantot, lai uztvertu ieejas signāla malas laiku (sīkāku informāciju par to, kas ir ieejas uztveršana/izvades salīdzināšana un kā īstenot PWM izeju, lasītāji var paši izlasīt CC2430 ķīniešu valodas rokasgrāmatā). Taimerim ir ļoti svarīgs jēdziens: darbības režīms. Darbības režīmi ir šādi: brīvais,modulo un augšupejošais-dolupejošais. Tālāk ir sniegts ieskats par šiem trim režīmiem no CC2430 ķīniešu valodas rokasgrāmatas:
Salīdzinot trīs režīmus, var redzēt, ka: brīvās darbības režīma pārplūdes vērtība ir 0xFFFF, kas nav maināma; savukārt pārējos divus režīmus var precīzi kontrolēt, piešķirot vērtību T1CC0, lai precīzi kontrolētu taimera pārplūdes vērtību. Šajā eksperimentā šī funkcija tiek izmantota, lai liktu taimerim izraisīt pārtraukumu ik pēc 1s, izmantojot īpašo T1CC0, tādējādi precīzi kontrolējot LED mirgošanas intervālu 1s. (1) Eksperimenta ievads Taimera modulo režīmā LED mirgošanas intervāls tiek precīzi kontrolēts 1s, t. i.: gaisma 0,5s → tumsa 0,5s → gaisma 0,5s → tumsa 0,5s ....... → gaisma 0,5s → tumsa 0,5s (t. i., pārejas brīdis no tumsas uz gaismu ir 1s). Gaismas/tumsas maiņu īsteno ar pārplūdes pārtraukumu. (2) Programmas plūsmas shēma (3) Saistītie aprēķini Kā minēts iepriekš, LED stāvoklis ir šāds: gaišs 0,5s → tumšs 0,5s → gaišs 0,5s → tumšs 0,5s → tumšs 0,5s ....... → gaišs 0,5s → tumšs 0,5s, un ir jāpanāk pārplūdes pārtraukums, tāpēc nepieciešams, lai taimera pārplūdes periods būtu 0,5 s. Šim nolūkam jāaprēķina atbilstošā pārplūdes vērtība (uz laiku iestatīta uz N). Sistēmas pulksteņa frekvence ir izvēlēta 32 MHz, un taimerim nodrošinātā pulksteņa frekvence pēc noklusējuma ir 16 MHz (abas šīs frekvences tiek konfigurētas ar speciālo funkciju reģistru CLKCON, kas atrodams CC2430 ķīniešu valodas rokasgrāmatā). Timerim 1 iestatiet tā takts frekvenci uz 128 dalījumiem. Rezumējot, formulu var izteikt šādi:
c
Uzziniet, ka N = 62500, tā heksadecimālā vērtība ir 0xF424, tas ir, jums ir nepieciešams iestatīt T1CC0H = 0xF4, T1CC0L = 0x24, kas ir .
(4) Eksperimenta avota kods un analīze/* Eksperimenta apraksts: Timer1 eksperiments, taimera skaitļa pārplūšana, LED1 mirgošana */ #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; /* sistēmas pulksteņa inicializācija-------------------------------------------------------*/void xtal_init( void ) { SLEEP &=~0x04;& nbsp; // abi ieslēdzaswhile (! (SLEEP & 0x40 )); //kristāliskais oscilators ieslēgts un stabils CLKCON &=~0x47; &
nbsp; //izvēlēt 32 MHz kristāla oscilatoru SLEEP |=0x04; }/*LED inicializācija-------------------------------------------------------*/void led_init( void ) { & & nbsp; P1SEL = 0x00; //P1 ir parastais I/O ports P1DIR |=0x0F; & nbsp; //P1.0 P1.1 P1.2 P1.3 izejas led1 =1; & &
nbsp; //Izslēgt visus gaismas diodes led2 =1; led3 =1; led4 =1; }/*T1 inicializācija---------------------------
- ---------------------------*/void timer1_init( void ) {EA=1; // ieslēdz kopējo pārtraukumu & nbsp; T1IE=1; // ieslēdz T1 pārtraukumuOVFIM=1; // ieslēdz T1 pārplūdi
p ārrāvumsT1CC0L=0x24; //pārplūdes vērtība zemā 8 bitu līmenī T1CC0H=0xF4; //pārplūdes vērtība augstā 8 bitu līmenī &
nbsp; T1CTL =0x0e; //128 dalījumi; modulo režīms (0x0000->T1CC0); sāk darboties;T1IF=0; &
nbsp; // izdzēst pārtraukuma karogu }/* galvenā funkcija-------------------------------------------------------*/void main( void
) { xtal_init(); led_init(); timer1_init();while ( 1); &
nbsp; //gaida pārplūdes pārtraukumu }/*T1 termināļa apkalpošanas apakšprogramma-------------------------------------------------------*/#pragma vektor=T1_VECTOR__interrupt
v oid T1_ISR( void ) {EA=0; //izslēgt pārtraukumu led1 = !
led1; //LED ieslēgts otrādiEA=1; //Uz pārtraukumu  
; T1CTL &=~0x10; // dzēš pārtraukuma karogu } Labi, kompilēt programmu un tiešsaistes atkļūdošanu, attīstības plate uz LED1 mirgo, kā paredzēts, jūtams mirgošanas intervāls apmēram 1 s. Bet tas nav pietiekami, lai pierādītu eksperimenta veiksmi, ja jūs varat stingri noteikt intervālu 1s būtu ideāls ~ tāpēc es atvērtu WIN 7 pulksteni (noklikšķiniet uz uzdevumjoslas labajā pusē laiks var būt). Kamēr vēroju sekundes rādītāju, acs kaktiņā ieskatījos mirgojošajā LED1. Rezultāts ir šāds: divu minūšu laikā to temps būtībā ir identisks (šo precizitāti var pieļaut ~). Šajā brīdī var teikt, ka eksperiments būtībā ir pabeigts, hehehe~. Treškārt, 2. taimeris Taimeris 2, kas pazīstams arī kā MAC taimeris, ir īpaši izstrādāts, lai atbalstītu notikumu izsekošanas protokolu IEEE 802.15.4 MAC. Taimerim ir 8 bitu pārpildes skaitītājs, ko var izmantot, lai reģistrētu notikušo ciklu skaitu; tam ir 16 bitu uztveršanas reģistrs, ko izmanto, lai reģistrētu precīzu kadra sākuma norobežotāja saņemšanas/pārraides laiku vai precīzu laiku, kad pārraide ir pabeigta; tajā ir arī 16 bitu izejas salīdzināšanas reģistrs, ko izmanto, lai ģenerētu dažādus komandu selektīvus sakaru signālus bezvadu modulim noteiktā laikā (sākt saņemšanu, sākt raidīšanu utt.). Taimeris 3/4 Timeris 3/4 ir 8 bitu taimeris ar taimera/skaitītāja/PWM funkcijām. t3/t4 ir divi izejas salīdzināšanas kanāli, no kuriem katru var izmantot kā PWM izeju. V. Secinājumi Šajā nodaļā mēs esam apguvuši 1. taimera pārplūdes pārtraukuma skaitīšanas metodi un panākuši precīzu LED mirgošanas intervāla kontroli 1 s. Pārējos taimerus mēs aplūkosim tikai pavirši un vēlāk atgriezīsimies, lai tos papildinātu. Nākamajā nodaļā mēs iepazīstināsim ar CC2430 sērijas porta komunikāciju. |