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

Näkymä: 7780|Vastaus: 0

Zigbee Journey (4): Useita tärkeitä CC2430-peruskokeita – ajastimen keskeytys

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

Edellisessä artikkelissa opimme yhdessä yksinkertaisten ulkoisten keskeytysten toteutuksesta. Nyt kun meillä on käytännön kokemusta keskeytyksistä, puhutaanpa ajastinkeskeytyksistä tässä osiossa. CC2430:ssa on yhteensä 4 ajastinta, jotka voidaan jakaa kolmeen kategoriaan: ajastin 1, ajastin 2, ajastin 3/4 (3:n ja 4:n käyttö on sama).

Koska kirjoittaja on myös uusi CC2430:n parissa eikä hänellä käytännössä ole lainkaan käytännön kokemusta ajastimiin liittyvistä projekteista, en aio (enkä voi tehdä mitään) analysoida ajastinta perusteellisesti. Tämä artikkeli tarjoaa vain lyhyen kokeellisen tarkastelun ajastimen 1 käytöstä ylivuotokeskeytyksien laskemisessa, eikä mainitse sen syötteen kaappaus/tulostusvertailu/PWM-funktioita. Ajastin 2 ja Ajastin 3/4 ovat vain yksinkertaisia toimintojen esittelyjä. Kun kirjoittajan taidot saavuttavat tietyn tason, seison Zigbeen käytännön kokemuksen huipulla parantaakseni tätä esseetä.

2. Ajastin 1

Ajastin 1 on 16-bittinen ajastin, jossa on ajastin/laskurin/pulssin leveyden modulaatio. Siinä on kolme erikseen ohjelmoitavaa syötteen kaappaus-/lähtövertailukanavaa, joista kukin voidaan käyttää PWM-lähtönä tai reuna-ajana tulosignaalin kaappaamiseen (tietoa siitä, mitä syötteen kaappaus/lähtö vertailu on ja miten PWM-lähtö toteutetaan, voi lukea CC2430-kiinalaisesta käsikirjasta).

Ajastimilla on hyvin tärkeä käsite:Toimintatapa

Toimintatiloihin kuuluvat: Vapaa toimintatila (vapaajuoksu), homemoodi (modulo) ja positiivisen laskurin tila (ylös-alas)。

Seuraavassa on ote CC2430:n kiinalaisesta käsikirjasta kolmen tilan esittelyä varten:



Vertaillessa kolmea tilaa voidaan nähdä, että vapaan toimintatilan ylivuotoarvo on 0xFFFF muuttumaton; Kaksi muuta tilaa mahdollistavat ajastimen ylivuotoarvon tarkan hallinnan antamalla arvon T1CC0:lle. Tässä kokeessa käytetään tätä ominaisuutta käynnistääkseen keskeytyksen joka sekunti tietyn T1CC0:n ajastimen avulla, jotta LED-valon välkkymisväli voidaan säätää tarkasti 1 sekuntiin.

(1) Johdanto kokeeseen

Ajastimen modulo-tilassa LED-valon vilkkumisväli säädetään tarkasti 1:llä, nimittäin: kirkas 0,5s → tumma 0,5s → kirkas 0,5s → himmeät 0,5s ...... → Vaalea 0,5s → Dark 0,5s (eli aikaväli pimeästä valoon on 1s). Valo/pimeys -inversio saavutetaan ylivuotavilla keskeytyksillä.

(2) Ohjelman vuokaavio

(3) Asiaankuuluvat laskelmat

Kuten aiemmin mainittiin, LED-valon tila on: kirkas 0,5s → tumma 0,5s → kirkas 0,5s → himmeä 0,5s ...... → 0,5s valoa → 0,5s pimeää, ja se täytyy toteuttaa ylivuotokeskeytyksillä, joten ajastimen ylivuotojakson tulee olla 0,5s. Tätä varten vastaava ylivuotoarvo täytyy laskea (tilapäisesti asetettuna N:ksi).

Järjestelmän kellotaajuudeksi valitaan 32 MHz, ja annettu kellotaajuus on oletuksena 16 MHz (molemmat määräytyvät erityisten funktiorekisterien mukaan).CLKCONLisätietoja löytyy CC2430:n kiinan käsikirjasta.

Timer 1:lle aseta kellon crossover 128 divisioonaan.

Yhteenvetona lista on seuraava:

Löytääksesi N=62500, sen heksadesimaali on 0xF424, eli sinun täytyy asettaa T1CC0H=0xF4, T1CC0L=0x24 .

(4) Kokeellinen lähdekoodi ja analyysi/*
    Kokeen kuvaus: Timer Timer1 -koe, ajastimen määrän ylivuoto, LED1 vilkkuu
*/

#include

#define johti1 P1_0         
#define led2 P1_1         
#define johti 3 P1_2         
#define johti 4 P1_3         

/*系统时钟初始化
-------------------------------------------------------*/
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 =1;                  //关闭所有LED
  led2 =1;
  led3 =1;
  led4 =1;
}

/*T1初始化
-------------------------------------------------------*/
voidtimer1_init(void)
{
  EA=1;            //开总中断
  T1IE=1;           //开T1中断
  OVFIM=1;         //开T1溢出中断
  
  T1CC0L=0x24;      //溢出值低8位
  T1CC0H=0xF4;      //溢出值高8位
  
  T1CTL =0x0e;     128 crossover; modulomoodi (0x0000->T1CC0); Aloita juokseminen;
  T1IF=0;           Tyhjennä keskeytyskyltti  
}

/*主函数
-------------------------------------------------------*/
voidpää(void)
{
  xtal_init();
  led_init();
  timer1_init();

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

/*T1终端服务子程序
-------------------------------------------------------*/
#pragma vektori=T1_VECTOR
__interruptvoidT1_ISR(void)
{
  EA=0;               //关中断
  
  led1 = !led1;      //LED灯反转

  EA=1;               //开中断
  
  T1CTL &= ~0x10;     //清中断标志
}

OK, käännä ohjelma ja debuggaa verkossa, kehityskortin LED1 vilkkuu suunnitellusti, ja vilkkumisväli tuntuu olevan noin 1 sekuntia. Mutta tämä ei riitä todistamaan kokeen onnistumista, jos väli voidaan tarkasti määrittää 1s:ksi, se on täydellinen~ Joten laitoin WIN 7:n kellon päälle (klikkaa tehtäväpalkin oikealla puolella olevaa aikaa). Katsoessaan sekuntiviisaria hän näki silmänurkastaan LED1:n välkkymistä. Tulos: kahdessa minuutissa näiden kahden vauhti on käytännössä täsmälleen sama (tämä tarkkuus on siedettävä~). Tässä vaiheessa voidaan sanoa, että koe on käytännössä valmis, hehe~

3. Ajastin 2

Ajastin 2 tunnetaan myös nimelläMAC-ajastin, on erityisesti suunniteltu tukemaan tapahtumien seurantaprotokollaa IEEE 802.15.4 MAC:ssa. Ajastimessa on 8-numeroinen ylivuotolaskuri, jolla voidaan kirjata tapahtuneiden syklien määrä; On olemassa 16-bittinen tallennusrekisteri, joka tallentaa tarkan ajan, jolloin kehys alkaa vastaanottaa/lähettää tai milloin lähetys päättyy. Se sisältää myös 16-bittisen lähtövertailurekisterin, joka tuottaa erilaisia komentoporttisignaaleja (aloita hyväksyminen, aloita lähettäminen jne.) langattomalle moduulille tiettynä ajankohtana.

4. Ajastin 3/4

Ajastin 3/4 on 8-bittinen ajastin, jossa on ajastin/laskuri/PWM-toiminto. T3/T4:ssä on kaksi lähtövertailukanavaa, joista kumpaakin voidaan käyttää PWM-lähtönä.

5. Yhteenveto

Tämä osio oppii pääasiassa ajastin 1 ylivuotokeskeytyksen laskentamenetelmän ja toteuttaa LED-valon vilkkumisjakson tarkan 1 sekunnin hallinnan. Vain muutama muu ajastin on vain yksi ajatus, ja palaan lisäämään ne myöhemmin. Seuraavassa osiossa esittelemme CC2430-sarjaporttiviestinnän.






Edellinen:Zigbee Journey (3): Useita tärkeitä CC2430-peruskokeita – ulkoinen keskeytys
Seuraava:Zigbee Journey (5): Useita tärkeitä CC2430-peruskokeita – sarjaviestintä
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