Ez a cikk egy tükör gépi fordítás, kérjük, kattintson ide, hogy ugorjon az eredeti cikkre.

Nézet: 7368|Válasz: 0

Zigbee Journey (3): Több fontos CC2430 alapkísérlet – külső megszakítás

[Linket másol]
Közzétéve 2014. 10. 30. 23:16:46 | | | |
1. A felső és alsó szintek összekapcsolása

Az előző előadáson megismerkedtünk az IAR CC2430 program fejlesztésének alapvető folyamatával egy egyszerű LED villogó kísérlet révén. A kést úgyis élesítették (bár a fenyőkövem nem jó), és most elkezdem :) rovarokat vágni. Ezután tanuljunk meg néhány alapvető kísérletet a CC2430-ról. Minden kis kísérlet három részre oszlik: "Kísérlet bevezetése", "Program folyamatábra" és "Kísérleti forráskód és elemzés".

Ez a cikk a külső megszakításokat magyarázza.

2. Külső megszakítás(1) Bevezetés a kísérlethez

A megszakítások belső mechanizmusok, amelyek a mikrokontrollerek valós időben feldolgozására szolgálnak belső vagy külső eseményeket. Amikor belső vagy külső esemény történik, a mikrokontroller megszakítási rendszere arra kényszeríti a CPU-t, hogy állítsa le a végrehajtó programot, és ehelyett feldolgozza a megszakítási eseményt.

A megszakítások külső és belső megszakításokra vannak osztva, és a CC2430 összesen 18 megszakítási forrást tartalmaz (a megszakításvektorok konkrét leírásaiért és definícióiért kérjük, lásd a "CC2430 kínai kézikönyv》)。

Most nézzük meg ennek a fejlesztő lapnak az áramköri rajzát:

Az S1 gombot csatlakoztatták a fejlesztő panel P0.1-éhez, és ennek a kísérletnek az eredménye, hogy a P0.1 megszakítását az S1 gombon keresztül aktiválja, majd a megszakítási szolgáltatás alprogramban a LED1 be- és kikapcsolását irányítja.

(2) Kísérleti elv és folyamatábra

A kísérleti folyamatábra a következő:


(3) Kísérleti forráskód//头文件
#include

//延时子函数
#defineled1 P1_0
#defineled2 P1_1
#defineLED3 P1_2
#defineLED4 P1_3

SemmiKésés(Aláírás nélküln)   
{
  Aláírás nélkültt;
  for(tt =0; tt<n; tt++);
  for(tt =0; tt<n; tt++);
  for(tt =0; tt<n; tt++);
  for(tt =0; tt<n; tt++);
  for(tt =0; tt<n; tt++);
}

//32M晶振初始化
Semmixtal_init(Semmi)
{
  ALVÁS &= ~0x04;            //都上电
  miközben(! (ALVÁS &0x40));     //晶体振荡器开启且稳定
  CLKCON &= ~0x47;           //Válassz egy 32 MHz-es kristályoscillátort
  ALVÁS |=0x04;
}

//LED灯初始化
Semmiled_init(Semmi)
{
  P1SEL =0x00;         A P1 a normál I/O port
  P1DIR |=0x0F;         P1.0 P1.1 P1.2 P1.3 kimenet
  
  led1 = 0;
  led2 = 0;
  led3 = 0;
  led4 = 0;
}

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

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

//主函数
Semmimain(Semmi)   
{
  xtal_init();
  led_init();  
  io_init();

  miközben(1);   //等待中断
}

//中断服务子程序
#pragma vektor = P0INT_VECTOR
__interrupt SemmiP0_ISR(Semmi)
{
  EA =0;                        A kapu megszakítva van  

  Késés(10000);  
  Késés(10000);
  Késés(10000);
  Késés(10000);
  Késés(10000);

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

  EA =1;                        //开中断
}

Először inicializáld a rendszer órajelét: válassz egy 32 MHz-es kristályoszcillátort.

Ezután inicializáld a LED-eket: állítsd be a P1-et általános I/O portnak, állítsd be a P1.0 ~ P1.3 irányt kimenetként, majd kapcsold le a 4 LED lámpát.

Ezután konfiguráljuk a külső megszakítások megfelelő SFR regisztereit, hogy minden szinten engedélyezzék a megszakításokat, három SFR-t érintve:EAIEN1PICTL(Az egyes SFR-ek részleteiért kérjük, lásd aCC2430 kínai kézikönyv》):

EA- Teljes megszakítás engedélyezése;

    IEN1.5- P0 megszakítás engedélyezi;

    PICTL.3—— P0.1 port megszakítás engedélyezi;

    PICTL.0—— Állítsuk be a P0.1 port bemeneti drop élét, hogy megszakítást indítson el.

Ezután használd a while(1)-et a fő funkcióban, és várd meg a megszakítást.

CC2430 tippek
(1) Bit-hozzárendelési szintaxisának összefoglalása
Sokszor egy bitet (0 vagy 1) kell rendelnünk egyetlen bájthoz SFR-hez, hogy pontosan irányítsuk a hardvereszközt.
Van SFRTámogató bitcímezésPéldául TCON, P0 stb., jelenleg az ellenpontok hozzárendelése nagyon egyszerű, csak kérdezd le a bitdefiníciót az ioCC2430.h fejlécfájl SFR Bit Access szakaszában:
P0_0 = 0; // 0-t rendelünk a P0 első számjegyéhez
P0_0 = 1; // 1 értéket rendelünk a P0 első számjegyéhez  

De néhány SFR-ek nincs ottA bitcímezés nem támogatott, mint ebben a kísérletbenPICTL, ekkor az egyiküknek értéket kell rendelni, a szintaxis a következő:
PICTL &= ~0x01;   Rendelj 0 értéket az első számjegyhez
PICTL |= 0x01;     Rendelj 1-es értéket az első számjegyhez

Emlékszel&= ~|=Ez a két leggyakrabban használt bithozzárendelési szintaxis.
(2) A megszakítás engedélyezésének összefoglalása
Ha megszakítás van a programban, azt engedélyezni kell a megszakítás aktiválása előtt.
A C51 megszakítás engedélyező rendszer hierarchiája nagyon nyilvánvaló:
Megszakító főellenség: EAa főnök, felelősÁltalánosMegszakítás engedélyezése:
EA = 1;

  Minden megszakított szakaszvezető: A következő mindegyikhez szólFunkcionális alkatrészek(például P0, 1-es időzítő stb.), az SFR-ek általában bitcímezhetők, és a név általában tartalmazza az IE (Interrupt Enable) funkciót:
P0IE = 1;

  Minden csapattagot megszakítottak: Osztag De mivel minden funkcióban több megszakítás is van, az utolsó szint erre szólMinden megszakításEz a fajta SFR általában bitmentes és címezhetetlen, és általában IE (Interrupt Enable) vagy IM (Interrupt Mask) néven szerepel:
PICTL |=0x01;

Nem kell automatikusan megszakítani az SFR-t, csak értsd meg a hierarchiáját, és szánj időt arra, hogy utánanézz a kézikönyvnek vagy a fejlécnek fájlnak.
(3) Megszakítani a programok írását
A megszakítások használata egy programban általában két részből áll: a megszakítási szolgáltatás alprogram megírásáról és a megszakítás engedélyezésének megnyitásáról. A megszakítás függvényt fentebb bemutattuk, és az alábbiakban rövid bevezetés a megszakítás szolgáltatás alprogram írásába:
Először megadja a megTörésvektor, amely az ioCC2430.h fejlécfájl Megszakítási vektorok szakaszában lekérdezhető a következő szintaxissal:
#pragma vektor = megszakítási vektor

Ezután azonnal írjuk meg a megszakítási kezelőt, amely a következőképpen van felépítve:
__interrupt void függvény neve (void)
  {
    //开中断
    //中断处理
    //中断标志清0
    //关中断
  }



3. Következtetés

Ez a cikk bemutatja az egyszerű külső megszakítások megvalósítási módszerét a CC2430 alapján, és a megszakítások alapja után bemutatunk egy másik nagyon fontos modult – az időzítőket. A CC2430-nak összesen 4 időzítője van, amelyek három kategóriába sorolhatók: 1-es, 2-es, 3/4-es időzítő (a 3 és 4 gyakorlatilag ugyanaz a használat).


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




Előző:Zigbee Journey (2): Az első CC2430 program – LED fényvillogó kísérlet
Következő:Zigbee Journey (4): Több fontos CC2430 alap kísérlet – időzítő megszakítás
Lemondás:
A Code Farmer Network által közzétett összes szoftver, programozási anyag vagy cikk kizárólag tanulási és kutatási célokra szolgál; A fenti tartalmat nem szabad kereskedelmi vagy illegális célokra használni, különben a felhasználók viselik az összes következményet. Az oldalon található információk az internetről származnak, és a szerzői jogi vitáknak semmi köze ehhez az oldalhoz. A fenti tartalmat a letöltés után 24 órán belül teljesen törölni kell a számítógépéről. Ha tetszik a program, kérjük, támogassa a valódi szoftvert, vásároljon regisztrációt, és szerezzen jobb hiteles szolgáltatásokat. Ha bármilyen jogsértés történik, kérjük, vegye fel velünk a kapcsolatot e-mailben.

Mail To:help@itsvse.com