Denne artikkelen er en speilartikkel om maskinoversettelse, vennligst klikk her for å hoppe til originalartikkelen.

Utsikt: 7780|Svare: 0

Zigbee Journey (4): Flere viktige CC2430 grunnleggende eksperimenter – tidsavbrudd

[Kopier lenke]
Publisert på 30.10.2014 23:17:29 | | | |
1. Sammenkobling av øvre og nedre nivåer

I forrige artikkel lærte vi sammen om implementeringen av enkle eksterne avbrudd. Nå som vi har praktisk erfaring med avbrytelser, la oss snakke om timeravbrudd i denne delen. CC2430 har totalt 4 timere, som kan deles inn i 3 kategorier: timer 1, timer 2, timer 3/4 (bruken av 3 og 4 er den samme).

Siden forfatteren også er ny på CC2430 og i praksis har null praktisk erfaring med prosjekter som involverer timere, har jeg ikke til hensikt (og kan ikke gjøre noe) å analysere timeren i dybden. Denne artikkelen gir kun en kort eksperimentell utforskning av bruken av timer 1 i tell-overløpsavbrudd, og nevner ikke dens input capture/output comparison/PWM-funksjoner. Timer 2 og Timer 3/4 er bare enkle funksjonsintroduksjoner. Når forfatterens ferdigheter når et visst nivå av intensitet, vil jeg stå på høyden av Zigbees praktiske erfaring for å forbedre dette essayet.

2. Timer 1

Timer 1 er en 16-bits timer med modulasjon av timer/teller/pulsbredde. Den har 3 individuelt programmerbare inngangsfangst-/utgangssammenligningskanaler, som hver kan brukes som PWM-utgang eller som kanttid for å fange inngangssignalet (for informasjon om hva inngangsfangst/utgangssammenligning er og hvordan man implementerer PWM-utgang, kan leserne se CC2430 kinesisk manual).

Timere har et veldig viktig konsept:Driftsmåte

Driftsmoduser inkluderer: Fri driftsmodus (Frittløpende), formmodus (modulo) og positiv telling/nedtellingsmodus (opp-ned)。

Følgende er et utdrag fra CC2430 kinesisk manual for introduksjonen av de 3 modusene:



Ved å sammenligne de tre modusene kan man se at overløpsverdien til den frie driftsmodusen 0xFFFF er uforanderlig; De to andre modusene tillater presis kontroll av timerens overløpsverdi ved å tildele en verdi til T1CC0. Dette eksperimentet bruker denne funksjonen til å utløse et avbrudd hver 1 sekund av timeren gjennom en spesifikk T1CC0, for å nøyaktig kontrollere blinkeintervallet til LED-lyset til 1 sekunder.

(1) Introduksjon til eksperimentet

I modulo-modusen til timeren styres blinkeintervallet til LED-lyset nøyaktig av 1s, nemlig: lyse 0,5s → mørke 0,5s → lyse 0,5s → svake 0,5s ...... → Lys 0,5 sekunder → Mørk 0,5 sekunder (dvs. tidsintervallet fra mørkt til lyst er 1 sekunder). Lys/mørke-inversjon oppnås ved overflytende avbrudd.

(2) Programflytskjema

(3) Relevante beregninger

Som nevnt tidligere er statusen til LED-lyset: sterk 0,5 sekunder → mørk 0,5 sekunder → lys 0,5 sekunder → svak 0,5 sekunder ...... → 0,5s lys → 0,5s mørke, og det må implementeres med overflow-avbrudd, så overløpsperioden for timeren må være 0,5 s. For å gjøre dette må den tilsvarende overløpsverdien beregnes (midlertidig settes til N).

Systemklokkefrekvensen velges som 32 MHz, og klokkefrekvensen som er gitt er 16 MHz som standard (begge bestemmes av spesialfunksjonsregistre).CLKCONFor detaljer, vennligst se den kinesiske manualen CC2430).

For Timer 1, sett klokkekrysset til 128 divisjoner.

For å oppsummere er listen som følger:

For å finne N=62500 er heksadesimalen 0xF424, det vil si at du må sette T1CC0H=0xF4, T1CC0L=0x24 .

(4) Eksperimentell kildekode og analyse/*
    Eksperimentbeskrivelse: Timer Timer1-eksperiment, timer count overflow, LED1 blinker
*/

#include

#define led1 P1_0         
#define led2 P1_1         
#define led3 P1_2         
#define led4 P1_3         

/*系统时钟初始化
-------------------------------------------------------*/
Tomromxtal_init(Tomrom)
{
  SOV &= ~0x04;            //都上电
  mens(! (SØVN &0x40));     //晶体振荡器开启且稳定
  CLKCON &= ~0x47;            Velg en 32 MHz krystalloscillator
  SØVN |=0x04;
}

/*LED初始化
-------------------------------------------------------*/
Tomromled_init(Tomrom)
{
  P1SEL =0x00;            P1 er den vanlige I/O-porten
  P1DIR |=0x0F;            P1.0 P1.1 P1.2 P1.3-utgang
  
  led1 =1;                  //关闭所有LED
  led2 =1;
  led3 =1;
  led4 =1;
}

/*T1初始化
-------------------------------------------------------*/
Tomromtimer1_init(Tomrom)
{
  EA=1;            //开总中断
  T1IE=1;           //开T1中断
  OVFIM=1;         //开T1溢出中断
  
  T1CC0L=0x24;      //溢出值低8位
  T1CC0H=0xF4;      //溢出值高8位
  
  T1CTL =0x0e;     128 crossover; modulo-modus (0x0000->T1CC0); Begynn å løpe;
  T1IF=0;           Fjern avbruddsskiltet  
}

/*主函数
-------------------------------------------------------*/
Tomromhoved(Tomrom)
{
  xtal_init();
  led_init();
  timer1_init();

  mens(1);            //等待溢出中断
}

/*T1终端服务子程序
-------------------------------------------------------*/
#pragma vektor=T1_VECTOR
__interruptTomromT1_ISR(Tomrom)
{
  EA=0;               //关中断
  
  led1 = !led1;      //LED灯反转

  EA=1;               //开中断
  
  T1CTL &= ~0x10;     //清中断标志
}

OK, kompiler programmet og feilsøk online, LED1 på utviklingskortet blinker som planlagt, og det føles som om blinkeintervallet er omtrent 1 sekund. Men dette er ikke nok til å bevise suksessen til eksperimentet; hvis intervallet kan bestemmes strengt til å være 1 sekunder, vil det være perfekt~ Så jeg slo på klokken for WIN 7 (klikk på tiden på høyre side av oppgavelinjen). Mens han så på sekundviseren, så han blinkende LED1 ut av øyekroken. Resultatet: innen to minutter er tempoet på de to i praksis helt det samme (denne presisjonen er tålelig~). På dette tidspunktet kan man si at eksperimentet i praksis er fullført, hehe~

3. Timer 2

Timer 2 kalles ogsåMAC-timer, er spesielt designet for å støtte hendelsessporingsprotokollen i IEEE 802.15.4 MAC. Timeren har en 8-sifret overløpsteller som kan brukes til å registrere antall sykluser som har skjedd; Det finnes et 16-bits fangstregister som registrerer nøyaktig når en ramme begynner å motta/sende eller nøyaktig når overføringen fullføres. Den inneholder også et 16-bits utgangssammenligningsregister som genererer ulike kommando-gatingsignaler (start aksept, start sending, osv.) til den trådløse modulen på et bestemt tidspunkt.

4. Timer 3/4

Timer 3/4 er en 8-bits timer med timer/teller/PWM-funksjon. T3/T4 har 2 utgangssammenligningskanaler, som hver kan brukes som PWM-utgang.

5. Konklusjon

Denne delen lærer hovedsakelig metoden for telleoverløpsavbrytelsen av timer 1, og realiserer nøyaktig kontroll av LED-lysets blinkende intervall på 1 sekunder. Bare noen få andre timere er bare et strøk, og jeg kommer tilbake for å legge dem til senere. I neste avsnitt vil vi introdusere CC2430 serielle portkommunikasjon.






Foregående:Zigbee Journey (3): Flere viktige CC2430 grunnleggende eksperimenter – ekstern avbrudd
Neste:Zigbee Journey (5): Flere viktige CC2430 grunnleggende eksperimenter - seriell kommunikasjon
Ansvarsfraskrivelse:
All programvare, programmeringsmateriell eller artikler publisert av Code Farmer Network er kun for lærings- og forskningsformål; Innholdet ovenfor skal ikke brukes til kommersielle eller ulovlige formål, ellers skal brukerne bære alle konsekvenser. Informasjonen på dette nettstedet kommer fra Internett, og opphavsrettstvister har ingenting med dette nettstedet å gjøre. Du må fullstendig slette innholdet ovenfor fra datamaskinen din innen 24 timer etter nedlasting. Hvis du liker programmet, vennligst støtt ekte programvare, kjøp registrering, og få bedre ekte tjenester. Hvis det foreligger noen krenkelse, vennligst kontakt oss på e-post.

Mail To:help@itsvse.com