Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 7780|Atsakyti: 0

Zigbee kelionė (4): keli svarbūs CC2430 pagrindiniai eksperimentai - laikmačio pertraukimas

[Kopijuoti nuorodą]
Paskelbta 2014-10-30 23:17:29 | | | |
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 1

1 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čiavimai

Kaip 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 2

2 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/4

Laikmatis 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šį.






Ankstesnis:Zigbee kelionė (3): Keletas svarbių CC2430 pagrindinių eksperimentų - išorinis pertraukimas
Kitą:Zigbee kelionė (5): keli svarbūs CC2430 pagrindiniai eksperimentai - serijinis ryšys
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com