架构师_程序员_码农网

P Získanie hesla
Registrácia

QQ登录

Stačí jeden krok, aby ste mohli začať

Vyhľadávanie
Zobrazenie:4624|Odpoveď: 0
打印 上一主题 下一主题

[转]Zigbee之旅(三):几个重要的CC2430基础实验--Externé prerušenie

[Kopírovať odkaz]
V 跳转到指定楼层
majiteľovi budovy
发表于 2014-10-30 23:16:46|只看该作者回帖奖励|Reverznéprehliadanie|Režim čítania
I. Pokračovanie z predchádzajúceho na ďalšie

  V predchádzajúcej prednáške sme sa oboznámili so základným postupom vývoja programov CC2430 v IAR prostredníctvom malého experimentu s najjednoduchším blikaním LED. Nôž sme si aspoň nabrúsili (aj keď mi to s tým brúsnym kameňom veľmi nejde) a teraz je čas pustiť sa do porcovania chýb :). Ďalej sa naučíme niekoľko základných experimentov s CC2430. Každý malý experiment, rozdelený na "experimentálny úvod", "vývojový diagram programu", "experimentálny zdrojový kód a analýza" tri časti popisu.

  Tento článok vysvetľuje externé prerušenie.

Po druhé, externé prerušenie(1) Úvod do experimentu

  Prerušenie je mikrokontrolér reálneho času na riešenie vnútorných alebo vonkajších udalostí, vnútorný mechanizmus. Keď nastane nejaká vnútorná alebo vonkajšia udalosť, systém prerušenia mikrokontroléra prinúti procesor pozastaviť vykonávaný program, ale prejsť na spracovanie prerušenej udalosti, spracovanie prerušenia je dokončené a potom sa vráti na prerušenie programu, pokračuje vo vykonávaní.

  Prerušenia sa delia na externé prerušenia a interné prerušenia, CC2430 obsahuje celkovo 18 zdrojov prerušenia (konkrétny popis prerušenia a definíciu vektora prerušenia nájdete v " Čínskej príručke CC2430 ").

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

2011021811145691.jpg

  Vývojová doska bola pripojená k tlačidlu S1 a P0.1, efekt, ktorý chce tento experiment dosiahnuť, je spustiť prerušenie P0.1 stlačením tlačidla S1 a potom v podprograme obsluhy prerušenia ovládať rozsvietenie/zhasnutie LED1.

(2) Princíp experimentu a vývojový diagram

  Vývojový diagram experimentu je nasledujúci:

2011021811430713.png
c













(
3) Experimentálny zdrojový kód// hlavičkový súbor#include // podfunkcia delay#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 kryštálová inicializáciavoid xtal_init( void ) { SLEEP &=~0x04; &
nbsp; //všetko napájaniewhile (!
(SLEEP & 0x40 )); //kryštálový oscilátor zapnutý a stabilný CLKCON &=~0x47; &






nbsp; /Vyber 32MHz kryštálový oscilátor SLEEP |=0x04; }//Inicializácia LEDvoid led_init( void ) { P1SEL =0x00; &nbsp


; //P1 je normálny I/O port P1DIR |=0x0F; //P1.0 P1.1 P1.2 P1.3 Výstup








led1 = 0; led2 = 0; led3 = 0; led4 = 0; }//io a inicializácia externého prerušeniavoid io_init( void ) { P0INP &=~0X02;



/ /P0.1 má pull-up a pull-down EA =1; //Total interrupt enable P0IE =1; &



nbsp; //P0 interrupt enable PICTL |=0X09; //P0.1 port interrupt enable, falling edge trigger P0IFG &=~0x02







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








io_init();while ( 1); //čakanie na prerušenie }//podprogram obsluhy prerušenia#pragma vektor = P0INT_VECTOR__prerušenie void P0_ISR( void ) { EA =0;

/ / vypnutie prerušenia On eskorenie





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

nbsp; if ((P0IFG & 0x02 ) >0 ) //prerušenie kľúča { P0IFG &=~0x02; &


nbsp; //P0.1 príznak prerušenia clear 0 led1 = !led1; } P0IF =0; &

nbsp; //P0 flag interrupt clear 0 EA =1; &
nbsp; // zapnúť prerušenie }

  Najprv inicializujte Unity Clock: vyberte 32MHz kryštálový oscilátor.

  Potom inicializujte LED diódy: nastavte P1 ako univerzálny I/O port, nastavte smer P1.0 ~ P1.3 ako výstup a potom vypnite 4 LED diódy.

  Potom nakonfigurujte príslušné registre SFR pre externé prerušenia a zapnite povolenie prerušenia na všetkých úrovniach, čo zahŕňa 3 SFR: EA, IEN1, PICTL (podrobný opis jednotlivých SFR nájdete v " Čínskej príručke CC2430 "):

     EA -- celkové povolenie prerušenia;

     IEN1.5 -- povolenie prerušenia P0;

     PICTL.3 -- povolenie prerušenia portu P0.1;

     PICTL.0 -- nastavenie klesajúcej hrany vstupu portu P0.1 na vyvolanie prerušenia.

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

CC2430 Tipy
(1) Syntax priradenia bitov Zhrnutie
Veľmi často potrebujeme priradiť hodnotu (0 alebo 1) k bitu v jednobajtovom SFR, aby sme presne ovládali hardvérové zariadenie.
  

N
iektoré SFR podporujú bitové adresovanie, napríklad TCON, P0 atď. v tomto čase je priradenie bitu veľmi jednoduché, stačí sa opýtať na hlavičkový súbor ioCC2430.h v časti SFR Bitový prístup definícia bitu môže byť:
P0_0 = 0; // P0 prvý bit priradenia hodnoty 0
P0_0 = 1; / / / P0 prvý bit priradenia hodnoty 1
Existujú
však SFR, ktoré nepodporujú
bitové adresovanie, ako v prípade
priradenia hodnoty prvého bitu prvého bitu prvého bitu
druhého
bitu
.
Niektoré SFR však
nepodporujú bitové adresovanie, ako napríklad PICTL v tomto experimente, keď chcete jednému z nich priradiť hodnotu, syntax je nasledujúca:
PICTL &= ~0x01; //priradiť prvému bitu hodnotu 0
PICTL |= 0x01; //priradiť prvému bitu hodnotu 1
Môžete si
zapamätať, že &
amp;= ~, |= ~, |= ~, |= ~,
|= P0_0
=
1; //priradiť prvému bitu P0 hodnotu 1
. amp;= ~, |= tieto dve bežné syntaxe priradenia bitov.
(2) Zhrnutie povoľovania prerušenia
Keď je do programu zapojené prerušenie, musí byť povolené pred jeho spustením.
  

S
ystém povoľovania prerušenia C51, jeho hierarchická štruktúra je veľmi zrejmá:
šéf prerušenia: EA je šéf, zodpovedný za celkové povolenie prerušenia:
EA = 1;
kapitán oddelenia
prerušenia: ďalší je pre každú funkčnú zložku (ako P0, časovač 1 atď.) povolenie kontroly, takýto SFR je všeobecne bitovo adresovateľný, pomenovanie všeobecne obsahuje IE (povolenie prerušenia):
P0IE = 1;
členovia
tímu prerušenia
: oddelenie, ale kvôli
prerušeniuprogramu
musí byť
prerušenie
povolené pred spustením prerušenia.

k
aždý člen tímu prerušenia: tím, ale pretože každá funkčná zložka obsahuje aj viacero prerušení, takže posledná úroveň je pre každú kontrolu povolenia prerušenia, takýto SFR spravidla nie je bitovo adresovateľný, pomenovaný spravidla obsahuje IE (Interrupt Enable) alebo IM (Interrupt Mask):
PICTL | = 0x01;
nemusíte si pamätať SFR prerušenia Nie je potrebné pamätať si prerušovacie SFR, pokiaľ rozumiete hierarchii, a potom si pri ich používaní prečítajte príručku alebo hlavičkové súbory.
(3) Písanie programov prerušenia
Použitie prerušenia v programe sa vo všeobecnosti skladá z dvoch častí: zápis podprogramu obsluhy prerušenia a otvorenie povolenia prerušenia.

P
ovolenie prerušenia bolo predstavené vyššie, ďalej je uvedený stručný úvod do prípravy podprogramu obsluhy prerušenia:
Najprv špecifikujte vektor prerušenia, môže byť v hlavičkovom súbore ioCC2430.h v časti Interrupt Vectors (vektory prerušenia), syntax je nasledovná:
# pragma vector = Interrupt Vectors (vektory prerušenia)
a potom nasleduje príprava obsluhy prerušenia, štruktúra je nasledovná:
___
interrupt void Function Name (___)


i
nterrupt void function name(void)
{
//na prerušenie
//obsluha prerušenia
//príznak prerušenia clear 0
//vypnuté prerušenie
}

III. Záver

  V tomto článku uvádzame jednoduchý spôsob implementácie externého prerušenia na báze CC2430, pričom základom je prerušenie, ďalej uvádzame ďalší veľmi dôležitý modul - časovač. CC2430 má celkovo štyri časovače, ktoré možno rozdeliť do troch kategórií: časovač 1, časovač 2, časovač 3/4 (3 a 4 použitie rovnakého základu). rovnaké).


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




Previous: [Re-]Zigbee Journey (II): prvý program CC2430 - experiment s blikaním LED
Ďalšie: [Re-]Zigbee Journey (4): Niekoľko dôležitých základných experimentov s CC2430 - prerušenie časovača
Kód farmárskej siete, zverejnený len v procese praxe, vyskytli sa technické ťažkosti, neuvádzajte ostatných do omylu.

T áto verzia integrálnych pravidiel


VYHLÁSENIE: Všetok softvér, programové materiály alebo články uverejnené Code Farmer sa môžu používať len na vzdelávacie a výskumné účely; uvedený obsah sa nesmie používať na komerčné alebo nezákonné účely, inak všetky dôsledky znášajú samotní používatelia. Táto stránka informácie zo siete, spor o autorské práva nemá s touto stránkou nič spoločné. Vyššie uvedený obsah musíte do 24 hodín od stiahnutia úplne odstrániť z počítača. Ak sa vám program páči, podporte prosím 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 e-mailom, aby sme to mohli riešiť.

Mail To:help@itsvse.com

QQ| ( 鲁ICP备14021824号-2)|Mapa stránok

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

Rýchla odpoveďSpäť na začiatokSpäť na zoznam