Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 7368|Atsakyti: 0

Zigbee kelionė (3): Keletas svarbių CC2430 pagrindinių eksperimentų - išorinis pertraukimas

[Kopijuoti nuorodą]
Paskelbta 2014-10-30 23:16:46 | | | |
1. Viršutinio ir apatinio lygių sujungimas

Ankstesnėje paskaitoje susipažinome su pagrindiniu IAR CC2430 programos kūrimo procesu atlikdami paprastą LED mirksėjimo eksperimentą. Peilis vis tiek buvo pagaląstas (nors mano akmuo nėra geras), o dabar aš pradėsiu skersti vabzdžius :). Toliau sužinokime keletą pagrindinių CC2430 eksperimentų. Kiekvienas nedidelis eksperimentas yra padalintas į tris dalis: "Eksperimento įvadas", "Programos eigos schema" ir "Eksperimentinis šaltinio kodas ir analizė".

Šiame straipsnyje paaiškinami išoriniai pertraukimai.

2. Išorinis pertraukimas(1) Įvadas į eksperimentą

Pertraukimai yra vidinis mikrovaldiklių mechanizmas, skirtas apdoroti vidinius ar išorinius įvykius realiuoju laiku. Įvykus vidiniam ar išoriniam įvykiui, mikrovaldiklio pertraukimo sistema privers procesorių pristabdyti vykdančią programą ir apdoroti pertraukimo įvykį.

Pertraukimai skirstomi į išorinius ir vidinius, o CC2430 iš viso yra 18 pertraukimo šaltinių (konkrečius pertraukimo aprašymus ir pertraukimo vektorių apibrėžimus rasite "CC2430 kinų kalbos vadovas》)。

Dabar pažvelkime į šios kūrimo plokštės schemą:

Mygtukas S1 buvo prijungtas prie P0.1 kūrimo plokštėje, o šio eksperimento poveikis yra suaktyvinti P0.1 pertraukimą mygtuku S1, o tada valdyti LED1 įjungimą / išjungimą pertraukimo paslaugos paprogramėje.

(2) Eksperimentinis principas ir struktūrinė schema

Eksperimentinė schema yra tokia:


(3) Eksperimentinis šaltinio kodas//头文件
#include

//延时子函数
#defineLED1 P1_0
#defineLED2 P1_1
#defineLED3 P1_2
#defineLED4 P1_3

tuščiaVėlavimas(nepasirašytasn)   
{
  nepasirašytastt;
  dėl(tt =0; tt<n; tt++);
  dėl(tt =0; tt<n; tt++);
  dėl(tt =0; tt<n; tt++);
  dėl(tt =0; tt<n; tt++);
  dėl(tt =0; tt<n; tt++);
}

//32M晶振初始化
tuščiaxtal_init (tuščia)
{
  MIEGAS &= ~0x04;            //都上电
  Nors(! (MIEGO IR0x40));     //晶体振荡器开启且稳定
  CLKCON &= ~0x47;           //Pasirinkite 32 MHz kristalinį osciliatorių
  MIEGO REŽIMAS |=0x04;
}

//LED灯初始化
tuščialed_init (tuščia)
{
  P1SEL =0x00;         P1 yra įprastas įvesties / išvesties prievadas
  P1DIR |=0x0F;         P1.0 P1.1 P1.2 P1.3 išėjimas
  
  LED1 = 0;
  LED2 = 0;
  LED3 = 0;
  LED4 = 0;
}

//io及外部中断初始化
tuščiaio_init(tuščia)
{
    P0INP &= ~0X02;   //P0.1有上拉、下拉

    EA =1;           //总中断使能
   
    P0IE =1;   //P0中断使能
   
    PICTL |=  0X09;   //P0.1口中断使能,下降沿触发
   
    P0IFG &= ~0x02;   //P0.1中断标志清0
};

//主函数
tuščiapagrindinis(tuščia)   
{
  xtal_init ();
  led_init ();  
  io_init ();

  Nors(1);   //等待中断
}

//中断服务子程序
#pragma vektorius = P0INT_VECTOR
__interrupt tuščiaP0_ISR(tuščia)
{
  EA =0;                        Vartai nutraukiami  

  Vėlavimas(10000);  
  Vėlavimas(10000);
  Vėlavimas(10000);
  Vėlavimas(10000);
  Vėlavimas(10000);

  jei((P0IFG &0x02) >0)         //按键中断
  {
    P0IFG &= ~0x02;               //P0.1中断标志清0
    led1 = !led1;
  }
  P0IF =0;                       //P0中断标志清0

  EA =1;                        //开中断
}

Pirmiausia inicijuokite sistemos laikrodį: pasirinkite 32 MHz kristalinį osciliatorių.

Tada inicijuokite šviesos diodus: nustatykite P1 kaip bendrą įvesties / išvesties prievadą, nustatykite P1.0 ~ P1.3 kryptį kaip išvestį ir išjunkite 4 LED lemputes.

Tada sukonfigūruokite atitinkamus SFR registrus išoriniams pertraukimams, kad įgalintumėte pertraukimus visais lygiais, įskaitant 3 SFR:EAIEN1PICTL(Išsamesnė informacija apie kiekvieną SFR pateikiamaCC2430 kinų kalbos vadovas》):

EA- Visiško pertraukimo įjungimas;

    IEN1.5- P0 pertraukimo įjungimas;

    PICTL.3—— P0.1 prievado pertraukimo įjungimas;

    PICTL.0—— Nustatykite P0.1 prievado įvesties nuleidžiamąjį kraštą, kad suveiktų pertraukimas.

Tada naudokite while (1) pagrindinėje funkcijoje ir palaukite pertraukos.

CC2430 patarimai
(1) Bitų priskyrimo sintaksės santrauka
Daug kartų turime priskirti bitą (0 arba 1) vienam SFR baitui, kad galėtume tiksliai valdyti aparatūros įrenginį.
Yra SFRPalaikykite bitų adresavimąPavyzdžiui, TCON, P0 ir kt., Šiuo metu kontrapunktų priskyrimas yra labai paprastas, tiesiog užklauskite bitų apibrėžimo ioCC2430.h antraštės failo SFR bitų prieigos skyriuje:
P0_0 = 0; // priskirti 0 pirmajam P0 skaitmeniui
P0_0 = 1; // pirmajam P0 skaitmeniui priskirkite reikšmę 1  

Tačiau kai kurių SFR nėraBitų adresavimas nepalaikomas, kaip ir šiame eksperimentePICTL, šiuo metu norite priskirti reikšmę vienam iš jų, sintaksė yra tokia:
PICTL &= ~0x01;   Pirmajam skaitmeniui priskirkite reikšmę 0
PICTL |= 0x01;     Pirmajam skaitmeniui priskirkite 1 reikšmę

Galite prisiminti&= ~|=Šios dvi dažniausiai naudojamos bitų priskyrimo sintaksės.
(2) Pertraukimo įgalinimo santrauka
Kai programoje yra pertraukimas, jis turi būti įjungtas prieš suaktyvinant pertraukimą.
C51 pertraukimo įjungimo sistemos hierarchija yra labai akivaizdi:
Pertraukti bosas: EAyra viršininkas, atsakingasBendraPertraukti įgalinti:
EA = 1;

  Kiekvienas pertrauktas būrio vadas: Kitas skirtas kiekvienamFunkcinės dalys(pvz., P0, 1 laikmatis ir kt.), tokie SFR paprastai yra adresuojami bitais, o pavadinime paprastai yra IE (Interrupt Enable):
P0IE = 1;

  Kiekvienas komandos narys buvo nutrauktas: Būrys Bet kadangi kiekvienoje funkcijoje taip pat yra keli pertraukimai, paskutinis lygis skirtas šiamKiekvienas pertraukimasŠio tipo SFR paprastai yra be bitų ir neadresuojamas, o pavadinime paprastai yra IE (Interrupt Enable) arba IM (Interrupt Mask):
PICTL |=0x01;

Nereikia rote pertraukti SFR, tiesiog suprasti jo hierarchiją ir tada imtis laiko ieškoti vadovo arba antraštės failą.
(3) Nutraukti programų rašymą
Pertraukimų naudojimas programoje paprastai susideda iš dviejų dalių: pertraukimo paslaugos poprogramės rašymo ir pertraukimo įjungimo atidarymo. Pertraukimo funkcija buvo pristatyta aukščiau, o toliau pateikiamas trumpas įvadas į pertraukimo paslaugos poprogramės rašymą:
Pirmiausia nurodykitePertraukos vektorius, kurio užklausą galima pateikti ioCC2430.h antraštės failo skyriuje Pertraukimo vektoriai, naudojant tokią sintaksę:
#pragma vektorius = pertraukimo vektorius

Tada iškart po to parašykite pertraukimo apdorojimo programą, kurios struktūra yra tokia:
__interrupt anuliuoti funkcijos pavadinimą (void)
  {
    //开中断
    //中断处理
    //中断标志清0
    //关中断
  }



3. Išvada

Šiame straipsnyje pristatomas paprastų išorinių pertraukimų, pagrįstų CC2430, įgyvendinimo metodas, o po pertraukų pagrindo pristatysime dar vieną labai svarbų modulį - laikmačius. CC2430 iš viso turi 4 laikmačius, kuriuos galima suskirstyti į tris kategorijas: 1 laikmatis, 2 laikmatis, 3/4 laikmatis (3 ir 4 iš esmės yra tas pats naudojimas).


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




Ankstesnis:Zigbee Journey (2): Pirmoji CC2430 programa - LED lemputės mirksėjimo eksperimentas
Kitą:Zigbee kelionė (4): keli svarbūs CC2430 pagrindiniai eksperimentai - laikmačio pertraukimas
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com