架构师_程序员_码农网

K Parooli taastamine
Registreeri

QQ登录

Ainult üks samm, et alustada

Otsi
View:4624|Reply: 0
打印 上一主题 下一主题

[转]Zigbee之旅(三):几个重要的CC2430基础实验--väline katkestus

[Kopeeri link]
L 跳转到指定楼层
hoone omanikule
发表于 2014-10-30 23:16:46|只看该作者回帖奖励|ReverseBrowse|Read Mode
I. Jätkamine eelmisest järgmisele

  Eelmises loengus tutvusime CC2430 programmide arendamise põhiprotsessiga IARis läbi väikese eksperimendi lihtsaima LED-i vilkumisega. Nuga on vähemalt teritatud (kuigi ma ei oska seda terituskivi eriti hästi kasutada) ja nüüd on aeg hakata vigu lahterdama :). Järgmisena õpime mõned põhilised CC2430 eksperimendid. Iga väike eksperiment, jagatud "eksperimentaalne sissejuhatus", "programmi vooskeem", "eksperimentaalne lähtekood ja analüüs" kolme osa kirjeldus.

  See artikkel selgitab välise katkestuse.

Teiseks, väline katkestus(1) Sissejuhatus eksperimendi kohta

  Katkestus on reaalajas mikrokontroller, et käsitleda sisemisi või väliseid sündmusi, sisemine mehhanism. Kui mingi sisemine või väline sündmus toimub, mikrokontrolleri katkestussüsteem sunnib protsessorit peatama täidetava programmi, kuid minna katkestussündmuse töötlemiseks, katkestuse töötlemine on lõppenud ja seejärel naasta, et programm katkestada, jätkata täitmist.

  Katkestused on jagatud välisteks katkestusteks ja sisemisteks katkestusteks, CC2430 sisaldab kokku 18 katkestusallikat (konkreetne katkestuse kirjeldus ja katkestusvektori määratlus, võite vaadata " CC2430 hiina käsiraamatut ").

  Nüüd vaatame selle arendusplaadi elektriskeemi:

2011021811145691.jpg

  Arendusplaat on ühendatud nupu S1 ja P0.1 külge, efekt, mida see eksperiment tahab saavutada, on P0.1 katkestuse käivitamine klahvi S1 vajutamisega ja seejärel LED1 valguse/väljalülitamise juhtimine katkestuse teenindamise allprogrammiga.

(2) Eksperimentaalne põhimõte ja vooskeem

  Eksperimendi vooskeem on järgmine:

2011021811430713.png
c













(
3) Eksperimentaalne lähtekood// päisefail#include // delay subfunction#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 kristallide initsialiseeriminevoid xtal_init( void ) { SLEEP &=~0x04; &
nbsp; //kõik millise voolu sisselülitaminewhile (!
(SLEEP & 0x40 )); //kristallostsillaator on sisse lülitatud ja stabiilne CLKCON &=~0x47; &






nbsp; //valige 32MHz kristallostsillaator SLEEP |=0x04; }//LED-i initsialiseeriminevoid led_init( void ) { P1SEL =0x00; &nbsp


; //P1 on tavaline I/O port P1DIR |=0x0F; //P1.0 P1.1 P1.2 P1.3 Välj und.








led1 = 0; led2 = 0; led3 = 0; led4 = 0; }//io ja välise katkestuse initsialiseeriminevoid io_init( void ) { P0INP &=~0X02;



/ /P0.1 on pull-up ja pull-down EA =1; //Total interrupt enable P0IE =1; &



nbsp; //P0 katkestuse lubamine PICTL |=0X09; //P0.1 pordi katkestuse lubamine, langeva serva vallandamine P0IFG &=~0x02







; //P0.1 katkestuse lipu tühjendamine 0 };//peafunktsioonvoid main( void ) { xtal_init(); led_init();








io_init();while ( 1 ); //vaata katkestust }//interrupt service subroutine#pragma vector = P0INT_VECTOR__interrupt void P0_ISR( void ) { EA =0;

/ / katkestuse väljalülitamine Viivitus





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

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


nbsp; //P0.1 katkestuse lipu tühjendamine 0 led1 = !led1; } P0IF =0; &

nbsp; //P0 katkestuse lipu tühjendamine 0 EA =1; &
nbsp; // katkestuse sisselülitamine }

  Esmalt initsialiseerime Unity Clocki: valime 32MHz kristallostsillaatori.

  Seejärel initsialiseerige valgusdioodid: määrake P1 üldotstarbeliseks I/O-pordiks, määrake väljundiks P1.0 ~ P1.3 suund ja seejärel lülitage 4 valgusdioodi välja.

  Seejärel konfigureerige asjakohased SFR-registrid väliste katkestuste jaoks ja lülitage katkestuse lubamine kõigil tasanditel sisse, mis hõlmab 3 SFR-i: EA, IEN1, PICTL (iga SFR-i üksikasjalik kirjeldus on esitatud " CC2430 Hiina kasutusjuhendis "):

     EA -- kogu katkestuse lubamine;

     IEN1.5 -- P0 katkestuse lubamine;

     PICTL.3 -- P0.1 pordi katkestuse lubamine;

     PICTL.0 -- P0.1 pordi sisendi langeva serva seadistamine katkestuse vallandamiseks.

  Seejärel kasutage katkestuse ootamiseks while(1) põhifunktsioonis.

CC2430 näpunäited
(1) Biti määramise süntaks Kokkuvõte
Väga sageli on meil vaja määrata väärtus (0 või 1) ühele bitile ühebaidises SFRis, et täpselt kontrollida riistvaraseadet.
  

M
õned SFR-id toetavad bitide adresseerimist, nagu TCON, P0 jne, sel ajal on biti määramine väga lihtne, küsige lihtsalt ioCC2430.h päisefaili SFR-i bitide juurdepääsu osa bitide määratlus võib olla:
P0_0 = 0; // P0 väärtuse 0 määramise esimene bit
P0_0 = 1; / / / / P0 väärtuse 1 määramise esimene bit
Siiski on SFR-id, mis ei
toeta bitide adresseerimist, nagu näiteks
Kuid mõned SFR-id
ei toeta bitiaadressi, nagu näiteks PICTL selles eksperimendis, kui tahate määrata ühele neist väärtust, on süntaks järgmine:
PICTL &= ~0x01; //määrata esimesele bitile väärtus 0
PICTL |= 0x01; //määrata esimesele bitile väärtus 1
Võite meeles pidada, et &
amp;= ~, |= ~, |= ~, |= ~,
|= P0_0
=
1; //määrata P0 esimesele bitile väärtus 1
. amp;= ~, |= need kaks tavalist biti määramise süntaksit.
(2) Katkestuse lubamise kokkuvõte
Kui programmis on kaasatud katkestus, tuleb see enne katkestuse käivitamist lubada.
  

C
51 katkestuse lubamise süsteem, selle hierarhiline struktuur on väga ilmne:
katkestuse ülemus: EA on ülemus, kes vastutab kogu katkestuse lubamise eest:
EA = 1;
katkestuse eraldamise kapten: järgmine on iga funktsionaalse komponendi (nagu P0, taimer 1 jne) lubamise kontroll, selline SFR üldiselt biti adresseeritav, nimetamine sisaldab tavaliselt IE (Interrupt Enable):
P0IE = 1;
katkestuse meeskonna
liikmed: eraldamine, kuid
programmikatkestamise
tõttu peab
katkestus
olema lubatud enne katkestuse vallandamist.

i
ga katkestuse meeskonnaliikmed: meeskond, kuid kuna iga funktsionaalne komponent sisaldab ka mitu katkestust, nii et viimane tase on iga katkestuse lubamise kontrolli jaoks, selline SFR ei ole üldiselt biti adresseeritav, nimetamine sisaldab üldiselt IE (Interrupt Enable) või IM (Interrupt Mask):
PICTL | = 0x01;
ei pea katkestuse SFR-i meelde jätma. Katkestuse SFR-e ei ole vaja meelde jätta, kui te mõistate hierarhiat ja konsulteerite nende kasutamisel käsiraamatuga või päisefailidega.
(3) Katkestusprogrammide kirjutamine
Katkestuste kasutamine programmis koosneb tavaliselt kahest osast: katkestuste teenindamise allprogrammi kirjutamine ja katkestuse lubamise avamine.

K
atkestuse lubamist on tutvustatud eespool, järgnevalt on lühike sissejuhatus katkestuse teenindamise allprogrammi koostamisse:
Kõigepealt tuleb määrata katkestusvektor, võib olla ioCC2430.h päisefailis Interrupt Vectors osa päringus, süntaks on järgmine:
# pragma vector = Interrupt Vectors
ja seejärel järgneb katkestuskäsitleja koostamine, struktuur on järgmine:
___
katkestus void Funktsiooni nimi (___)


k
atkestus void funktsioon nimi(void)
{
//on katkestus
//katkestuse käsitlemine
//katkestuse lipu tühjendamine 0
//välja lülitatud katkestus
}

III. Kokkuvõte

  Selles artiklis tutvustatakse CC2430-l põhinevat lihtsat välise katkestuse rakendamise meetodit, mille aluseks on katkestus, seejärel tutvustame veel ühte väga olulist moodulit - taimer. CC2430-l on kokku neli taimerit, mida võib jagada kolme kategooriasse: taimer 1, taimer 2, taimer 3/4 (3 ja 4 kasutamine sama põhiline). sama).


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




Eelmine: [Re-]Zigbee Journey (II): esimene CC2430 programm - LED-i vilkumise eksperiment
Järgmine: [Re-]Zigbee Journey (4): Mõned olulised CC2430 põhikatsed - taimeri katkestused
Kood taluniku võrgustik, ainult avaldatud praktika käigus, tekkinud tehnilised raskused, ärge eksitage teisi.
Sa pead sisse logima, enne kui saad tagasi postitada Logi sisse | Registreeru

S ee versioon integraalseid reegleid


KINNITUS: Kõik Code Farmeri poolt avaldatud tarkvara, programmeerimismaterjalid või artiklid on mõeldud ainult õppe- ja teadustööks; eespool nimetatud sisu ei tohi kasutada kaubanduslikel või ebaseaduslikel eesmärkidel, vastasel juhul kannavad kõik tagajärjed kasutajad ise. See sait teavet võrgu, autoriõiguse vaidlus ei ole midagi pistmist selle saidi. Te peate eespool nimetatud sisu täielikult eemaldama oma arvutist 24 tunni jooksul pärast allalaadimist. Kui teile meeldib programm, palun toetage ehtsat tarkvara, ostke registreerimine ja saada paremat ehtsat teenust. Kui esineb rikkumine, võtke meiega ühendust e-posti teel, et sellega tegeleda.

Mail To:help@itsvse.com

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

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

Kiire vastusTagasi ülesTagasi nimekirja