架构师_程序员_码农网

K Hae salasana
Rekisteröidy

QQ登录

Vain yksi askel alkuun

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

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

[Kopioi linkki]
N 跳转到指定楼层
rakennuksen omistajalle
发表于 2014-10-30 23:16:46|只看该作者回帖奖励|Käänteinenselaus|Lukutila
I. Edellisestä seuraavaan jatkaminen

  Edellisellä luennolla tutustuimme CC2430-ohjelmien kehittämisen perusprosessiin IAR:ssä pienen kokeilun avulla, jossa oli yksinkertaisin LEDin vilkkuminen. Veitsi on ainakin teroitettu (vaikken olekaan kovin hyvä tässä teroituskivessä), ja nyt on aika alkaa teurastamaan bugeja :). Seuraavaksi opetellaan muutama perus CC2430-kokeilu. Jokainen pieni kokeiluja, jaettu "kokeellinen johdanto", "ohjelman vuokaavio", "kokeellinen lähdekoodi ja analyysi" kolme osaa kuvauksen.

  Tässä artikkelissa selitetään ulkoinen keskeytys.

Toiseksi, ulkoinen keskeytys(1) Johdanto kokeeseen

  Keskeytys on reaaliaikainen mikrokontrolleri sisäisten tai ulkoisten tapahtumien käsittelemiseksi, sisäinen mekanismi. Kun jonkinlainen sisäinen tai ulkoinen tapahtuma tapahtuu, mikrokontrollerin keskeytysjärjestelmä pakottaa suorittimen keskeyttämään suoritettavan ohjelman, mutta mennä keskeytystapahtuman käsittelyyn, keskeytyskäsittely on valmis ja palaa sitten ohjelman keskeyttämiseen, jatka suorittamista.

  Keskeytykset on jaettu ulkoisiin keskeytyksiin ja sisäisiin keskeytyksiin, CC2430 sisältää yhteensä 18 keskeytyslähdettä (erityinen keskeytyskuvaus ja keskeytysvektorin määritelmä, voit tutustua " CC2430 Kiinan käsikirjaan ").

  Katsotaanpa nyt tämän kehityslevyn piirikaaviota:

2011021811145691.jpg

  Kehityslevy on kytketty S1-painikkeeseen ja P0.1, vaikutus, jonka tämä kokeilu haluaa saavuttaa, on laukaista P0.1: n keskeytys painamalla näppäintä S1 ja sitten ohjata LED1-valoa / sammutusta keskeytyspalvelun aliohjelmassa.

(2) Kokeellinen periaate ja vuokaavio

  Kokeen vuokaavio on seuraava:

2011021811430713.png
c













(
3) Kokeellinen lähdekoodi// otsikkotiedosto#include // delay-alatoiminto#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 kiteen alustaminenvoid xtal_init( void ) { SLEEP &=~0x04; &
nbsp; //kaikki virrat päällewhile (!
(SLEEP & 0x40 )); //kideoskillaattori päällä ja vakaa CLKCON &=~0x47; &






nbsp; //Valitaan 32 MHz:n kideoskillaattori SLEEP |=0x04; }//LED:n alustaminenvoid led_init( void ) { P1SEL =0x00; &nbsp


; //P1 on normaali I/O-portti P1DIR |=0x0F; //P1.0 P1.1 P1.2 P1.3 Lähtö.








led1 = 0; led2 = 0; led3 = 0; led4 = 0; }//io ja ulkoisen keskeytyksen alustaminenvoid io_init( void ) { P0INP &=~0X02;



/ /P0.1:ssä on pull-up ja pull-down EA =1; //Kokonaan keskeytyksen aktivointi P0IE =1; &



nbsp; //P0 keskeytyksen aktivointi PICTL |=0X09; //P0.1 portin keskeytyksen aktivointi, laskevan reunan laukaisu P0IFG &=~0x02







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








io_init();while ( 1 ); //odota keskeytystä }//keskeytyspalvelun aliohjelma#pragma vector = P0INT_VECTOR__interrupt void P0_ISR( void ) { EA =0;

/ / keskeytyksen sammuttaminen Viive





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

nbsp; if ((P0IFG & 0x02 ) >0 ) //näppäinkeskeytys { P0IFG &=~0x02; &


nbsp; //P0.1 keskeytyslippu tyhjä 0 led1 = !led1; } P0IF =0; &

nbsp; //P0 keskeytyslippu tyhjä 0 EA =1; &
nbsp; // kytke keskeytys päälle }

  Alusta ensin Unity Clock: valitse 32 MHz:n kideoskillaattori.

  Alusta sitten LEDit: aseta P1 yleiskäyttöiseksi I/O-portiksi, aseta P1.0 ~ P1.3 suunta ulostuloksi ja sammuta sitten 4 LEDiä.

  Määritä sitten asiaankuuluvat SFR-rekisterit ulkoisia keskeytyksiä varten ja kytke keskeytyksen aktivointi päälle kaikilla tasoilla, joihin kuuluu 3 SFR-rekisteriä: EA, IEN1, PICTL (kunkin SFR-rekisterin yksityiskohtainen kuvaus on " CC2430 Chinese Manual " -julkaisussa):

     EA -- keskeytyksen kokonaisaktivointi;

     IEN1.5 -- P0-keskeytyksen aktivointi;

     PICTL.3 -- P0.1-portin keskeytyksen aktivointi;

     PICTL.0 -- asettaa P0.1 portin tulon laskevan reunan aiheuttamaan keskeytyslaukaisun.

  Odota keskeytystä while(1):n avulla pääfunktiossa.

CC2430-vihjeitä
(1) Bittimäärityksen syntaksi Yhteenveto
Hyvin usein meidän on annettava arvo (0 tai 1) yhden tavun SFR:ssä olevalle bitille, jotta voimme tarkasti ohjata laitteistolaitetta.
  

J
otkut SFR:t tukevat bittiosoitteita, kuten TCON, P0 jne., Tällä hetkellä bitin osoittaminen on hyvin yksinkertaista, kysy vain ioCC2430.h-otsikkotiedoston SFR Bit Access -osassa bitin määritelmä voi olla:
P0_0 = 0; // P0 ensimmäinen bitti arvon 0 osoittamisesta
P0_0 = 1; / / / / P0 ensimmäinen bitti arvon 1 osoittamisesta
On
kuitenkin olemassa SFR:iä, jotka eivät
tue bittiosoitteita, kuten
esim
.
Jotkut SFR:t
eivät
kuitenkaan
tue bittiosoitteistusta, kuten tässä kokeessa PICTL, kun haluat antaa arvon jollekin niistä, syntaksi on seuraava:
PICTL &= ~0x01; //antaa arvoksi 0 ensimmäiselle bitille
PICTL |= 0x01; //antaa arvoksi 1 ensimmäiselle bitille
Voit muistaa, että &
amp;= ~, |= ~, |= ~, |= ~,
|= P0_0
=
1; //antaa arvoksi 1 P0:n ensimmäiselle bitille
. amp;= ~, |= nämä kaksi yleistä bittimäärityssyntaksia.
(2) Keskeytyksen aktivointi Yhteenveto
Kun keskeytys on mukana ohjelmassa, se on aktivoitava ennen keskeytyksen laukeamista.
  

C
51-keskeytyksen mahdollistava järjestelmä, sen hierarkkinen rakenne on hyvin ilmeinen:
keskeytyspomo: EA on pomo, joka on vastuussa koko keskeytyksen mahdollistamisesta:
EA = 1;
keskeytys irrotus kapteeni: seuraava on kunkin toiminnallisen komponentin (kuten P0, ajastin 1 jne.) mahdollistava ohjaus, kuten SFR yleensä bittiosoitteellinen, nimeäminen sisältää yleensä IE (Interrupt Enable):
P0IE = 1;
keskeytysryhmän
jäsenet: irrotus, mutta
ohjelmankeskeytyksen
vuoksi
keskeytys
on otettava käyttöön ennen keskeytyksen laukaisemista.

k
ukin keskeytysryhmän jäsenet: tiimi, mutta koska jokainen toiminnallinen komponentti sisältää myös useita keskeytyksiä, joten viimeinen taso on kunkin keskeytyksen käyttöönoton ohjausta varten, tällainen SFR ei yleensä ole bittiosoitteistettavissa, nimitys sisältää yleensä IE (Interrupt Enable) tai IM (Interrupt Mask):
PICTL | = 0x01;
ei tarvitse tallentaa keskeytys-SFR:iä muistiin. Keskeytys-SFR:iä ei tarvitse tallentaa muistiin, kunhan ymmärrät niiden hierarkian ja katsot sitten käsikirjaa tai otsikkotiedostoja, kun käytät niitä.
(3) Keskeytysohjelmien kirjoittaminen
Keskeytysten käyttö ohjelmassa koostuu yleensä kahdesta osasta: keskeytyspalvelualiohjelman kirjoittamisesta ja keskeytyksen aktivoinnin avaamisesta.

K
eskeytyksen mahdollistaminen on esitelty edellä, seuraavassa on lyhyt johdanto keskeytyspalvelun aliohjelman valmisteluun:
Määritä ensin keskeytysvektori, voi olla ioCC2430.h-otsikkotiedostossa kyselyn Interrupt Vectors -osassa, syntaksi on seuraava:
# pragma vector = Interrupt Vectors
ja sitten seuraa keskeytyksen käsittelijän valmistelu, rakenne on seuraava:
___
keskeytys void Function Name (___)


i
nterrupt void function name(void)
{
//on interrupt
//interrupt handling
//interrupt flag clear 0
//off interrupt
}

III. Johtopäätös

  Tässä artikkelissa esitellään yksinkertainen ulkoisen keskeytyksen toteutusmenetelmä, joka perustuu CC2430: een, keskeytyksen perusteella, sitten esittelemme toisen erittäin tärkeän moduulin - ajastimen. CC2430: ssä on yhteensä neljä ajastinta, jotka voidaan jakaa kolmeen luokkaan: ajastin 1, ajastin 2, ajastin 3/4 (3 ja 4 saman perusosan käytöstä). sama).


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




Edellinen: [Re-]Zigbee Journey (II): ensimmäinen CC2430-ohjelma - LED vilkkuu kokeilu
Seuraava: [Re-]Zigbee Journey (4): Muutama tärkeä CC2430-peruskokeilu - ajastimen keskeytyksiä
Koodi maanviljelijäverkko, julkaistaan vain käytännön prosessissa, kohtasi teknisiä vaikeuksia, älä johda muita harhaan.
Sinun täytyy kirjautua sisään ennen kuin voit lähettää viestiä takaisin Kirjaudu sisään | Rekisteröidy

T ämä versio integraalisista säännöistä


VASTUUVAPAUSLAUSEKE: Kaikki Code Farmerin julkaisemat ohjelmistot, ohjelmointimateriaalit tai artikkelit on tarkoitettu käytettäväksi vain oppimis- ja tutkimustarkoituksiin; edellä mainittua sisältöä ei saa käyttää kaupallisiin tai laittomiin tarkoituksiin, muutoin kaikki seuraukset jäävät käyttäjien itsensä kannettaviksi. Tämän sivuston tiedot verkosta, tekijänoikeuskiistalla ei ole mitään tekemistä tämän sivuston kanssa. Sinun on poistettava edellä mainittu sisältö kokonaan tietokoneeltasi 24 tunnin kuluessa lataamisesta. Jos pidät ohjelmasta, tuet aitoa ohjelmistoa, osta rekisteröinti ja saat parempaa aitoa palvelua. Jos on olemassa rikkomuksia, ota meihin yhteyttä sähköpostitse, jotta voimme käsitellä sitä.

Sähköposti To:help@itsvse.com

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

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

Quick ReplyTakaisin alkuunTakaisin luetteloon