架构师_程序员_码农网

V Gauti slaptažodį
Užsiregistruoti

QQ登录

Tik vienas žingsnis, kad pradėtumėte

Paieška
Peržiūrėti:4624|Atsakyti: 0
打印 上一主题 下一主题

[转]Zigbee之旅(三):几个重要的CC2430基础实验--External Interrupt

[Kopijuoti nuorodą]
K 跳转到指定楼层
pastato savininkui
发表于 2014-10-30 23:16:46|只看该作者回帖奖励|Atvirkštinisnaršymas| Skaitymo režimas
I. Perėjimas nuo ankstesnio prie kito

  Ankstesnėje paskaitoje susipažinome su pagrindiniu CC2430 programų kūrimo IAR programoje procesu, atlikdami nedidelį eksperimentą su paprasčiausiu šviesos diodo mirksėjimu. Peilis bent jau buvo pagaląstas (nors man nelabai sekasi tas galandimo akmuo), o dabar metas pradėti mėsinėti klaidas :). Toliau išmoksime keletą pagrindinių CC2430 eksperimentų. Kiekvienas nedidelis eksperimentas, suskirstytas į "eksperimentinio įvado", "programos srauto diagramos", "eksperimentinio šaltinio kodo ir analizės" tris aprašymo dalis.

  Šiame straipsnyje paaiškinamas išorinis pertraukimas.

Antra, išorinis pertraukimas(1) Eksperimento įvadas

  Pertrauka - tai realaus laiko mikrovaldiklis, skirtas vidiniams arba išoriniams įvykiams, vidiniam mechanizmui, spręsti. Įvykus kokiam nors vidiniam ar išoriniam įvykiui, mikrovaldiklio pertraukimo sistema privers procesorių pristabdyti vykdomą programą, bet pereiti prie pertraukimo įvykio apdorojimo, pertraukimo apdorojimas bus baigtas, o tada grįžti, kad būtų nutraukta programa, toliau vykdyti.

  Pertraukikliai skirstomi į išorinius ir vidinius pertraukiklius, CC2430 iš viso yra 18 pertraukimo šaltinių (konkretų pertraukimo aprašymą ir pertraukimo vektoriaus apibrėžtį galite rasti " CC2430 kinų vadove ").

  Dabar pažvelkime į šios kūrimo plokštės principinę schemą:

  Plėtros plokštė buvo prijungta prie mygtuko S1 ir P0.1, efektas, kurį norima pasiekti šiuo eksperimentu, yra sukelti P0.1 pertraukimą paspaudus mygtuką S1, o tada pertraukimo aptarnavimo paprogramėje valdyti LED1 šviesą/išjungimą.

(2) Eksperimento principas ir srauto diagrama

  Eksperimento srauto diagrama pateikta toliau:

2011021811430713.png
c













(
3) Eksperimentinis išeities kodas// antraštės failas#include // delay subfunkcija#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 kristalo inicializacijavoid xtal_init( void ) { SLEEP &=~0x04; &
nbsp; //viso maitinimo įjungimaswhile (!
(SLEEP & 0x40 )); //kristalinis osciliatorius įjungtas ir stabilus CLKCON &=~0x47; &






nbsp; /Pasirinkite 32 MHz kristalinį osciliatorių SLEEP |=0x04; }//LED inicializacijavoid led_init( void ) { P1SEL =0x00; &nbsp


; //P1 yra įprastas įvesties/išvesties prievadas P1DIR |=0x0F; //P1.0 P1.1 P1.2 P1.3 Išvestis








led1 = 0; led2 = 0; led3 = 0; led4 = 0; }//io ir išorinio pertraukimo inicializacijavoid io_init( void ) { P0INP &=~0X02;



/ /P0.1 turi ištraukimo ir ištraukimo funkciją EA =1; //Bendras pertraukimo įjungimas P0IE =1; &



nbsp; //P0 pertraukimo įjungimas PICTL |=0X09; //P0.1 prievado pertraukimo įjungimas, krintančio krašto trigeris P0IFG &=~0x02







; //P0.1 pertrūkio vėliava išvalyta 0 };//main functionvoid main( void ) { xtal_init(); led_init();








io_init();while ( 1); //laukia pertraukimo }//pertraukimo aptarnavimo paprogramė#pragma vector = P0INT_VECTOR__interrupt void P0_ISR( void ) { EA =0;

/ / Išjungti pertraukimo uždelsimą





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

nbsp; if ((P0IFG & 0x02 ) >0 ) //key interrupt { P0IFG &=~0x02; &


nbsp; //P0.1 pertraukimo vėliavėlės išvalymas 0 led1 = !led1; } P0IF =0; &

nbsp; //P0 pertraukimo vėliavėlės išvalymas 0 EA =1; &
nbsp; // įjungti pertraukimą }

  Pirmiausia inicializuokite vieningą laikrodį: pasirinkite 32 MHz kristalinį osciliatorių.

  Tada inicializuokite šviesos diodus: nustatykite P1 kaip bendrosios paskirties įvesties / išvesties prievadą, nustatykite P1.0 ~ P1.3 kryptį kaip išvestį, tada išjunkite 4 šviesos diodus.

  Tada sukonfigūruokite atitinkamus SFR registrus išoriniams pertraukimams ir įjunkite pertraukimo įjungimą visuose lygiuose, įskaitant 3 SFR: EA, IEN1, PICTL (išsamų kiekvieno SFR aprašymą rasite " CC2430 kinų kalbos vadove "):

     EA -- bendras pertraukimo įjungimas;

     IEN1.5 -- P0 pertraukimo įjungimas;

     PICTL.3 -- P0.1 prievado pertraukimo įjungimas;

     PICTL.0 -- nustatyti, kad P0.1 prievado įvesties krintantis kraštas sukeltų pertraukos suveikimą.

  Tada pagrindinėje funkcijoje naudokite while(1), kad lauktumėte pertraukos.

CC2430 patarimai
(1) Bitų priskyrimo sintaksės santrauka
Labai dažnai, norėdami tiksliai valdyti aparatinį įrenginį, turime vieno baito SFR bitui priskirti reikšmę (0 arba 1).
  

K
ai kurie SFR palaiko bitų adresavimą, pavyzdžiui, TCON, P0 ir t. t., šiuo metu bito priskyrimas yra labai paprastas, tereikia užklausti ioCC2430.h antraštinio failo SFR bitų prieigos dalies bitų apibrėžties:
P0_0 = 0; // P0 pirmasis bitas, kuriam priskiriama 0 reikšmė
P0_0 = 1; / / / P0 pirmasis bitas, kuriam priskiriama 1 reikšmė
Tačiau yra SFR, kurie nepalaiko
bitų adresavimo
,
pvz.
Tačiau kai kurie SFR
nepalaiko bitų adresavimo, pavyzdžiui, šiame eksperimente PICTL, kai norite priskirti reikšmę vienam iš jų, sintaksė yra tokia:
PICTL &= ~0x01; //priskirti pirmajam bitui 0 reikšmę
PICTL |= 0x01; //priskirti pirmajam bitui 1 reikšmę
Galite prisiminti, kad &
amp;= ~, |= ~, |= ~, |= ~, |= ~,
|= P0_0
=
1; //priskirti pirmajam P0 bitui 1 reikšmę
. amp;= ~, |= tai dvi įprastos bitų priskyrimo sintaksės.
(2) Pertraukimo įjungimo santrauka
Kai programoje dalyvauja pertraukimas, prieš sukeliant pertraukimą jis turi būti įjungtas.
  

C
51 pertraukos įjungimo sistema, jos hierarchinė struktūra labai akivaizdi:
pertraukos viršininkas: EA yra viršininkas, atsakingas už bendrą pertraukos įjungimą:
EA = 1;
pertraukos atskyrimo kapitonas: toliau yra kiekvieno funkcinio komponento (pvz., P0, 1 laikmačio ir t. t.) įjungimo valdymas, toks SFR paprastai adresuojamas bitu, pavadinime paprastai yra IE (pertraukos įjungimas):
P0IE = 1;
pertraukos komandos
nariai: atskyrimas, tačiau dėl
programospertraukimo pertrauką
reikia įjungti prieš sukeliant pertrauką.

k
iekvieno pertraukimo komandos nariai: komanda, bet kadangi kiekviename funkciniame komponente taip pat yra keletas pertraukimų, todėl paskutinis lygis skirtas kiekvieno pertraukimo įjungimo valdymui, toks SFR paprastai nėra bitų adresuojamas, pavadinime paprastai būna IE (Interrupt Enable) arba IM (Interrupt Mask):
PICTL | = 0x01;
nereikia įsiminti pertraukimo SFR Nereikia įsiminti pertraukimo SFR, jei suprantate jų hierarchiją, o tada, kai juos naudojate, susipažinkite su vadovu arba antraštės failais.
(3) Pertraukimo programų rašymas
Pertraukimų naudojimas programoje paprastai susideda iš dviejų dalių: pertraukimo aptarnavimo paprogramės rašymo ir pertraukimo leidimo atidarymo.

P
ertraukimo įgalinimas buvo pristatytas pirmiau, toliau trumpai pristatomas pertraukimo aptarnavimo paprogramės rengimas:
Pirmiausia nurodykite pertraukimo vektorių, jis gali būti ioCC2430.h antraštinio failo užklausos dalyje Interrupt Vectors (pertraukimo vektoriai), sintaksė tokia:
# pragma vector = Interrupt Vectors (# pragma vektorius = pertraukimo vektoriai
), po to rengiama pertraukimo tvarkyklė, jos struktūra tokia:
___
interrupt void Function Name (___)


i
nterrupt void funkcijos pavadinimas(void)
{
//įjungtas pertraukimas
//pertraukimo tvarkymas
//pertraukimo vėliavėlė clear 0
//išjungtas pertraukimas
}

III. Išvada

  Šiame straipsnyje pristatomas paprastas išorinio pertraukimo įgyvendinimo metodas, pagrįstas CC2430, kurio pagrindas yra pertraukimas, tada pristatome kitą labai svarbų modulį - laikmatį. CC2430 iš viso turi keturis laikmačius, kuriuos galima suskirstyti į tris kategorijas: 1 laikmatis, 2 laikmatis, 3/4 laikmatis (3 ir 4 naudojami tie patys pagrindiniai). tas pats).


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




Ankstesnis: [Re-]Zigbee kelionė (II): pirmoji CC2430 programa - LED mirksėjimo eksperimentas
Kitas: [Re-]Zigbee kelionė (4): Keletas svarbių CC2430 pagrindinių eksperimentų - laikmačio pertraukimai
Kodas ūkininko tinkle, skelbiamas tik praktikos metu, susidūrus su techniniais sunkumais, neklaidinkite kitų.

Ši vientisųjų taisyklių versija


ATSISAKYMAS: Visa Code Farmer paskelbta programinė įranga, programavimo medžiaga ar straipsniai gali būti naudojami tik mokymosi ir mokslinių tyrimų tikslais; minėtas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju visos pasekmės teks patiems naudotojams. Šios svetainės informacija iš tinklo, ginčas dėl autorių teisių neturi nieko bendra su šia svetaine. Per 24 valandas nuo atsisiuntimo turite visiškai pašalinti pirmiau nurodytą turinį iš savo kompiuterio. Jei programa jums patinka, paremkite originalią programinę įrangą, įsigykite registraciją ir gaukite geresnes originalias paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu, kad juos išspręstume.

Paštas To:help@itsvse.com

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

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

Greitasis atsakymasAtgal į viršųAtgal į sąrašą