架构师_程序员_码农网

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:4624|Svar: 0
打印 上一主题 下一主题

[转]Zigbee之旅(三):几个重要的CC2430基础实验--External Interrupt

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

  I den föregående föreläsningen bekantade vi oss med den grundläggande processen för att utveckla CC2430-program i IAR genom ett litet experiment med den enklaste blinkande LED-lampan. Kniven har åtminstone slipats (även om jag inte är särskilt bra på den här slipstenen), och nu är det dags att börja slakta buggar :). Låt oss sedan lära oss några grundläggande CC2430-experiment. Varje litet experiment, indelat i "experimentell introduktion", "programflödesschema", "experimentell källkod och analys" tre delar av beskrivningen.

  Den här artikeln förklarar det externa avbrottet.

För det andra, det externa avbrottet(1) Introduktion till experimentet

  Avbrott är en mikrokontroller i realtid för att hantera interna eller externa händelser, en intern mekanism. När någon form av intern eller extern händelse inträffar kommer mikrokontrolleravbrottssystemet att tvinga CPU: n att pausa programmet som körs, men för att gå till avbrottshändelsebehandlingen är avbrottsbehandlingen klar och återgår sedan till att avbrytas av programmet, fortsätt att köra.

  Avbrott är indelade i externa avbrott och interna avbrott, CC2430 innehåller totalt 18 avbrottskällor (specifik avbrottsbeskrivning och avbrottsvektordefinition, du kan hänvisa till " CC2430 Chinese Manual ").

  Låt oss nu ta en titt på kretsschemat för detta utvecklingskort:

  Utvecklingskortet har anslutits till S1-knappen och P0.1, den effekt som detta experiment vill uppnå är att utlösa avbrottet av P0.1 genom att trycka på knappen S1 och sedan styra LED1-lampan / ut i avbrottsservicens subrutin.

(2) Experimentell princip och flödesschema

  Flödesschemat för experimentet är som följer:

2011021811430713.png
c













(
3) Experimentell källkod// header file#include // delay subfunction#define led1 P1_0#define led2 P1_1 #define led3 P1_2#define led4 P1_3void Delay( unsigned n) { & &



nbsp; unsigned tt;for (tt = 0;tt<n;tt++);for (tt = 0;tt<n;tt++);for (tt = 0;tt<n;tt++); &






nbsp; for (tt = 0;tt<n;tt++);for (tt = 0;tt<n;tt++); }//32M kristallinitialiseringvoid xtal_init( void ) { SLEEP &=~0x04; &
nbsp; //all ström uppwhile (!
(SLEEP & 0x40 )); //kristalloscillatorn på och stabil CLKCON &=~0x47; &






nbsp; //Välj 32MHz kristalloscillator SLEEP |=0x04; }//LED-initialiseringvoid led_init( void ) { P1SEL =0x00; &nbsp


; //P1 är en normal I/O-port P1DIR |=0x0F; //P1.0 P1.1 P1.2 P1.3 Utg ång








led1 = 0; led2 = 0; led3 = 0; led4 = 0; }//initialisering av I/O och externa avbrottvoid io_init( void ) { P0INP &=~0X02;



/ /P0.1 har pull-up och pull-down EA =1; //Total avbrottsaktivering P0IE =1; &



nbsp; //P0 interrupt enable PICTL |=0X09; //P0.1 port interrupt enable, falling edge trigger P0IFG &=~0x02







; //P0.1 interrupt flag clear 0 };//main functionvoid main( void ) { xtal_init(); led_init();








io_init();while ( 1 ); //vänta på avbrott }//underrutin för avbrottsservice#pragma vector = P0INT_VECTOR__interrupt void P0_ISR( void ) { EA =0;

/ / stäng av avbrottet Delay





( 10000 ); Fördröjning(10000 ); Fördröjning(10000 ); Fördröjning(10000); Fördröjning(10000 ); &

nbsp; if ((P0IFG & 0x02 ) >0 ) //nyckelavbrott { P0IFG &=~0x02; &


nbsp; //P0.1 interrupt flag clear 0 led1 = !led1; } P0IF =0; & nbsp; //P0 .1 interrupt flag clear 0 led1 = !led1; } P0IF = 0; & nbsp

nbsp; //P0 avbrottsflagga klar 0 EA =1; &
nbsp; // slå på avbrottet }

  Initialisera först enhetsklockan: välj en 32 MHz kristalloscillator.

  Initialisera sedan lysdioderna: ställ in P1 som I/O-port för allmänt ändamål, ställ in P1.0 ~ P1.3-riktning som utgång och stäng sedan av de 4 lysdioderna.

  Konfigurera sedan de relevanta SFR-registren för externa avbrott och slå på avbrottsaktiveringen på alla nivåer, vilket involverar 3 SFR: EA, IEN1, PICTL (för detaljerad beskrivning av varje SFR, se " CC2430 Chinese Manual "):

     EA -- total avbrottsaktivering;

     IEN1.5 -- aktivering av P0-avbrott;

     PICTL.3 -- aktivering av P0.1-portavbrott;

     PICTL.0 -- Ställ in P0.1-portingångens fallande flank för att orsaka avbrottsutlösning.

  Använd sedan while(1) i huvudfunktionen för att vänta på avbrottet.

CC2430 Tips
(1) Bittilldelning Syntax Sammanfattning
Mycket ofta behöver vi tilldela ett värde (0 eller 1) till en bit i en SFR med en byte för att exakt styra en maskinvaruenhet.
  

V
issa SFR stöder bitadressering, till exempel TCON, P0, etc., för närvarande är tilldelningen av biten mycket enkel, bara fråga ioCC2430.h-huvudfilen i SFR Bit Access-delen av bitdefinitionen kan vara:
P0_0 = 0; // P0 den första biten av tilldelningen av värdet 0
P0_0 = 1; / / / P0 den första biten av tilldelningen av värdet 1
Det finns
dock SFR som inte
stöder bitadressering, som
i
fallet med
den
första
biten
av tilldelningen av värdet på den första
biten
av den första
biten
av den första
biten
av den första
biten
av den första
biten
av den första
biten
av den första
biten
av den
andra
biten.

Vissa SFR:
er stöder
dock
inte bitadressering, t.ex. PICTL i detta experiment, och när du vill tilldela ett värde till en av dem är syntaxen följande:
PICTL &= ~0x01; //tilldela värdet 0 till den första biten
PICTL |= 0x01; //tilldela värdet 1 till den
första
biten
Du kan komma ihåg att &
amp;= ~
,
|= ~, |= ~, |= ~
,
|=
P0_0 = 1; //tilldela värdet 1 till den första biten i P0
. amp;= ~, |= dessa två vanliga syntaxer för bittilldelning.
(2) Interrupt Enablement Sammanfattning
När ett avbrott är inblandat i ett program måste det aktiveras innan avbrottet utlöses.
  

C
51 avbrottsaktiveringssystem, dess hierarkiska struktur är mycket uppenbar:
avbrottschef: EA är chefen, ansvarig för den totala avbrottsaktiveringen:
EA = 1;
avbrottskapten: nästa är för varje funktionell komponent (t.ex. P0, timer 1, etc.) aktivera kontroll, sådan SFR i allmänhet bitadresserbar, namngivning innehåller vanligtvis IE (avbrottsaktivering)
:
P0IE = 1;
avbrottsteammedlemmarna
: avbrott, men på grund av avbrottet
i programmet
måste
avbrottet
aktiveras innan avbrottet utlöses.

v
arje avbrottslagmedlemmar: lag men eftersom varje funktionell komponent också innehåller flera avbrott, så är den sista nivån för varje av brottsaktiveringskontroll, sådan SFR är i allmänhet inte bitadresserbar, heter i allmänhet IE (Interrupt Enable) eller IM (Interrupt Mask):
PICTL | = 0x01;
behöver
inte memorera avbrotts SFR: erna Det finns inget behov av att memorera avbrotts SFR: erna, så länge du förstår hierarkin och sedan konsulterar manualen eller huvudfilerna när du använder dem.
(3) Skriva avbrottsprogram
Användningen av avbrott i ett program består i allmänhet av två delar: skrivandet av underrutinen för avbrottsservice och öppnandet av avbrottsaktiveringen.

A
vbrottsaktivering har introducerats ovan, följande är en kort introduktion till förberedelsen av avbrottsserviceunderrutin:
Först och främst, ange avbrottsvektorn, kan finnas i ioCC2430.h-headerfilen i Interrupt Vectors-delen av frågan, syntaxen är
som
följer:
# pragma vector = Interrupt Vectors
och sedan följt av förberedelsen av avbrottshanteraren, strukturen är
som
följer:
___
interrupt void Function Name (___)


i
nterrupt void function name(void)
{
//on interrupt
//interrupt handling
//interrupt flag clear 0
//off
interrupt
}

III. slutsats

  Denna artikel introducerar en enkel implementeringsmetod för externa avbrott baserat på CC2430, med utgångspunkt från avbrottet, sedan introducerar vi en annan mycket viktig modul - timer. CC2430 har totalt fyra timers, som kan delas in i tre kategorier: timer 1, timer 2, timer 3/4 (3 och 4 av användningen av samma grundläggande). samma).


</n;tt++).
</n;tt++);.
</n;tt++).
</n;tt++); </n;tt++); </n;tt++); </n;tt++); </n;tt++).
</n;tt++).




Föregående: [Re-]Zigbee Journey (II): det första CC2430-programmet - experiment med blinkande LED-lampor
Nästa: [Re-]Zigbee Journey (4): Några viktiga grundläggande CC2430-experiment - timeravbrott
Koden farmer nätverk, endast publicerad i praktiken, stött 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:49

Snabbt svarTillbaka till toppenTillbaka till listan