Ta članek je zrcalni članek strojnega prevajanja, kliknite tukaj za skok na izvirni članek.

Pogled: 7368|Odgovoriti: 0

Zigbee Journey (3): Več pomembnih osnovnih eksperimentov CC2430 - zunanja motnja

[Kopiraj povezavo]
Objavljeno na 30. 10. 2014 23:16:46 | | | |
1. Povezava zgornje in spodnje ravni

Na prejšnjem predavanju smo se seznanili z osnovnim postopkom IAR razvoja programa CC2430 preko preprostega eksperimenta z LED utripanjem. Nož je bil tako ali tako naostren (čeprav moj brusni kamen ni dober), zdaj pa bom začel klanjati žuželke :). Nato se naučimo nekaj osnovnih eksperimentov CC2430. Vsak majhen eksperiment je razdeljen na tri dele: "Uvod v eksperiment", "Diagram poteka programa" in "Eksperimentalna izvorna koda in analiza".

Ta članek pojasnjuje zunanje motnje.

2. Zunanja prekinitev(1) Uvod v eksperiment

Prekinitve so notranji mehanizem, s katerim mikrokrmilniki v realnem času obdelujejo notranje ali zunanje dogodke. Ko pride do notranjega ali zunanjega dogodka, sistem prekinitev mikrokrmilnika prisili procesor, da začasno ustavi izvajanje programa in namesto tega obdela dogodek prekinitve.

Prekinitve so razdeljene na zunanje in notranje prekinitve, CC2430 pa vsebuje skupno 18 virov prekinitev (za specifične opise in definicije vektorjev prekinitev glejte "CC2430 Kitajski priročnik》)。

Zdaj si poglejmo shemo vezja te razvojne plošče:

Gumb S1 je bil povezan s P0.1 na razvojni plošči, učinek tega eksperimenta pa je sprožil prekinitev P0.1 preko gumba S1 in nato nadzoroval vklop/izklop LED1 v podprogramu storitve prekinitev.

(2) Eksperimentalni princip in diagram poteka

Eksperimentalni diagram poteka je naslednji:


(3) Eksperimentalna izvorna koda//头文件
#include

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

prazninaZakasnitev(nepodpisanon)   
{
  nepodpisanott;
  za(tt =0; tt<n; tt++);
  za(tt =0; tt<n; tt++);
  za(tt =0; tt<n; tt++);
  za(tt =0; tt<n; tt++);
  za(tt =0; tt<n; tt++);
}

//32M晶振初始化
prazninaxtal_init(praznina)
{
  SPANJE &= ~0x04;            //都上电
  medtem ko(! (SPANJE &0x40));     //晶体振荡器开启且稳定
  CLKCON &= ~0x47;           //Izberite 32MHz kristalni oscilator
  SPANJE |=0x04;
}

//LED灯初始化
prazninaled_init(praznina)
{
  P1SEL =0x00;         P1 je običajen vhodno-izhodni priključek
  P1DIR |=0x0F;         izhod P1.0 P1.1 P1.2 P1.3
  
  led1 = 0;
  led2 = 0;
  led3 = 0;
  led4 = 0;
}

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

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

//主函数
prazninamain(praznina)   
{
  xtal_init();
  led_init();  
  io_init();

  medtem ko(1);   //等待中断
}

//中断服务子程序
#pragma vektor = P0INT_VECTOR
__interrupt prazninaP0_ISR(praznina)
{
  EA =0;                        Vrata so prekinjena  

  Zakasnitev(10000);  
  Zakasnitev(10000);
  Zakasnitev(10000);
  Zakasnitev(10000);
  Zakasnitev(10000);

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

  EA =1;                        //开中断
}

Najprej inicializirajte sistemski takt: izberite 32MHz kristalni oscilator.

Nato inicializiraj LED: nastavi P1 kot splošni I/O priključek, nastavi smer P1.0 ~ P1.3 kot izhod in nato ugasni 4 LED lučke.

Nato konfigurirajte ustrezne SFR registre za zunanje prekinitve, da omogočite prekinitve na vseh ravneh, vključno s 3 SFR-ji:EAIEN1PICTL(Za podrobnosti o vsakem SFR glejteCC2430 Kitajski priročnik》):

EA- Popolno omogočanje prekinitve;

    IEN1.5- P0 omogoča prekinitev;

    SLIKA.3—— P0.1 omogoča prekinitev vrat;

    SLIKA 0—— Nastavi vhodni rob P0.1 priključka za sprožitev prekinitve.

Nato uporabite while(1) v glavni funkciji in počakajte na prekinitev.

Nasveti za CC2430
(1) Povzetek sintakse dodelitve bitov
Velikokrat moramo dodeliti bit (0 ali 1) enemu bajtu SFR, da natančno nadzorujemo strojno napravo.
Obstaja SFRNaslavljanje podpornih bitovNa primer, TCON, P0 itd., trenutno je dodeljevanje protitočk zelo preprosto, samo poizvedite po definiciji bita v razdelku SFR Bit Access v datoteki glave ioCC2430.h:
P0_0 = 0; // dodeli 0 prvi števki P0
P0_0 = 1; // dodelimo vrednost 1 prvi števki P0  

A nekaterih SFR-jev niBitno naslavljanje ni podprto, kot v tem eksperimentuPICTL, v tem trenutku želite enemu od njih dodeliti vrednost, sintaksa je naslednja:
PIKTL &= ~0x01;   Prvi številki dodelimo vrednost 0
PICTL |= 0x01;     Prvo števko dodelimo vrednost 1

Lahko se spomniš&= ~|=Ti dve pogosto uporabljeni sintaksi dodeljevanja bitov.
(2) Povzetek omogočanja prekinitve
Ko je v programu vključena prekinitev, jo je treba omogočiti, preden se prekinitev sproži.
Hierarhija sistema za omogočanje prekinitev C51 je zelo očitna:
Interrupt Boss: EAje šef, odgovorenSplošnoOmogočite prekinitev:
EA = 1;

  Vsak prekinjen vodja skupine: Naslednje je za vsakegaFunkcionalni deli(kot so P0, časovnik 1 itd.), so takšni SFR-ji običajno bitno naslovljivi, ime pa običajno vsebuje IE (Interrupt Enable):
P0IE = 1;

  Vsak član ekipe je bil prekinjen: Ekipa Ker pa vsaka funkcija vsebuje tudi več prekinitev, je zadnja stopnja namenjena temuVsaka prekinitevTa vrsta SFR je običajno brez bitov in nenaslovljiva ter običajno vsebuje IE (Interrupt Enable) ali IM (Interrupt Mask) v imenu:
PICTL |=0x01;

Ni potrebe po ponavljanju prekinitev SFR, samo razumite njegovo hierarhijo in si vzemite čas za iskanje ročne ali glavne datoteke.
(3) Prekinitev pisanja programov
Uporaba prekinitev v programu običajno vključuje dva dela: pisanje podprograma za storitev prekinitev in začetek omogočanja prekinitve. Funkcija prekinitve je bila uvedena zgoraj, spodaj pa je kratek uvod v pisanje podprograma storitve prekinitve:
Najprej določitePrelomni vektor, ki ga je mogoče poizvedovati v razdelku Interrupt Vectors v datoteki glave ioCC2430.h z naslednjo sintakso:
#pragma vektor = vektor prekinitve

Nato takoj zatem zapišemo obdelovalnik prekinitve, ki je strukturiran takole:
__interrupt ime funkcije praznine (praznina)
  {
    //开中断
    //中断处理
    //中断标志清0
    //关中断
  }



3. Zaključek

Ta članek predstavlja metodo implementacije preprostih zunanjih prekinitev, ki temeljijo na CC2430, in po osnovi prekinitev bomo predstavili še en zelo pomemben modul – časovnike. CC2430 ima skupaj 4 časovnike, ki jih lahko razdelimo v tri kategorije: časovnik 1, časovnik 2, časovnik 3/4 (3 in 4 sta v bistvu enaka uporaba).


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




Prejšnji:Zigbee Journey (2): Prvi program CC2430 - eksperiment z LED utripanjem
Naslednji:Zigbee Journey (4): Več pomembnih osnovnih eksperimentov CC2430 - prekinitev časovnika
Disclaimer:
Vsa programska oprema, programski materiali ali članki, ki jih izdaja Code Farmer Network, so namenjeni zgolj učnim in raziskovalnim namenom; Zgornja vsebina ne sme biti uporabljena v komercialne ali nezakonite namene, sicer uporabniki nosijo vse posledice. Informacije na tej strani prihajajo z interneta, spori glede avtorskih pravic pa nimajo nobene zveze s to stranjo. Zgornjo vsebino morate popolnoma izbrisati z računalnika v 24 urah po prenosu. Če vam je program všeč, podprite pristno programsko opremo, kupite registracijo in pridobite boljše pristne storitve. Če pride do kakršne koli kršitve, nas prosimo kontaktirajte po elektronski pošti.

Mail To:help@itsvse.com