架构师_程序员_码农网

K Hae salasana
Rekisteröidy

QQ登录

Vain yksi askel alkuun

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

[Käännä] Zigbee Journey (IV): Muutama tärkeä CC2430 peruskokeita - ajastin keskeyttää

[Kopioi linkki]
N 跳转到指定楼层
rakennuksen omistajalle
发表于 2014-10-30 23:17:29|只看该作者回帖奖励|Käänteinenselaus|Lukutila
I. Jatkoa edelliselle artikkelille...

  Edellisessä osassa opimme yhdessä yksinkertaisten ulkoisten keskeytysten toteuttamisesta. Kun meillä on käytännön kokemusta keskeytyksistä, käsittelemme tässä jaksossa ajastinkeskeytyksiä. CC2430:ssä on neljä ajastinta, jotka voidaan jakaa kolmeen luokkaan: Timer1, Timer2, Timer3/4 (3:n ja 4:n käyttö on sama).

  Koska kirjoittaja on myös vain koskettaa CC2430, projekti, johon liittyy ajastin kokemus on periaatteessa nolla, joten en aio (enkä voi auttaa) syvällinen analyysi ajastin. Tämä artikkeli koskee vain ajastimen 1 count overflow interrupt -käyttöä yksinkertaisen kokeellisen tutkimuksen tekemiseksi, sillä sen input capture / output comparison / PWM-toiminto on jätetty pois. Ajastin 2 ja ajastin 3/4 esitellään myös vain lyhyesti. Odotetaan, että kirjoittajan teho saavuttaa tietyn tulitason, ja sitten seisoo Zigbee-taistelukokemuksen korkeudessa tämän esseen parantamiseksi.

Ajastin 1

  Ajastin1 on 16-bittinen ajastin, jossa on ajastin / laskuri / pulssinleveysmodulaatiotoiminnot. Siinä on kolme erikseen ohjelmoitavaa tulon kaappaus- / lähtövertailukanavaa, joista kutakin voidaan käyttää PWM-lähtönä tai käyttää tulosignaalin reuna-ajan kaappaamiseen (lisätietoja siitä, mitä tulon kaappaus- / lähtövertailu on ja miten PWM-lähtöjen toteuttaminen toteutetaan, lukijat voivat tutustua CC2430: n kiinalaiseen käsikirjaan itse).

  Ajastimella on erittäin tärkeä käsite: toimintatila.

  Toimintatiloja ovat muun muassa: vapaa-ajo, modulo ja ylös-alas.

  Seuraavassa esitellään nämä kolme toimintatilaa CC2430:n kiinalaisesta käsikirjasta:

2011022119590527.jpg



  Verrattaessa näitä kolmea tilaa voidaan havaita, että: vapaasti toimivan tilan ylivuotoarvo on 0xFFFF, jota ei voi muuttaa; kun taas kahta muuta tilaa voidaan ohjata tarkasti antamalla arvo T1CC0:lle, jotta ajastimen ylivuotoarvoa voidaan ohjata tarkasti. Tässä kokeessa käytetään tätä ominaisuutta, jotta ajastin laukaisee keskeytyksen 1s välein tietyn T1CC0:n kautta, jotta LED:n 1s:n vilkkumisväliä voidaan ohjata tarkasti.

(1) Johdanto kokeeseen

  Ajastimen modulo-tilassa LEDin vilkkumisväliä ohjataan tarkasti 1s:n suuruiseksi, eli: valo 0,5s → pimeä 0,5s → valo 0,5s → pimeä 0,5s ....... → valo 0,5s → pimeä 0,5s (eli siirtymishetki pimeästä valoon on 1s). Valon/pimeän vaihtuminen tapahtuu ylivuotokeskeytyksellä.

(2) Ohjelman kulkukaavio

(3) Aiheeseen liittyvät laskelmat

  Kuten aiemmin mainittiin, LEDin tila on: kirkas 0,5s → tumma 0,5s → kirkas 0,5s → tumma 0,5s ...... → valo 0,5s → pimeä 0,5s, ja ne on saavutettava ylivuotokeskeytyksellä, joten ajastimen ylivuotojakson on oltava 0,5 s. Tätä varten on laskettava vastaava ylivuotoarvo (asetetaan väliaikaisesti arvoksi N).

  Järjestelmän kellotaajuudeksi on valittu 32 MHz, ja ajastimelle annettava kellotaajuus on oletusarvoisesti 16 MHz (molemmat määritetään erityisellä toimintorekisterillä CLKCON, joka löytyy CC2430:n kiinalaisesta käsikirjasta).

  Aseta ajastimen 1 kellotaajuudeksi 128 jakoa.

  Yhteenvetona kaava voi olla seuraava:

2011022120560133.jpg
c

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








(
4) kokeellinen lähdekoodi ja analyysi/* Kokeen kuvaus: Ajastin1 kokeilu, ajastimen laskennan ylivuoto, LED1 vilkkuu */ #include #define led1 P1_0 # define led2 P1_1 #define led3 P1_0 #define led3 P1_1

1 #define led3 P1_2 #define led4 P1_3 &





n bsp; /* järjestelmän kellon alustaminen-------------------------------------------------------*/void xtal_init( void ) { SLEEP &=~0x04;&
nbsp; // molempien virta päällewhile (!
(SLEEP & 0x40 )); //kideoskillaattori päällä ja vakaa CLKCON &=~0x47; &







nbsp; //valitaan 32 MHz:n kideoskillaattori SLEEP |=0x04; }/*LED:ien alustaminen-------------------------------------------------------*/void led_init( void ) { &
nbsp; P1SEL = 0x00; //P1 on normaali I/O-portti P1DIR |=0x0F; &

nbsp; //P1.0 P1.1 P1.2 P1.3 lähdöt led1 =1; &






nbsp; //Kytke kaikki LEDit pois päältä led2 =1; led3 =1; led4 =1; }/*T1 alustaminen---------------------------



- ---------------------------*/void timer1_init( void ) {EA=1; // Kytke päälle kokonaiskatkos &
nbsp; T1IE=1; // kytke T1-keskeytys päälleOVFIM=1; // kytke T1-ylivuoto päälle.



k eskeytysT1CC0L=0x24; //ylivuotoarvo low 8 bittiä T1CC0H=0xF4; //ylivuotoarvo high 8 bittiä &

nbsp; T1CTL =0x0e; //128 jakoa; modulo-tila (0x0000->T1CC0); käynnistä käynnissä;T1IF=0; &




nbsp; // tyhjennä keskeytyslippu }/* pääfunktio-------------------------------------------------------*/void main( void





) { xtal_init(); led_init(); timer1_init();while ( 1 ); &





nbsp; // odota ylivuotokeskeytystä }/*T1-päätepalvelun aliohjelma-------------------------------------------------------*/#pragma vector=T1_VECTOR__interrupt



v oid T1_ISR( void ) {EA=0; //off interrupt led1 = !


led1; //LEDit käännetäänEA=1; //Keskeytyksessä &nbsp

; T1CTL &=~0x10; // tyhjennä keskeytyslippu }

  OK, kääntää ohjelman ja online debuggaus, kehityslevyn LED1 vilkkuu odotetusti, tuntuu vilkkumisväli noin 1s. Mutta tämä ei riitä todistamaan kokeen onnistumista, jos voit tarkasti määrittää 1s-väli olisi täydellinen ~ joten avasin WIN 7-kellon (napsauta tehtäväpalkin oikealla puolella aika voi olla). Katsellessani sekuntiviisaria vilkaisin silmäkulmasta vilkkuvaa LED1:tä. Tulos on: kahdessa minuutissa näiden kahden tahti on periaatteessa sama (tämä tarkkuus voidaan sietää ~). Tässä vaiheessa kokeen voidaan sanoa olevan periaatteessa valmis, hehehe~

Kolmanneksi, ajastin 2

  Ajastin2, joka tunnetaan myös nimellä MAC-ajastin, on erityisesti suunniteltu tukemaan IEEE 802.15.4 MAC:n tapahtumaseurantaprotokollaa. Ajastimessa on 8-bittinen ylivuotolaskuri, jota voidaan käyttää tapahtuneiden syklien lukumäärän tallentamiseen; siinä on 16-bittinen kaappausrekisteri, jota käytetään tallentamaan tarkka aika, jolloin kehyksen aloitusrajausmerkki vastaanotetaan/lähetetään tai tarkka aika, jolloin lähetys on valmis; ja se sisältää myös 16-bittisen lähtövertailurekisterin, jota käytetään erilaisten komentoselektiivisten viestintäsignaalien tuottamiseen langattomalle moduulille tiettynä ajankohtana (vastaanoton aloittaminen, lähetyksen aloittaminen jne.).

Ajastin 3/4

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

V. Päätelmät

  Tässä jaksossa olemme oppineet menetelmän, jolla laskemme ajastimen 1 ylivuotokeskeytyksen, ja saavuttaneet LEDin vilkkumisvälin tarkan hallinnan 1 s. Käymme vain ohimennen läpi muut ajastimet ja palaamme sitten lisäämään ne myöhemmin. Seuraavassa jaksossa esittelemme CC2430-sarjaportin tiedonsiirron.






Edellinen: [Re-]Zigbee Journey (III): Muutama tärkeä CC2430-peruskokeilu - ulkoiset keskeytykset
Seuraava: [Uudelleen muutettu] Zigbee Journey (V): Muutamia tärkeitä CC2430-peruskokeiluja - Sarjaliikennettä
Code farmer -verkko, julkaistaan vain käytännön prosessissa, kohtasi teknisiä vaikeuksia, ei 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:50

Quick ReplyTakaisin alkuunTakaisin luetteloon