Tämä artikkeli on konekäännöksen peiliartikkeli, klikkaa tästä siirtyäksesi alkuperäiseen artikkeliin.

Näkymä: 7368|Vastaus: 0

Zigbee Journey (3): Useita tärkeitä CC2430-peruskokeita – ulkoinen keskeytys

[Kopioi linkki]
Julkaistu 30.10.2014 23.16.46 | | | |
1. Ylä- ja alakerrosten yhdistäminen

Edellisellä luennolla tutustuimme IAR:n CC2430-ohjelman perusprosessiin yksinkertaisen LED-vilkkumiskokeen avulla. Veitsi on joka tapauksessa teroitettu (vaikka hiomakiveni ei ole hyvä), ja nyt aloitan hyönteisten teurastuksen :). Seuraavaksi opitaan muutama peruskoe CC2430:sta. Jokainen pieni koe on jaettu kolmeen osaan: "Kokeen johdanto", "Ohjelman kaavio" ja "Kokeellinen lähdekoodi ja analyysi".

Tämä artikkeli selittää ulkoisia keskeytyksiä.

2. Ulkoinen keskeytys(1) Johdanto kokeeseen

Keskeytykset ovat sisäinen mekanismi, jonka avulla mikrokontrollerit käsittelevät sisäisiä tai ulkoisia tapahtumia reaaliajassa. Kun sisäinen tai ulkoinen tapahtuma tapahtuu, mikrokontrollerin keskeytysjärjestelmä pakottaa suorittimen pysäyttämään suoritusohjelman ja käsittelemään keskeytystapahtuman.

Keskeytykset jaetaan ulkoisiin ja sisäisiin keskeytyksiin, ja CC2430 sisältää yhteensä 18 keskeytyslähdettä (tarkat keskeytyskuvaukset ja määritelmät keskeytysvektoreista katso "CC2430 Kiinan käsikirja》)。

Katsotaanpa nyt tämän kehityskortin piirikaaviota:

S1-painike on yhdistetty kehityskortin P0.1:een, ja tämän kokeen seurauksena se laukaisee P0.1:n keskeytyksen S1-painikkeen kautta ja ohjaa LED1:n päälle/pois -toimintoa keskeytyspalvelualaohjelmassa.

(2) Kokeellinen periaate ja vuokaavio

Kokeellinen kaavio on seuraava:


(3) Kokeellinen lähdekoodi//头文件
#include

//延时子函数
#defineled1 P1_0
#defineLED2 P1_1
#defineled3 P1_2
#defineled4 P1_3

voidViive(Allekirjoittamatonn)   
{
  Allekirjoittamatontt;
  for(tt =0; TT<N; tt++);
  for(tt =0; TT<N; tt++);
  for(tt =0; TT<N; tt++);
  for(tt =0; TT<N; tt++);
  for(tt =0; TT<N; tt++);
}

//32M晶振初始化
voidxtal_init(void)
{
  UNI &= ~0x04;            //都上电
  kun(! (UNI &0x40));     //晶体振荡器开启且稳定
  CLKCON &= ~0x47;           //Valitse 32MHz:n kideoskillaattori
  UNI |=0x04;
}

//LED灯初始化
voidled_init(void)
{
  P1SEL =0x00;         P1 on tavallinen I/O-portti
  P1DIR |=0x0F;         P1.0 P1.1 P1.2 P1.3 ulostulo
  
  led1 = 0;
  led2 = 0;
  led3 = 0;
  led4 = 0;
}

//io及外部中断初始化
voidio_init(void)
{
    P0INP &= ~0X02;   //P0.1有上拉、下拉

    EA =1;           //总中断使能
   
    P0IE =1;   //P0中断使能
   
    KUVA |=  0X09;   //P0.1口中断使能,下降沿触发
   
    P0IFG &= ~0x02;   //P0.1中断标志清0
};

//主函数
voidpää(void)   
{
  xtal_init();
  led_init();  
  io_init();

  kun(1);   //等待中断
}

//中断服务子程序
#pragma vektori = P0INT_VECTOR
__interrupt voidP0_ISR(void)
{
  EA =0;                        Portti keskeytyy  

  Viive(10000);  
  Viive(10000);
  Viive(10000);
  Viive(10000);
  Viive(10000);

  jos((P0IFG &0x02) >0)         //按键中断
  {
    P0IFG &= ~0x02;               //P0.1中断标志清0
    led1 = !led1;
  }
  P0IF =0;                       //P0中断标志清0

  EA =1;                        //开中断
}

Aloita järjestelmän kellotaajuus: valitse 32 MHz:n kideoskillaattori.

Sitten käynnistä LEDit: aseta P1 yleiseksi I/O-portiksi, aseta P1.0 ~ P1.3 -suunta ulostuloksi ja sammuta sitten 4 LED-valoa.

Seuraavaksi konfiguroi asianmukaiset SFR-rekisterit ulkoisille keskeytyksille siten, että keskeytykset sallitaan kaikilla tasoilla, mukaan lukien 3 SFR:ää:EAIEN1PICTL(Lisätietoja jokaisesta SFR:stä löytyyCC2430 Kiinan käsikirja》):

EA- Total interrupt enable;

    IEN1.5- P0-keskeytyksen mahdollistaminen;

    PICTL.3—— P0.1 porttikeskeytys aktivoitu;

    PICTL.0—— Aseta P0.1-portin sisääntulon pudotusreuna aiheuttamaan keskeytyksen laukaisun.

Sitten käytä while(1) pääfunktiossa ja odota keskeytystä.

CC2430-vinkit
(1) Bittijakosyntaksin yhteenveto
Monesti meidän täytyy määrittää bitti (0 tai 1) yhdelle SFR-tavulle, jotta laitteistoa voidaan hallita tarkasti.
On SFRTukibittien osoitusEsimerkiksi TCON, P0 jne., tällä hetkellä vastapisteiden määrittäminen on hyvin yksinkertaista, kysy vain bittimääritelmä SFR Bit Access -osiosta ioCC2430.h-otsikkotiedostosta:
P0_0 = 0; // määritetään 0 P0:n ensimmäiselle numerolle
P0_0 = 1; // anna arvoksi 1 P0:n ensimmäiselle numerolle  

Mutta jotkut SFR:t puuttuvatBittiosoitus ei ole tuettu, kuten tässä kokeessaPICTL, tässä vaiheessa haluat antaa arvon yhdelle niistä, syntaksi on seuraava:
PICTL &= ~0x01;   Anna ensimmäiselle numerolle arvo 0
PICTL |= 0x01;     Anna ensimmäiselle numerolle arvo 1

Voit muistaa&= ~|=Nämä kaksi yleisesti käytettyä bittimäärittelysyntaksia.
(2) Keskeytyksen mahdollistamisen yhteenveto
Kun ohjelmassa on keskeytys, se on otettava käyttöön ennen keskeytyksen käynnistymistä.
C51-keskeytyksen käyttöjärjestelmän hierarkia on hyvin ilmeinen:
Keskeytyspomo: EAon pomo, vastuullinenYleisetKeskeytyksen käyttöönotto:
EA = 1;

  Jokainen keskeytetty joukkueenjohtaja: Seuraava on jokaiselleToiminnalliset osat(kuten P0, ajastin 1 jne.), tällaiset SFR:t ovat yleensä bittiosoitettavia, ja nimi sisältää yleensä IE:n (Interrupt Enable):
P0IE = 1;

  Jokainen tiimin jäsen keskeytettiin: Joukkue Mutta koska jokaisessa ominaisuudessa on myös useita keskeytyksiä, viimeinen taso on tätä vartenJokainen keskeytysTämä SFR-tyyppi on yleensä bititön ja osoitekelvoton, ja sen nimessä on yleensä IE (Interrupt Enable) tai IM (Interrupt Mask):
PICTL |=0x01;

Ei tarvitse keskeyttää SFR:ää, vaan ymmärrä sen hierarkia ja käytä aikaa ohjekirjan tai otsikkotiedoston etsimiseen.
(3) Keskeyttää ohjelmien kirjoittaminen
Keskeytysten käyttö ohjelmassa koostuu yleensä kahdesta osasta: keskeytyspalvelun aliohjelman kirjoittamisesta ja keskeytyksen käyttöönoton avaamisesta. Keskeytysfunktio on esitelty yllä, ja seuraavassa on lyhyt johdanto keskeytyspalvelun aliohjelman kirjoittamiseen:
Määrittele ensinMurtovektori, jota voidaan hakea ioCC2430.h-otsikkotiedoston Keskeytysvektorit -osiossa seuraavalla syntaksilla:
#pragma vektori = keskeytysvektori

Kirjoita sitten keskeytyskäsittelijä heti perään, joka on rakennettu seuraavasti:
__interrupt void-funktion nimi (void)
  {
    //开中断
    //中断处理
    //中断标志清0
    //关中断
  }



3. Johtopäätös

Tässä artikkelissa esitellään yksinkertaisten ulkoisten keskeytysten toteutusmenetelmä, joka perustuu CC2430:een, ja keskeytysten perustan jälkeen esittelemme toisen erittäin tärkeän moduulin – ajastimet. CC2430:ssa on yhteensä 4 ajastinta, jotka voidaan jakaa kolmeen kategoriaan: ajastin 1, ajastin 2, ajastin 3/4 (3 ja 4 ovat käytännössä sama käyttötarkoitus).


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




Edellinen:Zigbee Journey (2): Ensimmäinen CC2430-ohjelma – LED-valon vilkkumiskoe
Seuraava:Zigbee Journey (4): Useita tärkeitä CC2430-peruskokeita – ajastimen keskeytys
Vastuuvapauslauseke:
Kaikki Code Farmer Networkin julkaisemat ohjelmistot, ohjelmamateriaalit tai artikkelit ovat tarkoitettu vain oppimis- ja tutkimustarkoituksiin; Yllä mainittua sisältöä ei saa käyttää kaupallisiin tai laittomiin tarkoituksiin, muuten käyttäjät joutuvat kantamaan kaikki seuraukset. Tämän sivuston tiedot ovat peräisin internetistä, eikä tekijänoikeuskiistat liity tähän sivustoon. Sinun tulee poistaa yllä oleva sisältö kokonaan tietokoneeltasi 24 tunnin kuluessa lataamisesta. Jos pidät ohjelmasta, tue aitoa ohjelmistoa, osta rekisteröityminen ja hanki parempia aitoja palveluita. Jos rikkomuksia ilmenee, ota meihin yhteyttä sähköpostitse.

Mail To:help@itsvse.com