|
1. Viršutinio ir apatinio lygių sujungimas Ankstesniame straipsnyje mes kartu sužinojome apie paprastų išorinių pertraukimų įgyvendinimą. Dabar, kai turime praktinės patirties su pertraukimais, šiame skyriuje pakalbėkime apie laikmačio pertraukimus. CC2430 iš viso turi 4 laikmačius, kuriuos galima suskirstyti į 3 kategorijas: 1 laikmatis, 2 laikmatis, 3/4 laikmatis (3 ir 4 naudojimas yra tas pats). Kadangi autorius taip pat yra naujas CC2430 ir iš esmės neturi praktinės patirties projektuose, kuriuose dalyvauja laikmačiai, aš neketinu (ir negali nieko padaryti) analizuoti laikmatis nuodugniai. Šiame straipsnyje pateikiamas tik trumpas eksperimentinis 1 laikmačio naudojimo skaičiavimo perpildymo pertraukimuose tyrimas ir neminimos jo įvesties fiksavimo/išvesties palyginimo/PWM funkcijos. Laikmatis 2 ir laikmatis 3/4 yra tik paprasti funkcijų įvadai. Kai autoriaus įgūdžiai pasieks tam tikrą karščio lygį, aš stovėsiu Zigbee praktinės patirties viršūnėje, kad patobulinčiau šį rašinį. 2. Laikmatis 11 laikmatis yra 16 bitų laikmatis su laikmačio / skaitiklio / impulso pločio moduliacija. Jame yra 3 atskirai programuojami įvesties fiksavimo / išvesties palyginimo kanalai, kurių kiekvienas gali būti naudojamas kaip PWM išvestis arba kaip krašto laikas įvesties signalui užfiksuoti (informacijos apie tai, kas yra įvesties fiksavimo / išvesties palyginimas ir kaip įdiegti PWM išvestį, skaitytojai gali peržiūrėti CC2430 kinų kalbos vadovą). Laikmačiai turi labai svarbią sąvoką:Veikimo režimas。 Darbo režimai: Laisvas darbo režimas (laisvai veikiantis), formos režimas (modulo) ir teigiamo skaičiavimo / atgalinės atskaitos režimu (aukštyn-žemyn)。 Toliau pateikiama ištrauka iš CC2430 kinų vadovo, skirto 3 režimų įvedimui:
Palyginus tris režimus, galima pastebėti, kad laisvo darbo režimo perpildymo vertė yra 0xFFFF nekintanti; Kiti du režimai leidžia tiksliai valdyti laikmačio perpildymo vertę, priskiriant vertę T1CC0. Šis eksperimentas naudoja šią funkciją, kad kas 1 sekundę suaktyvintų laikmačio pertraukimą per konkretų T1CC0, kad būtų galima tiksliai kontroliuoti LED lemputės mirksėjimo intervalą iki 1 s. (1) Įvadas į eksperimentąLaikmačio moduliniu režimu LED lemputės mirksėjimo intervalas tiksliai valdomas 1 s, būtent: ryškus 0,5 s → tamsus 0,5 s → ryškus 0,5 s → silpnas 0,5 s ...... → šviesa 0.5 s → tamsi 0.5 s (t. y. laiko intervalas nuo tamsos iki šviesos yra 1 s). Šviesos/tamsos inversija pasiekiama perpildytais pertraukimais. (2) Programos eigos schema
3) Reikšmingi skaičiavimaiKaip minėta anksčiau, LED lemputės būsena yra: ryški 0,5 s → tamsi 0,5 s → ryški 0,5 s → silpna 0,5 s ...... → 0,5 s šviesos → 0,5 s tamsos, todėl jį reikia įgyvendinti su perpildymo pertraukimais, todėl laikmačio perpildymo laikotarpis turi būti 0,5 s. Norėdami tai padaryti, reikia apskaičiuoti atitinkamą perpildymo vertę (laikinai nustatyta į N). Sistemos laikrodžio dažnis pasirinktas kaip 32 MHz, o nurodytas laikrodžio dažnis pagal numatytuosius nustatymus yra 16 MHz (abu nustatomi specialiais funkcijų registrais).CLKCONIšsamesnės informacijos ieškokite CC2430 kinų vadove). 1 laikmačiui nustatykite laikrodžio kryžminimą į 128 skyrius. Apibendrinant galima pasakyti, kad sąrašas yra toks:
Norėdami rasti N=62500, jo šešioliktainis yra 0xF424, tai yra, turite nustatyti T1CC0H=0xF4, T1CC0L=0x24 . (4) Eksperimentinis šaltinio kodas ir analizė/*
Eksperimento aprašymas: Laikmačio laikmačio 1 eksperimentas, laikmačio skaičiaus perpildymas, mirksi LED1
*/
#include
#define led1 P1_0
#define led2 P1_1
#define led3 P1_2
#define led4 P1_3
/*系统时钟初始化
-------------------------------------------------------*/
tuščiaxtal_init (tuščia)
{ MIEGAS &= ~0x04; //都上电
Nors(! (MIEGO IR0x40)); //晶体振荡器开启且稳定 CLKCON &= ~0x47; Pasirinkite 32 MHz kristalinį osciliatorių MIEGO REŽIMAS |=0x04;
}
/*LED初始化
-------------------------------------------------------*/
tuščialed_init (tuščia)
{ P1SEL =0x00; P1 yra įprastas įvesties / išvesties prievadas P1DIR |=0x0F; P1.0 P1.1 P1.2 P1.3 išėjimas
Šviesos diodas1 =1; //关闭所有LED LED2 =1; led3 =1; LED4 =1;
}
/*T1初始化
-------------------------------------------------------*/
tuščiatimer1_init(tuščia)
{ EA =1; //开总中断 T1IE =1; //开T1中断 OVFIM =1; //开T1溢出中断
T1CC0L =0x24; //溢出值低8位 T1CC0H =0xF4; //溢出值高8位
T1CTL =0x0e; 128 krosoveris; modulo režimas (0x0000->T1CC0); Pradėkite bėgti; T1IF=0; Išvalykite pertraukimo ženklą
}
/*主函数
-------------------------------------------------------*/
tuščiapagrindinis(tuščia)
{ xtal_init (); led_init (); timer1_init();
Nors(1); //等待溢出中断
}
/*T1终端服务子程序
-------------------------------------------------------*/
#pragma vektorius=T1_VECTOR __interrupttuščiaT1_ISR(tuščia)
{ EA =0; //关中断
led1 = !led1; //LED灯反转
EA =1; //开中断
T1CTL &= ~0x10; //清中断标志
}
Gerai, kompiliuokite programą ir derinkite internete, LED1 kūrimo plokštėje mirksi kaip suplanuota, ir atrodo, kad mirksėjimo intervalas yra apie 1s. Bet to nepakanka eksperimento sėkmei įrodyti, jei intervalą galima griežtai nustatyti kaip 1s, jis bus tobulas ~ Taigi įjungiau WIN 7 laikrodį (spustelėkite laiką dešinėje užduočių juostos pusėje). Žiūrėdamas į antrą rodyklę, jis pažvelgė į LED1 mirksėjimą iš akies kampučio. Rezultatas: per dvi minutes abiejų tempas iš esmės yra lygiai toks pat (šis tikslumas yra toleruotinas~). Šiuo metu galima sakyti, kad eksperimentas iš esmės baigtas, hehe~ 3. Laikmatis 22 laikmatis taip pat vadinamasMAC laikmatis, yra specialiai sukurtas palaikyti įvykių sekimo protokolą IEEE 802.15.4 MAC. Laikmatis turi 8 skaitmenų perpildymo skaitiklį, kuriuo galima įrašyti įvykusių ciklų skaičių; Yra 16 bitų fiksavimo registras, kuriame įrašomas tikslus kadro gavimo / siuntimo laikas arba tikslus perdavimo pabaigos laikas. Jame taip pat yra 16 bitų išvesties palyginimo registras, kuris tam tikru laiku generuoja įvairius komandų valdymo signalus (pradėti priimti, pradėti siųsti ir kt.) į belaidį modulį. 4. Laikmatis 3/4Laikmatis 3/4 yra 8 bitų laikmatis su laikmačio / skaitiklio / PWM funkcija. T3/T4 turi 2 išvesties palyginimo kanalus, kurių kiekvienas gali būti naudojamas kaip PWM išvestis. 5. IšvadaŠiame skyriuje daugiausia mokomasi 1 laikmačio perpildymo pertraukimo skaičiavimo metodo ir tiksliai valdomas LED šviesos mirksėjimo intervalas 1s. Tik keli kiti laikmačiai yra tik smūgis, ir aš grįšiu juos pridėti vėliau. Kitame skyriuje pristatysime CC2430 nuosekliojo prievado ryšį.
|