Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 7368|Odpověď: 0

Zigbee Journey (3): Několik důležitých základních experimentů CC2430 – vnější přerušení

[Kopírovat odkaz]
Zveřejněno 30.10.2014 23:16:46 | | | |
1. Propojení horní a dolní úrovně

V předchozí přednášce jsme se seznámili se základním procesem vývoje programu CC2430 pomocí IAR prostřednictvím jednoduchého experimentu s blikaním LED. Nůž už byl stejně nabroušený (i když můj brousek není dobrý) a teď začnu zabíjet hmyz :). Dále se naučíme pár základních experimentů s CC2430. Každý malý experiment je rozdělen do tří částí: "Úvod do experimentu", "Diagram programu a "Experimentální zdrojový kód a analýza".

Tento článek vysvětluje vnější přerušení.

2. Vnější přerušení(1) Úvod do experimentu

Přerušení jsou interním mechanismem, kterým mikrokontroléry zpracovávají interní nebo vnější události v reálném čase. Když dojde k interní nebo externí události, přerušovací systém mikrokontroléru donutí CPU pozastavit spouštěný program a místo toho zpracovat událost přerušení.

Přerušení jsou rozdělena na externí a interní přerušení a CC2430 obsahuje celkem 18 zdrojů přerušení (pro konkrétní popisy přerušení a definice vektorů přerušení viz "Čínský manuál CC2430》)。

Nyní se podívejme na schéma zapojení této vývojové desky:

Tlačítko S1 bylo připojeno k P0.1 na vývojové desce a efektem tohoto experimentu je spuštění přerušení P0.1 přes tlačítko S1 a následné řízení zapnutí/vypnutí LED1 v podprogramu služby přerušení.

(2) Experimentální princip a diagram

Experimentální diagram je následující:


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

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

prázdnotaDelay(nepodepsánon)   
{
  nepodepsánott;
  pro(tt =0; tt<n; tt++);
  pro(tt =0; tt<n; tt++);
  pro(tt =0; tt<n; tt++);
  pro(tt =0; tt<n; tt++);
  pro(tt =0; tt<n; tt++);
}

//32M晶振初始化
prázdnotaxtal_init(prázdnota)
{
  SPÁT &= ~0x04;            //都上电
  zatímco(! (SPÁT &0x40));     //晶体振荡器开启且稳定
  CLKCON &= ~0x47;           //Vyberte krystalový oscilátor s frekvencí 32 MHz
  SPÁT |=0x04;
}

//LED灯初始化
prázdnotaled_init(prázdnota)
{
  P1SEL =0x00;         P1 je běžný I/O port
  P1DIR |=0x0F;         P1.0 P1.1 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();

  zatímco(1);   //等待中断
}

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

  Delay(10000);  
  Delay(10000);
  Delay(10000);
  Delay(10000);
  Delay(10000);

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

  EA =1;                        //开中断
}

Nejprve inicializujte systémové hodiny: vyberte krystalový oscilátor na 32 MHz.

Pak inicializujte LEDky: nastavte P1 jako obecný I/O port, nastavte směr P1.0 ~ P1.3 jako výstup a pak vypněte 4 LED světla.

Dále nakonfigurujte příslušné SFR registry pro externí přerušení tak, aby bylo možné přerušení na všech úrovních, zahrnující 3 SFR:EAIEN1PICTL(Pro podrobnosti o každém SFR prosím vizČínský manuál CC2430》):

EA- Povolení úplného přerušení;

    IEN1.5- P0 povolení přerušení;

    OBRÁZEK.3—— P0.1 povolení přerušení portu;

    OBRÁZEK.0—— Nastavte vstupní okraj portu P0.1 tak, aby způsobil spouštění přerušení.

Pak použij while(1) v hlavní funkční roli a počkej na přerušení.

Tipy na CC2430
(1) Shrnutí syntaxe přiřazení bitů
Často musíme přiřadit bit (0 nebo 1) jednomu bajtu SFR, abychom přesně ovládali hardwarové zařízení.
Existuje SFRAdresování podpůrných bitůNapříklad TCON, P0 atd. je v tuto chvíli přiřazení protinázorů velmi jednoduché, stačí se zeptat na definici bitu v sekci SFR Bit Access souboru ioCC2430.h s hlavičkou:
P0_0 = 0; // přiřadit 0 k první číslici P0
P0_0 = 1; // přiřadit hodnotu 1 první číslici P0  

Ale některé SFR tam nejsouBitové adresování není podporováno, jako v tomto experimentuPICTL, v tuto chvíli chcete jednomu z nich přiřadit hodnotu, syntaxe je následující:
PICTL &= ~0x01;   První číslici přiřaďte hodnotu 0
OBRÁZEK |= 0x01;     První číslici přiřaďte hodnotu 1

Pamatuješ si&= ~|=Tyto dvě běžně používané syntaxe přiřazování bitů.
(2) Shrnutí umožnění přerušení
Pokud je v programu zapojeno přerušení, musí být povoleno před jeho spuštěním.
Hierarchie systému povolení přerušení C51 je velmi zřejmá:
Přerušovací boss: EAje šéf, zodpovědnýObecnéPovolení přerušení:
EA = 1;

  Každý přerušený velitel družstva: Další je pro každou z nichFunkční části(například P0, časovač 1 atd.), takové SFR jsou obecně bitově adresovatelné a název obvykle obsahuje IE (Interrupt Enable):
P0IE = 1;

  Každý člen týmu byl přerušen: Squad Ale protože každá funkce obsahuje i více přerušení, poslední úroveň je určena právě pro totoKaždé přerušeníTento typ SFR je obecně bezbitový a neadresovatelný, a obvykle obsahuje IE (Interrupt Enable) nebo IM (Interrupt Mask) v názvu:
PICTL |=0x01;

Není potřeba mechanicky provádět SFR přerušení, stačí pochopit jeho hierarchii a pak si najít manuál nebo hlavičku souboru.
(3) Přerušit psaní programů
Použití přerušení v programu obvykle zahrnuje dvě části: zápis podprogramu služby přerušení a zahájení povolení přerušení. Funkce přerušení byla představena výše a následuje stručný úvod do zápisu podprogramu služby přerušení:
Nejprve specifikujteVektor zlomu, který lze dotazovat v sekci Interrupt Vectors v souboru ioCC2430.h s následující syntaxí:
#pragma vektor = vektor přerušení

Poté ihned poté zapište obslužný nástroj přerušení, který je strukturován následovně:
__interrupt název funkce void (void)
  {
    //开中断
    //中断处理
    //中断标志清0
    //关中断
  }



3. Závěr

Tento článek představuje metodu implementace jednoduchých externích přerušení založenou na CC2430 a po základech přerušení představíme další velmi důležitý modul – časovače. CC2430 má celkem 4 časovače, které lze rozdělit do tří kategorií: časovač 1, časovač 2, časovač 3/4 (3 a 4 jsou v podstatě stejné použití).


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




Předchozí:Zigbee Journey (2): První program CC2430 – experiment s blikaním LED světlem
Další:Zigbee Journey (4): Několik důležitých základních experimentů CC2430 – přerušení časovače
Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com