架构师_程序员_码农网

G Wachtwoord opvragen
Registreren

QQ登录

Slechts één stap om te beginnen

Zoeken
Weergave:5109|Reply: 0
打印 上一主题 下一主题

[ Vertaal] Zigbee reis (IV): Een paar belangrijke CC2430 basis experimenten - timer interrupt

[ Link kopiëren]
L 跳转到指定楼层
de eigenaar van het gebouw
发表于 2014-10-30 23:17:29|只看该作者回帖奖励 | Omgekeerdbladeren| Leesmodus
I. Voortborduren op het vorige artikel

  In het vorige deel hebben we samen geleerd over de implementatie van eenvoudige externe interrupts. Nadat we praktische ervaring hebben opgedaan met interrupts, gaan we het in deze sectie hebben over timer interrupts.CC2430 heeft 4 timers, die onderverdeeld kunnen worden in 3 categorieën: Timer1, Timer2, Timer3/4 (het gebruik van 3 en 4 is hetzelfde).

  Aangezien de auteur is ook net het aanraken van de CC2430, het project met timer ervaring is in principe nul, dus ik ben niet van plan om (en kan niet helpen) diepgaande analyse van de timer. Dit artikel gaat alleen over de timer 1 count overflow interrupt gebruik om een eenvoudige experimentele verkenning te doen, voor de input capture/output vergelijking/PWM-functie is weggelaten. Timer 2 en timer 3/4 worden ook slechts kort geïntroduceerd. Wachten op de auteur de macht om een bepaald niveau van vuur te bereiken, en dan staan in de hoogte van de Zigbee gevecht ervaring om dit essay te verbeteren.

Timer 1

  Timer1 is een 16-bits timer met timer/counter/pulsbreedtemodulatie functies. Hij heeft drie afzonderlijk programmeerbare kanalen voor input capture/output-vergelijking, die elk gebruikt kunnen worden als PWM-uitgang of gebruikt kunnen worden om de flanktijd van het ingangssignaal op te vangen (voor meer informatie over wat input capture/output-vergelijking is en hoe PWM-uitgangen geïmplementeerd kunnen worden, kunnen lezers zelf de Chinese handleiding van de CC2430 raadplegen).

  De timer heeft een zeer belangrijk concept: bedrijfsmodus.

  De bedrijfsmodi zijn: vrijlopen, modulo en up-down.

  Hieronder volgt de introductie van de drie modi uit de Chinese handleiding van de CC2430:



  Bij vergelijking van de drie modi kan worden gezien dat: de overloopwaarde van de vrijloopmodus 0xFFFF is, die niet kan worden veranderd; terwijl de andere twee modi nauwkeurig kunnen worden geregeld door een waarde toe te wijzen aan T1CC0 om de overloopwaarde van de timer nauwkeurig te regelen. Dit experiment maakt gebruik van deze functie om de timer elke 1s een interrupt te laten triggeren door de specifieke T1CC0, om zo het LED-knipperinterval van 1s nauwkeurig te regelen.

(1) Inleiding tot het experiment

  In de modulomodus van de timer wordt het knipperinterval van de LED nauwkeurig geregeld op 1s, d.w.z.: licht 0,5s → donker 0,5s → licht 0,5s → donker 0,5s ...... → licht 0,5s → donker 0,5s (d.w.z. het moment van overgang van donker naar licht is 1s). De omkering van licht/donker wordt gerealiseerd door een overloopinterrupt.

(2) Programma stroomdiagram

(3) Verwante berekeningen

  Zoals eerder vermeld is de toestand van de LED: licht 0,5s → donker 0,5s → licht 0,5s → donker 0,5s ...... → licht 0.5s → donker 0.5s, en moeten worden bereikt met de overflow interrupt, dus de overflowperiode van de timer moet 0.5s zijn. Hiervoor moet de bijbehorende overflowwaarde worden berekend (tijdelijk ingesteld op N).

  De systeemklokfrequentie is geselecteerd als 32MHz, en de klokfrequentie die aan de timer wordt geleverd is standaard 16MHz (beide worden geconfigureerd door het speciale functieregister CLKCON, dat te vinden is in de Chinese handleiding van de CC2430).

  Stel de klokfrequentie van timer 1 in op 128 divisies.

  Samengevat ziet de formule er als volgt uit:

2011022120560133.jpg
c

  Zoek uit N = 62500, de hexadecimale is 0xF424, dat wil zeggen, moet u T1CC0H = 0xF4, T1CC0L = 0x24 dat is .








(
4) experimentele broncode en analyse/* Beschrijving experiment: Timer1 experiment, timer count overflow, LED1 knippert */ #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; /* systeemklok initialisatie-------------------------------------------------------*/void xtal_init( void ) { SLEEP &=~0x04;&
nbsp; // beide inschakelenwhile (!
(SLEEP & 0x40 )); //kristaloscillator aan en stabiel CLKCON &=~0x47; &







nbsp; //selecteer 32MHz kristaloscillator SLEEP |=0x04; }/*LED initialisatie-------------------------------------------------------*/void led_init( void ) { &
nbsp; P1SEL = 0x00; //P1 is een normale I/O poort P1DIR |=0x0F; &

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






nbsp; //Doof alle LEDs led2 =1; led3 =1; led4 =1; }/*T1 initialisatie---------------------------



- ---------------------------*/void timer1_init( void ) {EA=1; // schakel totale interrupt in &
nbsp; T1IE=1; // zet T1 interruptOVFIM=1; // zet T1 overflow aan



i nterruptT1CC0L=0x24; //overloopwaarde laag 8 bits T1CC0H=0xF4; //overloopwaarde hoog 8 bits &

nbsp; T1CTL =0x0e; //128 delingen; modulo mode (0x0000->T1CC0); start run;T1IF=0; &




nbsp; // maak interruptvlag leeg }/* hoofdfunctie-------------------------------------------------------*/void main( void





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





nbsp; //wacht op 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; // clear interrupt flag }

  OK, compileren van het programma en online debuggen, de development board op de LED1 knippert zoals verwacht, voelt het knipperen interval van ongeveer 1s. Maar dit is niet genoeg om het succes van het experiment te bewijzen, als je rigoureus bepalen van het interval van 1s zou perfect zijn ~ dus opende ik de WIN 7 klok (klik op de rechterkant van de taakbalk tijd kan worden). Terwijl ik naar de secondewijzer keek, wierp ik vanuit mijn ooghoek een blik op de knipperende LED1. Het resultaat is: in twee minuten, het tempo van de twee zijn in principe identiek (deze nauwkeurigheid kan worden getolereerd ~). Op dit punt kan worden gezegd dat het experiment in principe is voltooid, hehe~

Derde Timer 2

  Timer2, ook bekend als de MAC-timer, is speciaal ontworpen om het event tracking protocol in IEEE 802.15.4 MAC te ondersteunen. De timer heeft een 8-bits overloopteller die gebruikt kan worden om het aantal cycli dat heeft plaatsgevonden te registreren; heeft een 16-bits capture register dat gebruikt wordt om de exacte tijd te registreren dat een frame start delimiter wordt ontvangen/verzonden of de exacte tijd dat een transmissie is voltooid; en bevat ook een 16-bits output vergelijkingsregister dat gebruikt wordt om verschillende commando-selectieve communicatiesignalen naar de draadloze module te genereren op een specifiek tijdstip (start ontvangen, start zenden, etc.).

Timer 3/4

  Timer 3/4 is een 8-bit timer met timer/counter/PWM-functies. t3/t4 heeft twee uitgangsvergelijkingskanalen die elk gebruikt kunnen worden als PWM-uitgang.

V. Conclusie

  In dit gedeelte hebben we de methode geleerd om de overflow interrupt van timer 1 te tellen, en hebben we de precieze controle bereikt van het LED-knipperinterval van 1 s. We zullen de andere timers kort bespreken en later teruggaan om ze toe te voegen. In de volgende sectie introduceren we de communicatie via de seriële poort van de CC2430.






Previous: [Re-]Zigbee Journey (III): Enkele belangrijke CC2430 basisexperimenten - Externe onderbrekingen
Next: [Re-]Zigbee Journey (V): Een paar belangrijke CC2430 basisexperimenten - Seriële communicatie
Code boer netwerk, alleen gepubliceerd in de praktijk proces, ondervonden technische problemen, niet misleiden anderen.
Je moet inloggen voordat je terug kunt posten Inloggen | Registreren

D eze versie van de integrale regels


DISCLAIMER: Alle software, programmeermaterialen of artikelen gepubliceerd door Code Farmer zijn beperkt tot gebruik voor leer- en onderzoeksdoeleinden; de bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders zijn alle gevolgen voor rekening van de gebruikers zelf. Deze site informatie van het netwerk, copyright geschil heeft niets te maken met deze site. U moet de bovenstaande inhoud binnen 24 uur na het downloaden volledig van uw computer verwijderen. Als je het programma leuk vindt, steun dan de echte software, koop de registratie en krijg betere echte service. Als er sprake is van inbreuk, neem dan per e-mail contact met ons op om dit op te lossen.

Mail To:help@itsvse.com

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

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

Snelle reactieTerug naar bovenTerug naar lijst