| I. Jätkates eelmisest artiklist Eelmises osas õppisime koos lihtsate väliste katkestuste rakendamist. Pärast praktiliste kogemuste omandamist katkestustega, käsitleme selles osas taimerite katkestusi. CC2430-l on 4 taimerit, mida võib jagada 3 kategooriasse: Taimer1, Taimer2, Taimer3/4 (3 ja 4 kasutamine on sama). Kuna autor on ka lihtsalt puutub CC2430, projekti, mis hõlmab taimer kogemus on põhimõtteliselt null, nii et ma ei kavatse (ja ei saa aidata) põhjalik analüüs taimer. See artikkel ainult taimer 1 loenduri ülevoolu katkestuse kasutamise kohta, et teha lihtsat eksperimentaalset uurimist, selle sisendi hõivamise / väljundi võrdlemise / PWM-funktsiooni jaoks on välja jäetud. Taimer 2 ja taimer 3/4 on samuti tutvustatud ainult lühidalt. Oodates, et autori võimsus jõuab teatud tasemele tule ja seejärel seisab Zigbee võitluse kogemuse kõrgusel, et parandada seda esseed. Taimer 1 Taimer1 on 16-bitine taimer, millel on taimeri/loenduri/impulsside laiuse modulatsiooni funktsioonid. Sellel on kolm individuaalselt programmeeritavat sisendi hõivamise / väljundi võrdluskanalit, millest igaüht saab kasutada PWM-väljundina või kasutada sisendsignaali serva aja hõivamiseks (lisateavet selle kohta, mis on sisendi hõivamine / väljundi võrdlus ja kuidas PWM-väljundeid rakendada, võivad lugejad ise vaadata CC2430 hiina kasutusjuhendit). Taimeril on väga oluline mõiste: töörežiim. Töörežiimid on järgmised: vabakäik, modulo ja üles-alla. Järgnevalt tutvustatakse neid kolme režiimi CC2430 hiina kasutusjuhendist:
Võrreldes kolme režiimi, on näha, et: vabalt jooksva režiimi ülevoolu väärtus on 0xFFFF, mis ei ole muudetav; samas kui ülejäänud kahte režiimi saab täpselt kontrollida, määrates väärtuse T1CC0-le, et täpselt kontrollida taimeri ülevoolu väärtust. Käesolevas katses kasutatakse seda funktsiooni, et panna taimer käivitama katkestust iga 1s järel konkreetse T1CC0 kaudu, et täpselt kontrollida LED-i vilkumise intervalli 1s. (1) Sissejuhatus eksperimenti Taimeri modulo režiimis on LED-i vilkumisintervall täpselt kontrollitud 1s, st: valgus 0,5s → tume 0,5s → valgus 0,5s → tume 0,5s ....... → valgus 0,5s → tume 0,5s (st ülemineku hetk pimedalt valgusele on 1s). Valgus/tumedate vahetamine toimub ülevoolukatkestuse abil. (2) Programmi vooskeem (3) Seotud arvutused Nagu eelnevalt mainitud, on LED-i olek: heledad 0,5s → tumedad 0,5s → heledad 0,5s → tumedad 0,5s ...... → hele 0,5s → tume 0,5s, ja tuleb saavutada ülevoolu katkestusega, seega on vaja, et taimeri ülevooluperiood oleks 0,5s. Selleks tuleb arvutada vastav ülevoolu väärtus (ajutiselt määrata N). Süsteemi taktsageduseks on valitud 32MHz ja taimerile antud taktsagedus on vaikimisi 16MHz (mõlemad on konfigureeritud spetsiaalse funktsiooniregistri CLKCON abil, mis on leitav CC2430 hiina kasutusjuhendist). Taimeri 1 jaoks seadke selle taktsageduseks 128 jaotust. Kokkuvõttes võib valem olla järgmine:
c
Leia välja N = 62500, selle heksadekaalarv on 0xF424, st pead seadistama T1CC0H = 0xF4, T1CC0L = 0x24 st .
(4) eksperimentaalne lähtekood ja analüüs/* Eksperimendi kirjeldus: Timer1 eksperiment, taimeri loenduri ülevool, LED1 vilkumine */ #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; /* süsteemi kella initsialiseerimine-------------------------------------------------------*/void xtal_init( void ) { SLEEP &=~0x04;& nbsp; // mõlemad toiteallikadwhile (! (SLEEP & 0x40 )); //kristallostsillaator on sisse lülitatud ja stabiilne CLKCON &=~0x47; &
nbsp; // valitakse 32MHz kristallostsillaator SLEEP |=0x04; }/*LED-i initsialiseerimine-------------------------------------------------------*/void led_init( void ) { & nbsp; P1SEL = 0x00; //P1 on tavaline I/O port P1DIR |=0x0F; & nbsp; //P1.0 P1.1 P1.2 P1.3 väljundid led1 =1; &
nbsp; //Väljalülitatakse kõik LEDid led2 =1; led3 =1; led4 =1; }/*T1 initsialiseerimine---------------------------
- ---------------------------*/void timer1_init( void ) {EA=1; // kogu katkestuse sisselülitamine & nbsp; T1IE=1; // T1 katkestuse sisselülitamineOVFIM=1; // T1 ülevoolu sisselülitamine
k atkestusT1CC0L=0x24; // ülevoolu väärtus madal 8 bitti T1CC0H=0xF4; // ülevoolu väärtus kõrge 8 bitti &
nbsp; T1CTL =0x0e; //128 jaotust; modulo režiim (0x0000->T1CC0); käivitamine;T1IF=0; &
nbsp; // tühjenda katkestuslipp }/* põhifunktsioon-------------------------------------------------------*/void main( void
) { xtal_init(); led_init(); timer1_init();while ( 1 ); &
nbsp; // oota ülevoolu katkestust }/*T1 terminali teenindamise allprogramm-------------------------------------------------------*/#pragma vector=T1_VECTOR__interrupt
v oid T1_ISR( void ) {EA=0; //väljalülitus led1 = !
led1; //Ledid ümberpööratudEA=1; //Katkestusel  
; T1CTL &=~0x10; // tühjenda katkestuse lipp } OK, kompileerida programmi ja online silumine, arendusplaat LED1 vilgub ootuspäraselt, tunnen vilkuv intervall umbes 1s. Aga see ei ole piisav, et tõestada eksperimendi õnnestumist, kui saate rangelt määrata intervalli 1s oleks täiuslik ~ nii et ma avasin WIN 7 kell (klõpsake paremal pool tegumiriba aeg võib olla). Vaadates sekundit, heitsin silmanurgast pilgu vilkuvale LED1-le. Tulemus: kahe minuti jooksul on tempo põhimõtteliselt identne (seda täpsust võib taluda ~). Siinkohal võib öelda, et eksperiment on põhimõtteliselt lõpetatud, hehehe~ Kolmandaks, taimer 2 Taimer2, mida nimetatakse ka MAC-taimeriks, on spetsiaalselt loodud IEEE 802.15.4 MAC-i sündmuste jälgimise protokolli toetamiseks. Taimeril on 8-bitine ülevoolu loendur, mida saab kasutada toimunud tsüklite arvu registreerimiseks; tal on 16-bitine kaameraregister, mida kasutatakse täpse aja registreerimiseks, mil kaadri alguse piiraja on vastu võetud / edastatud või täpne aeg, mil ülekanne on lõpetatud; ja sisaldab ka 16-bitist väljundvõrdlusregistrit, mida kasutatakse erinevate käsu valikuliste sidesignaalide genereerimiseks traadita moodulile teatud ajal (vastuvõtu alustamine, saatmise alustamine jne). Taimer 3/4 Taimer 3/4 on 8-bitine taimer, millel on taimer/loenduri/PWM-funktsioonid. t3/t4-l on kaks väljundvõrdluskanalit, millest mõlemat saab kasutada PWM-väljundina. V. Kokkuvõte Selles jaotises oleme õppinud taimeri 1 ülevoolukatkestuse loendamise meetodit ja saavutanud LED-i vilkumisintervalli täpse kontrolli 1 s. Teised taimerid vaatame lihtsalt üle ja läheme hiljem tagasi nende lisamiseks. Järgmises jaotises tutvustame CC2430 jadapordi kommunikatsiooni kohta. |