架构师_程序员_码农网

F Jelszó lekérése
Regisztráció

QQ登录

Csak egy lépés az induláshoz

Keresés
Megtekintés:4624|Válasz: 0
打印 上一主题 下一主题

[转]Zigbee之旅(三):几个重要的CC2430基础实验--Külső megszakítás

[Link másolása]
L 跳转到指定楼层
az épület tulajdonosához
发表于 2014-10-30 23:16:46|只看该作者回帖奖励|ReverseBrowse|Read Mode
I. Az előzőről a következőre továbblépve

  Az előző előadásban a CC2430-as programok IAR-ban történő fejlesztésének alapvető folyamatával ismerkedtünk meg egy kis kísérleten keresztül a legegyszerűbb LED villogtatásával. A kés legalább meg lett élezve (bár nem vagyok túl jó ebben az élező kőben), és most már ideje elkezdeni a bogarak lemészárlását :). Ezután tanuljunk meg néhány alapvető CC2430-as kísérletet. Minden kis kísérlet, osztva "kísérleti bevezetés", "program folyamatábrája", "kísérleti forráskód és elemzés" három részre a leírás.

  Ez a cikk elmagyarázza a külső megszakítást.

Másodszor, a külső megszakítás(1) Bevezetés a kísérletbe

  A megszakítás egy valós idejű mikrokontroller a belső vagy külső események kezelésére, egy belső mechanizmus. Amikor valamilyen belső vagy külső esemény történik, a mikrokontroller megszakítási rendszere arra kényszeríti a CPU-t, hogy szüneteltesse a végrehajtott programot, de a megszakítási esemény feldolgozásához menjen, a megszakítási feldolgozás befejeződik, majd visszatér a program megszakításához, folytassa a végrehajtást.

  A megszakítások külső megszakításokra és belső megszakításokra oszlanak, a CC2430 összesen 18 megszakítási forrást tartalmaz (a konkrét megszakítási leírás és a megszakítási vektor meghatározása a " CC2430 kínai kézikönyv " című dokumentumban található).

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

2011021811145691.jpg

  A fejlesztési lapot az S1 gombhoz és a P0.1-hez csatlakoztattuk, a hatás, amit ez a kísérlet el akar érni, az, hogy az S1 gomb megnyomásával kiváltja a P0.1 megszakítását, majd a megszakítás kiszolgáló alprogramban vezérli a LED1 fényét / kialvását.

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

  A kísérlet folyamatábrája a következő:

2011021811430713.png
c













(
3) Kísérleti forráskód// fejlécfájl#include // delay alfunkció#define led1 P1_0#define led2 P1_1#define led3 P1_2#define led4 P1_3void Delay( unsigned n) { && &



nbsp; unsigned tt;for (tt = 0;tt<n;tt++);for (tt = 0;tt<n;tt++);for (tt = 0;tt<n;tt++); &






nbsp; for (tt = 0;tt<n;tt++);for (tt = 0;tt<n;tt++); }//32M kristály inicializálásavoid xtal_init( void ) { SLEEP &=~0x04; &
nbsp; //minden bekapcsoláswhile (!
(SLEEP & 0x40 )); //kristályos oszcillátor bekapcsolva és stabil CLKCON &=~0x47; &






nbsp; //Select 32MHz-es kristályoszcillátor SLEEP |=0x04; }//LED inicializálásvoid led_init( void ) { P1SEL =0x00; &nbsp


; //P1 egy normál I/O port P1DIR |=0x0F; //P1.0 P1.1 P1.2 P1.3 Ki menet








led1 = 0; led2 = 0; led3 = 0; led4 = 0; }//io és külső megszakítás inicializálásvoid io_init( void ) { P0INP &=~0X02;



/ /P0.1 pull-up és pull-down EA =1; //Teljes megszakítás engedélyezése P0IE =1; &



nbsp; //P0 megszakítás engedélyezése PICTL |=0X09; //P0.1 port megszakítás engedélyezése, csökkenő élű trigger P0IFG &=~0x02







; //P0.1 interrupt flag clear 0 };//main functionvoid main( void ) { xtal_init(); led_init();








io_init();while ( 1 ); //megszakításra várni }//megszakítás kiszolgáló alprogram#pragma vector = P0INT_VECTOR__interrupt void P0_ISR( void ) { EA =0;

/ / megszakítás kikapcsolása Delay





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

nbsp; if ((P0IFG & 0x02 ) >0 ) //billentyű megszakítás { P0IFG &=~0x02; &


nbsp; //P0.1 megszakítási jelző törlése 0 led1 = !led1; } P0IF =0; &

nbsp; //P0 megszakítási jelző törlése 0 EA =1; &
nbsp; // megszakítás bekapcsolása }

  Először inicializáljuk az Unity Clockot: válasszunk egy 32MHz-es kristály oszcillátort.

  Ezután inicializáljuk a LED-eket: állítsuk be a P1-et általános célú I/O portként, állítsuk be a P1.0 ~ P1.3 irányt kimenetként, majd kapcsoljuk ki a 4 LED-et.

  Ezután konfigurálja a megfelelő SFR regisztereket a külső megszakításokhoz, és kapcsolja be a megszakítás engedélyezését minden szinten, 3 SFR-t érintve: EA, IEN1, PICTL (az egyes SFR-ek részletes leírását lásd a " CC2430 kínai kézikönyv " című dokumentumban):

     EA -- teljes megszakításengedélyezés;

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

     PICTL.3 -- P0.1 port megszakítás engedélyezése;

     PICTL.0 -- a P0.1 port bemenetének csökkenő élét állítja be a megszakítás kiváltására.

  Ezután a while(1)-t használjuk a főfüggvényben a megszakításra való várakozáshoz.

CC2430 tippek
(1) Bit hozzárendelés szintaxis összefoglaló
Nagyon gyakran kell egy értéket (0 vagy 1) hozzárendelni egy bithez egy egybájtos SFR-ben egy hardvereszköz pontos vezérléséhez.
  

N
éhány SFR támogatja a bitcímzést, mint például a TCON, P0 stb., Ebben az időben a bit hozzárendelése nagyon egyszerű, csak kérdezze le az ioCC2430.h fejlécfájlt az SFR Bit Access részében a bit definíciója lehet:
P0_0 = 0; // P0 az első bit a hozzárendelés értékének 0
P0_0 = 1; / / / / P0 az első bit a hozzárendelés értékének 1
Azonban vannak SFR-ek, amelyek nem
támogatják a bitcímzést, mint például
az
első bit a hozzárendelés értékének első bitje a
második
bit első bitjének első bitje
esetében.
Vannak azonban olyan SFR-ek,
amelyek nem támogatják a bitcímzést, mint például a PICTL ebben a kísérletben, amikor értéket akarunk rendelni az egyikhez, a szintaxis a következő:
PICTL &= ~0x01; // 0 értéket rendelünk az első bithez
PICTL |= 0x01; // 1 értéket rendelünk az első bithez
Emlékezhetünk, hogy &
amp;= ~, |= ~, |= ~, |= ~,
|= P0_0
=
1; // 1 értéket rendelünk a P0 első bitjéhez
. amp;= ~, |= ez a két gyakori bit hozzárendelési szintaxis.
(2) A megszakítás engedélyezésének összefoglalása
Ha egy megszakítás részt vesz egy programban, akkor a megszakítás kiváltása előtt engedélyezni kell.
  

C
51 megszakítás engedélyezési rendszer, hierarchikus felépítése nagyon nyilvánvaló:
megszakítás főnök: EA a főnök, felelős a teljes megszakítás engedélyezése:
EA = 1;
megszakítás leválasztás kapitány: a következő az egyes funkcionális komponensek (például P0, időzítő 1, stb.) engedélyezése vezérlés, mint SFR általában bitcímezhető, elnevezése általában tartalmaz IE (Interrupt Enable):
P0IE = 1; a
megszakítás csapat
tagjai: leválasztás, de a
programmegszakítása miatt a megszakítást
engedélyezni kell a megszakítás kiváltása előtt.

m
inden megszakítási csapattag: csapat, de mivel minden funkcionális komponens több megszakítást is tartalmaz, így az utolsó szint minden megszakítás engedélyezésének vezérlésére szolgál, az ilyen SFR általában nem bitcímezhető, elnevezése általában IE (Interrupt Enable) vagy IM (Interrupt Mask):
PICTL | = 0x01;
nem kell megjegyezni a megszakítási SFR-eket. A megszakítási SFR-eket nem szükséges megjegyezni, amennyiben megérti a hierarchiát, majd használatukkor konzultál a kézikönyvvel vagy a fejlécfájlokkal.
(3) Megszakítási programok írása
A megszakítások használata egy programban általában két részből áll: a megszakítást kiszolgáló szubrutin megírása és a megszakítás engedélyezésének megnyitása.

A
megszakítás engedélyezése fentebb bemutatásra került, a következőkben röviden bemutatjuk a megszakítás-kiszolgáló szubrutin elkészítését:
Először is, adja meg a megszakítási vektort, lehet az ioCC2430.h fejlécfájlban a megszakítási vektorok résznél a lekérdezés, a szintaxis a következő:
# pragma vector = megszakítási vektorok
, majd ezt követi a megszakításkezelő elkészítése, a szerkezet a következő:
___
megszakítás void Function Name (___)


i
nterrupt void függvénynév(void)
{
//on interrupt
//interrupt kezelés
//interrupt flag clear 0
//off interrupt
}

III. Következtetés

  Ez a cikk egy egyszerű külső megszakítás megvalósítási módszert mutat be a CC2430 alapján, a megszakítás alapján, majd bemutatunk egy másik nagyon fontos modult - az időzítőt. A CC2430 összesen négy időzítővel rendelkezik, amelyek három kategóriába sorolhatók: időzítő 1, időzítő 2, időzítő 3/4 (3 és 4 a használat ugyanaz az alap). ugyanazt).


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




Előző: [Re-]Zigbee utazás (II): Az első CC2430 program - LED villogó kísérlet
Következő: [Re-]Zigbee Journey (4): Néhány fontos CC2430 alapkísérlet - időzítő megszakítások
A kódgazda hálózat, csak a gyakorlat során közzétett, technikai nehézségekkel találkozott, ne vezessen félre másokat.
Be kell jelentkezned, mielőtt hozzászólhatnál Bejelentkezés | Regisztráció

E z a verzió az integrál szabályok


KIZÁRÓLAG: A Code Farmer által közzétett minden szoftver, programozási anyag vagy cikk kizárólag tanulási és kutatási célokra használható; a fenti tartalmak nem használhatók fel kereskedelmi vagy illegális célokra, ellenkező esetben minden következményt a felhasználók maguk viselnek. Ez az oldal információ a hálózatról, a szerzői jogi vitának semmi köze ehhez az oldalhoz. A fenti tartalmat a letöltést követő 24 órán belül teljes mértékben el kell távolítania a számítógépéről. Ha tetszik a program, kérjük, támogassa az eredeti szoftvert, vásárolja meg a regisztrációt, és jobb valódi szolgáltatást kap. Ha bármilyen jogsértés történt, kérjük, lépjen kapcsolatba velünk e-mailben, hogy foglalkozzunk vele.

Mail To:help@itsvse.com

QQ| ( 鲁ICP备14021824号-2)|Sitemap

GMT+8, 2024-9-17 14:49

Gyors válaszVissza a tetejéreVissza a listához