架构师_程序员_码农网

B Hent adgangskode
Tilmeld dig

QQ登录

Kun ét skridt for at komme i gang

Søg
架构师_程序员_码农网 "架构' 管理专区&Management Area ' Klager og forslag ' 回收站 ' 【】Zigbee之旅(四):几个重要的CC2430基础实验- . - ...
Vis:5109|Svar: 0
打印 上一主题 下一主题

[ Zigbee Journey (IV): Et par vigtige CC2430-grundeksperimenter - timer-interrupt

[Kopier link]
L 跳转到指定楼层
ejeren af bygningen
2014-10-30 23:17:29|只看该作者回帖奖励|ReverseBrowse|Læsetilstand
I. Fortsættelse fra den forrige artikel

  I det forrige afsnit lærte vi om implementeringen af simple eksterne afbrydelser sammen. Efter at have fået praktisk erfaring med interrupts vil vi i dette afsnit diskutere timer-interrupts.CC2430 har 4 timere, som kan inddeles i 3 kategorier: Timer1, Timer2, Timer3/4 (brugen af 3 og 4 er den samme).

  Da forfatteren også lige har rørt ved CC2430, er projektet, der involverer timererfaring, stort set nul, så jeg har ikke til hensigt (og kan ikke hjælpe) med en dybtgående analyse af timeren. Denne artikel handler kun om brugen af timer 1 count overflow interrupt for at lave en simpel eksperimentel udforskning, for dens input capture/output comparison/PWM-funktion er udeladt. Timer 2 og Timer 3/4 introduceres også kun kort. Venter på, at forfatterens magt når et vist niveau af ild, og derefter står i højden af Zigbee-kampoplevelsen for at forbedre dette essay.

Timer 1

  Timer1 er en 16-bit timer med timer/tæller/pulsbreddemodulationsfunktioner. Den har tre individuelt programmerbare input capture/output-sammenligningskanaler, som hver især kan bruges som PWM-output eller til at opfange fladetiden for inputsignalet (for mere information om, hvad input capture/output-sammenligning er, og hvordan man implementerer PWM-output, kan læserne selv se den kinesiske manual til CC2430).

  Timeren har et meget vigtigt koncept: driftstilstand.

  Driftstilstande omfatter: fritløbende, modulo og op-ned.

  Her følger en introduktion til de tre tilstande fra den kinesiske manual til CC2430:



  Når man sammenligner de tre tilstande, kan man se, at: Overløbsværdien i den fritløbende tilstand er 0xFFFF, som ikke kan ændres; mens de to andre tilstande kan styres præcist ved at tildele en værdi til T1CC0 for præcist at styre timerens overløbsværdi. Dette eksperiment udnytter denne funktion til at få timeren til at udløse et interrupt hvert 1. sekund gennem den specifikke T1CC0, så man præcist kan styre LED'ens blinkende interval på 1 sekund.

(1) Introduktion til eksperimentet

  I timerens modulotilstand styres LED'ens blinkinterval præcist til at være 1s, dvs.: lys 0,5s → mørk 0,5s → lys 0,5s → mørk 0,5s ...... → lys 0,5s → mørke 0,5s (dvs. tidspunktet for overgangen fra mørke til lys er 1s). Vendingen af lys/mørke sker ved hjælp af overflow-interrupt.

(2) Flowdiagram for programmet

(3) Relaterede beregninger

  Som tidligere nævnt er LED'ens tilstand: lys 0,5s → mørk 0,5s → lys 0,5s → mørk 0,5s ...... → lys 0,5s → mørk 0,5s, og skal opnås med overløbs-interruptet, så timerens overløbsperiode skal være 0,5s. Til dette formål skal den tilsvarende overløbsværdi beregnes (midlertidigt indstillet til N).

  Systemets clockfrekvens er valgt til 32 MHz, og clockfrekvensen til timeren er 16 MHz som standard (begge konfigureres af det særlige funktionsregister CLKCON, som kan findes i den kinesiske manual til CC2430).

  For timer 1 skal du indstille dens clockfrekvens til 128 divisioner.

  For at opsummere kan formlen være som følger:

2011022120560133.jpg
c

  Find ud af N = 62500, dets hexadecimale er 0xF424, det vil sige, du skal indstille T1CC0H = 0xF4, T1CC0L = 0x24, det vil sige .








(
4) eksperimentel kildekode og analyse/* Eksperimentbeskrivelse: Timer1-eksperiment, overløb af timertælling, LED1 blinker */ #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; /* initialisering af systemur-------------------------------------------------------*/void xtal_init( void ) { SLEEP &=~0x04;&
nbsp; // begge tændeswhile (!
(SLEEP & 0x40 )); //krystaloscillator tændt og stabil CLKCON &=~0x47; &







nbsp; //vælg 32MHz krystaloscillator SLEEP |=0x04; }/*LED-initialisering-------------------------------------------------------*/void led_init( void ) { &
nbsp; P1SEL = 0x00; //P1 er en normal I/O-port P1DIR |=0x0F; &

nbsp; //P1.0 P1.1 P1.2 P1.3 outputs led1 =1; &






nbsp; //Sluk alle LED' er led2 =1; led3 =1; led4 =1; }/*T1-initialisering---------------------------



- ---------------------------*/void timer1_init( void ) {EA=1; // tænd for total interrupt &
T 1IE=1; // slå T1-interrupt tilOVFIM=1; // slå T1-overløb til



i nterruptT1CC0L=0x24; //overløbsværdi lav 8 bits T1CC0H=0xF4; //overløbsværdi høj 8 bits & nbsp;T1CTL= 0x0x24; //overløbsværdi høj 8 bits

nbsp; T1CTL =0x0e ; //128 divisioner; modulotilstand (0x0000->T1CC0); start kørsel;T1IF=0 ; &




nbsp; // clear interrupt flag }/* main function-------------------------------------------------------*/void main( void





) { xtal_init(); led_init(); timer1_init();while ( 1 ); &





nbsp; //vent på overflow-interrupt }/*T1 terminal service subroutine-------------------------------------------------------*/#pragma vector=T1_VECTOR__interrupt



v oid T1_ISR( void ) {EA=0; //off interrupt led1 = !


led1; //LEDs reversedEA=1; //On interrupt &nbsp

; T1CTL &=~0x10; // ryd afbrydelsesflag }

  OK, kompilere programmet og online debugging, udviklingskortet på LED1 blinker op som forventet, føler det blinkende interval på ca. 1s. Men dette er ikke nok til at bevise eksperimentets succes, hvis du nøje kan bestemme intervallet på 1s, ville det være perfekt ~ så jeg åbnede WIN 7-uret (klik på højre side af proceslinjen tid kan være). Mens jeg kiggede på sekundviseren, kiggede jeg på den blinkende LED1 ud af øjenkrogen. Resultatet er: På to minutter er tempoet på de to stort set identisk (denne nøjagtighed kan tolereres ~). På dette tidspunkt kan eksperimentet siges at være stort set afsluttet, hehehe~.

For det tredje, timer 2

  Timer2, også kendt som MAC-timeren, er specielt designet til at understøtte event tracking-protokollen i IEEE 802.15.4 MAC. Timeren har en 8-bit overløbstæller, der kan bruges til at registrere antallet af cyklusser, der er sket; har et 16-bit opsamlingsregister, der bruges til at registrere det nøjagtige tidspunkt, hvor en frame start delimiter er modtaget/transmitteret eller det nøjagtige tidspunkt, hvor en transmission er afsluttet; og indeholder også et 16-bit output-sammenligningsregister, der bruges til at generere forskellige kommandoselektive kommunikationssignaler til det trådløse modul på et bestemt tidspunkt (start modtagelse, start transmission osv.).

Timer 3/4

  Timer 3/4 er en 8-bit timer med timer/tæller/PWM-funktioner. t3/t4 har to udgangssammenligningskanaler, som hver især kan bruges som PWM-udgang.

V. Konklusion

  I dette afsnit har vi lært metoden til at tælle overflow-interruptet for timer 1 og opnået en præcis styring af LED-blinkintervallet på 1 s. Vi vil blot skimme de andre timere og så vende tilbage for at tilføje dem senere. I næste afsnit vil vi introducere CC2430's serielle portkommunikation.






Forrige: [Ændret] Zigbee-rejse (III): Et par vigtige CC2430-grundeksperimenter - eksterne afbrydelser
Næste: [Genændret] Zigbee Journey (V): Et par vigtige CC2430-grundeksperimenter - seriel kommunikation
Code farmer network, kun offentliggjort i praksisprocessen, stødt på tekniske vanskeligheder, ikke vildlede andre.
Du skal logge ind, før du kan skrive igen Log ind | Registrer dig

D enne version af de integrerede regler


DISCLAIMER: Al software, programmeringsmateriale eller artikler udgivet af Code Farmer er begrænset til kun at blive brugt til lærings- og forskningsformål; ovenstående indhold må ikke bruges til kommercielle eller ulovlige formål, ellers skal alle konsekvenser bæres af brugerne selv. Denne webstedsinformation fra netværket, copyright-tvist har intet at gøre med dette websted. Du skal fjerne ovenstående indhold fuldstændigt fra din computer inden for 24 timer efter download. Hvis du kan lide programmet, bedes du støtte den ægte software, købe registreringen og få bedre ægte service. Hvis der sker en krænkelse, bedes du kontakte os via e-mail for at håndtere det.

Mail To:help@itsvse.com

QQ | ( 鲁ICP备14021824号-2)|Sitemap

GMT+8, 2024-9-17 14:50

Hurtigt svarTilbage til toppenTilbage til listen