架构师_程序员_码农网

A Hämta lösenord
Registrera dig

QQ登录

Bara ett steg för att komma igång

Sök
架构师_程序员_码农网 "架构' 管理专区&Management Area ' Klagomål och förslag ' 回收站 ' 【转】Zigbee之旅(四):几个重要的CC2430基础实验- . - ...
Visa:5109|Svar: 0
打印 上一主题 下一主题

[Translate] Zigbee Journey (IV): Några viktiga CC2430 grundläggande experiment - timeravbrott

[Kopiera länk]
L 跳转到指定楼层
ägaren av byggnaden
发表于 2014-10-30 23:17:29|只看该作者回帖奖励|ReverseBrowse|Läsläge
I. Fortsättning från föregående artikel

  I föregående avsnitt lärde vi oss hur man implementerar enkla externa avbrott tillsammans. Efter att ha fått praktisk erfarenhet av interrupts kommer vi att diskutera timerinterrupts i detta avsnitt.CC2430 har 4 timers, som kan delas in i 3 kategorier: Timer1, Timer2, Timer3/4 (användningen av 3 och 4 är densamma).

  Eftersom författaren också bara rör vid CC2430 är projektet med timerupplevelse i princip noll, så jag tänker inte (och kan inte hjälpa) djupgående analys av timern. Denna artikel endast på timern 1 räkna överflöd avbrott användning för att göra en enkel experimentell utforskning, för dess input capture / output jämförelse / PWM-funktion utelämnas. Timer 2 och Timer 3/4 introduceras också bara kortfattat. Väntar på att författarens kraft ska nå en viss nivå av eld och sedan stå i höjden av Zigbee-stridsupplevelsen för att förbättra denna uppsats.

Timer 1

  Timer1 är en 16-bitars timer med timer/counter/pulsbreddsmoduleringsfunktioner. Den har tre individuellt programmerbara input capture/output jämförelsekanaler, som var och en kan användas som en PWM-utgång eller användas för att fånga ingångssignalens kanttid (för mer information om vad input capture/output jämförelse är och hur man implementerar PWM-utgångar, kan läsarna hänvisa till den kinesiska manualen för CC2430 på egen hand).

  Timern har ett mycket viktigt koncept: driftläge.

  Driftlägena inkluderar: fri körning, modulo och upp-ned.

  Nedan följer en introduktion av de tre lägena från den kinesiska manualen för CC2430:



  Om man jämför de tre lägena kan man se att: överflödesvärdet för läget med fri körning är 0xFFFF som inte kan ändras; medan de andra två lägena kan kontrolleras exakt genom att tilldela ett värde till T1CC0 för att exakt kontrollera timerns överflödesvärde. Detta experiment utnyttjar denna funktion för att få timern att utlösa ett avbrott var 1s genom den specifika T1CC0, för att exakt kontrollera LED-blinkningsintervallet på 1s.

(1) Introduktion till experimentet

  I timerns modulo-läge styrs LED-lampans blinkningsintervall exakt till 1s, dvs: ljus 0,5s → mörkt 0,5s → ljus 0,5s → mörkt 0,5s ...... → ljus 0,5s → mörker 0,5s (dvs. ögonblicket för övergången från mörker till ljus är 1s). Vändningen av ljus/mörker sker genom ett overflow-interrupt.

(2) Flödesschema för programmet

(3) Relaterade beräkningar

  Som tidigare nämnts är LED-lampans tillstånd: ljus 0,5s → mörk 0,5s → ljus 0,5s → mörk 0,5s ...... → ljus 0,5s → mörk 0,5s, och måste uppnås med overflow-interruptet, så timerns overflow-period måste vara 0,5s. För detta ändamål måste motsvarande overflow-värde beräknas (tillfälligt inställt på N).

  Systemklockfrekvensen är 32 MHz och klockfrekvensen för timern är 16 MHz som standard (båda konfigureras med hjälp av specialfunktionsregistret CLKCON, som finns i den kinesiska manualen för CC2430).

  För timer 1, ställ in klockfrekvensen till 128 divisioner.

  Sammanfattningsvis kan formeln se ut enligt följande:

2011022120560133.jpg
c

  Ta reda på N = 62500, dess hexadecimal är 0xF424, det vill säga du måste ställa in T1CC0H = 0xF4, T1CC0L = 0x24 det vill säga .








(
4) experimentell källkod och analys/* Experimentbeskrivning: Timer1-experiment, timerräkning överflöd, LED1 blinkar */ #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 av systemklocka-------------------------------------------------------*/void xtal_init( void ) { SLEEP &=~0x04;&
nbsp; // båda strömsättswhile (!
(SLEEP & 0x40 )); //kristalloscillatorn på och stabil CLKCON &=~0x47; &







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

nbsp; //P1.0 P1.1 P1.2 P1.3 utgångar led1 =1; &






nbsp; //Släck alla lysdioder led2 =1; led3 =1; led4 =1; }/*T1-initialisering---------------------------



- ---------------------------*/void timer1_init( void ) {EA=1; // slå på totalt avbrott &
nbsp; T1IE=1; // slå på T1-avbrottOVFIM=1; // slå på T1-överflöde



i nterruptT1CC0L=0x24; //överflödesvärde låg 8 bitar T1CC0H=0xF4; //överflödesvärde hög 8 bitar & nbsp;T1CTL=0x0x24; //överflödesvärde låg 8 bitar

nbsp; T1CTL =0x0e; //128 delningar; modulo-läge (0x0000->T1CC0); börja köra;T1IF=0 ; &




nbsp; // rensa avbrottsflaggan }/* huvudfunktion-------------------------------------------------------*/void main( void





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





nbsp; //vänta på avbrott för överströmning }/*T1 terminal service subrutin-------------------------------------------------------*/#pragma vector=T1_VECTOR__interrupt



v oid T1_ISR( void ) {EA=0; //avbryter avbrott led1 = !


led1; //LEDs omvändaEA=1; //Vid avbrott &nbsp

; T1CTL &=~0x10; // rensa avbrottsflaggan }

  OK, kompilera programmet och online-felsökning, utvecklingskortet på LED1 blinkar upp som förväntat, känner det blinkande intervallet på ca 1s. Men detta är inte tillräckligt för att bevisa experimentets framgång, om du strikt kan bestämma intervallet på 1s skulle vara perfekt ~ så jag öppnade WIN 7-klockan (klicka på höger sida av aktivitetsfältet tid kan vara). Medan jag tittade på sekundvisaren tittade jag på den blinkande LED1 ur ögonvrån. Resultatet är: på två minuter är tempot för de två i princip identiskt (denna noggrannhet kan tolereras ~). Vid denna tidpunkt kan experimentet sägas vara i princip slutfört, hehehe~

För det tredje, Timer 2

  Timer2, även känd som MAC-timern, är speciellt utformad för att stödja händelsespårningsprotokollet i IEEE 802.15.4 MAC. Timern har en 8-bitars överflödesräknare som kan användas för att registrera antalet cykler som har inträffat; har ett 16-bitars fångstregister som används för att registrera den exakta tiden då en ramstartavgränsare tas emot/sänds eller den exakta tiden då en sändning är klar; och innehåller också ett 16-bitars utgångsjämförelseregister som används för att generera olika kommandovalda kommunikationssignaler till den trådlösa modulen vid en viss tidpunkt (börja ta emot, börja sända osv.).

Timer 3/4

  Timer 3/4 är en 8-bitars timer med timer/counter/PWM-funktioner. t3/t4 har två utgångsjämförelsekanaler, som var och en kan användas som PWM-utgång.

V. Slutsats

  I detta avsnitt har vi lärt oss metoden att räkna overflow-interruptet för timer 1 och uppnått en exakt styrning av LED-blinkintervallet på 1 s. Vi kommer bara att skumma över de andra timers och sedan gå tillbaka för att lägga till dem senare. I nästa avsnitt kommer vi att presentera CC2430:s serieportskommunikation.






Föregående: [Åter-]Zigbee Journey (III): Några viktiga CC2430 grundläggande experiment - externa avbrott
Nästa: [Återändrad] Zigbee Journey (V): Några viktiga grundläggande CC2430-experiment - Seriell kommunikation
Kodbondenätverk, endast publicerat i övningsprocessen, stötte på tekniska svårigheter, inte vilseleda andra.
Du måste logga in innan du kan posta tillbaka Logga in | Registrera dig

D enna version av de integrerade reglerna


DISCLAIMER: All programvara, programmeringsmaterial eller artiklar som publiceras av Code Farmer är begränsade till att endast användas för inlärnings- och forskningsändamål; ovanstående innehåll får inte användas för kommersiella eller olagliga ändamål, annars ska alla konsekvenser bäras av användarna själva. Denna webbplatsinformation från nätverket, upphovsrättstvister har inget att göra med denna webbplats. Du måste helt ta bort ovanstående innehåll från din dator inom 24 timmar efter nedladdningen. Om du gillar programmet, vänligen stöd den äkta programvaran, köp registreringen och få bättre äkta service. Om det finns något intrång, vänligen kontakta oss via e-post för att hantera det.

E-post To:help@itsvse.com

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

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

Snabbt svarTillbaka till toppenTillbaka till listan