Tento článok je zrkadlovým článkom o strojovom preklade, kliknite sem pre prechod na pôvodný článok.

Pohľad: 7368|Odpoveď: 0

Zigbee Journey (3): Niekoľko dôležitých základných experimentov CC2430 – vonkajšie prerušenie

[Kopírovať odkaz]
Zverejnené 30. 10. 2014 23:16:46 | | | |
1. Prepojenie hornej a dolnej úrovne

V predchádzajúcej prednáške sme sa oboznámili so základným procesom vývoja programu CC2430 pomocou IAR prostredníctvom jednoduchého experimentu s blikaním LED. Nôž bol aj tak nabrúsený (hoci môj brúsny kameň nie je dobrý) a teraz začnem zabíjať hmyz :). Ďalej sa naučíme niekoľko základných experimentov s CC2430. Každý malý experiment je rozdelený do troch častí: "Úvod do experimentu", "Diagram vývoja programu" a "Experimentálny zdrojový kód a analýza".

Tento článok vysvetľuje vonkajšie prerušenia.

2. Vonkajšie prerušenie(1) Úvod do experimentu

Prerušenia sú vnútorný mechanizmus, ktorým mikrokontroléry spracovávajú vnútorné alebo externé udalosti v reálnom čase. Keď nastane interná alebo externá udalosť, systém prerušenia mikrokontroléra prinúti CPU pozastaviť vykonávaný program a namiesto toho spracovať prerušovaciu udalosť.

Prerušenia sú rozdelené na externé a vnútorné prerušenia a CC2430 obsahuje celkovo 18 zdrojov prerušení (pre konkrétne popisy prerušení a definície vektorov prerušení prosím pozri "Čínsky manuál CC2430》)。

Teraz sa pozrime na schému zapojenia tejto vývojovej dosky:

Tlačidlo S1 bolo pripojené k P0.1 na vývojovej doske a efektom tohto experimentu je spustenie prerušenia P0.1 cez tlačidlo S1 a následné ovládanie zapnutia/vypnutia LED1 v podprograme služby prerušenia.

(2) Experimentálny princíp a diagram toku

Experimentálny diagram je nasledovný:


(3) Experimentálny zdrojový kód//头文件
#include

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

prázdnotaOneskorenie(nepodpísanén)   
{
  nepodpísanétt;
  pre(tt =0; tt<n; tt++);
  pre(tt =0; tt<n; tt++);
  pre(tt =0; tt<n; tt++);
  pre(tt =0; tt<n; tt++);
  pre(tt =0; tt<n; tt++);
}

//32M晶振初始化
prázdnotaxtal_init(prázdnota)
{
  SPAJ &= ~0x04;            //都上电
  zatiaľ čo(! (SLEEP &0x40));     //晶体振荡器开启且稳定
  CLKCON &= ~0x47;           //Vyberte 32MHz kryštálový oscilátor
  SPAK |=0x04;
}

//LED灯初始化
prázdnotaled_init(prázdnota)
{
  P1SEL =0x00;         P1 je bežný I/O port
  P1DIR |=0x0F;         P1.0 P1.1 P1.2 P1.3 výstup
  
  led1 = 0;
  Led2 = 0;
  led3 = 0;
  led4 = 0;
}

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

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

//主函数
prázdnotamain(prázdnota)   
{
  xtal_init();
  led_init();  
  io_init();

  zatiaľ čo(1);   //等待中断
}

//中断服务子程序
#pragma vektor = P0INT_VECTOR
__interrupt prázdnotaP0_ISR(prázdnota)
{
  EA =0;                        Brána je prerušená  

  Oneskorenie(10000);  
  Oneskorenie(10000);
  Oneskorenie(10000);
  Oneskorenie(10000);
  Oneskorenie(10000);

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

  EA =1;                        //开中断
}

Najprv inicializujte systémový takt: vyberte 32MHz kryštálový oscilátor.

Potom inicializujte LEDky: nastavte P1 ako všeobecný I/O port, nastavte smer P1.0 ~ P1.3 ako výstup a potom vypnite 4 LED svetlá.

Ďalej nakonfigurujte príslušné SFR registre pre externé prerušenia tak, aby umožnili prerušenia na všetkých úrovniach, pričom zahŕňajú 3 SFR:EAIEN1PICTL(Podrobnosti o každom SFR nájdete vČínsky manuál CC2430》):

EA- Povolenie úplného prerušenia;

    IEN1.5- P0 povolenie prerušenia;

    OBRÁZOK.3—— P0.1 povolenie prerušenia portu;

    OBRÁZOK.0—— Nastavte vstupný okraj portu P0.1 tak, aby spôsoboval spúšťanie prerušenia.

Potom použite while(1) v hlavnej funkcii a počkajte na prerušenie.

Tipy na CC2430
(1) Zhrnutie syntaxe priradenia bitov
Mnohokrát musíme priradiť bit (0 alebo 1) k jednému bajtu SFR, aby sme presne ovládali hardvérové zariadenie.
Existuje SFRAdresovanie podporných bitovNapríklad pri TCON, P0 a podobne, v súčasnosti je priraďovanie protibodov veľmi jednoduché, stačí sa opýtať na definíciu bitu v sekcii SFR Bit Access súboru hlavičky ioCC2430.h:
P0_0 = 0; // priraďte 0 prvej číslici P0
P0_0 = 1; // priraďte hodnotu 1 prvej číslici P0  

Ale niektoré SFR tam nie súBitové adresovanie nie je podporované, ako v tomto experimentePICTL, v tomto momente chcete priradiť hodnotu jednému z nich, syntax je nasledovná:
PICTL &= ~0x01;   Priraďte hodnotu 0 prvej číslici
PICTL |= 0x01;     Priraďte hodnotu 1 prvej číslici

Pamätáš si to&= ~|=Tieto dve bežne používané syntax priraďovania bitov.
(2) Zhrnutie umožnenia prerušenia
Keď je v programe zapojené prerušenie, musí byť povolené pred jeho spustením.
Hierarchia systému C51 na povolenie prerušenia je veľmi zrejmá:
Prerušovací boss: EAje šéf, zodpovednýVšeobecnéUmožnenie prerušenia:
EA = 1;

  Každý prerušený veliteľ družstva: Ďalšie je pre každúFunkčné časti(napríklad P0, časovač 1, atď.), takéto SFR sú zvyčajne adresovateľné bitovo a názov zvyčajne obsahuje IE (Interrupt Enable):
P0IE = 1;

  Každý člen tímu bol prerušený: Squad Ale keďže každá funkcia obsahuje aj viacero prerušení, posledná úroveň je určená práve na totoKaždé prerušenieTento typ SFR je zvyčajne bezbitový a neadresovateľný, a zvyčajne obsahuje IE (Interrupt Enable) alebo IM (Interrupt Mask) v názve:
OBRÁZOK |=0x01;

Nie je potrebné mechanicky prerušovať SFR, stačí pochopiť jeho hierarchiu a potom si nájsť čas na vyhľadanie manuálu alebo hlavičkového súboru.
(3) Prerušiť písanie programov
Použitie prerušení v programe zvyčajne zahŕňa dve časti: zápis podprogramu služby prerušenia a otvorenie povolenia prerušenia. Funkcia prerušenia bola predstavená vyššie a nasleduje stručný úvod do zápisu podprogramu služby prerušenia:
Najprv špecifikujteVektor zlomu, ktorú možno dotazovať v sekcii Interrupt Vectors v súbore hlavičky ioCC2430.h s nasledujúcou syntaxou:
#pragma vektor = vektor prerušenia

Potom ihneď nato zapíšte handler prerušenia, ktorý je štruktúrovaný nasledovne:
__interrupt názov funkcie void (void)
  {
    //开中断
    //中断处理
    //中断标志清0
    //关中断
  }



3. Záver

Tento článok predstavuje metódu implementácie jednoduchých externých prerušení založenú na CC2430 a po základe prerušení predstavíme ďalší veľmi dôležitý modul – časovače. CC2430 má celkovo 4 časovače, ktoré možno rozdeliť do troch kategórií: časovač 1, časovač 2, časovač 3/4 (3 a 4 sú v podstate rovnaké použitie).


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




Predchádzajúci:Zigbee Journey (2): Prvý program CC2430 – experiment s blikaním LED svetla
Budúci:Zigbee Journey (4): Niekoľko dôležitých základných experimentov CC2430 – prerušenie časovača
Vyhlásenie:
Všetok softvér, programovacie materiály alebo články publikované spoločnosťou Code Farmer Network slúžia len na vzdelávacie a výskumné účely; Vyššie uvedený obsah nesmie byť použitý na komerčné alebo nezákonné účely, inak nesú všetky následky používateľmi. Informácie na tejto stránke pochádzajú z internetu a spory o autorské práva s touto stránkou nesúvisia. Musíte úplne vymazať vyššie uvedený obsah zo svojho počítača do 24 hodín od stiahnutia. Ak sa vám program páči, podporte originálny softvér, zakúpte si registráciu a získajte lepšie originálne služby. Ak dôjde k akémukoľvek porušeniu, kontaktujte nás prosím e-mailom.

Mail To:help@itsvse.com