Ez a cikk egy tükör gépi fordítás, kérjük, kattintson ide, hogy ugorjon az eredeti cikkre.

Nézet: 7780|Válasz: 0

Zigbee Journey (4): Több fontos CC2430 alap kísérlet – időzítő megszakítás

[Linket másol]
Közzétéve 2014. 10. 30. 23:17:29 | | | |
1. A felső és alsó szintek összekapcsolása

Az előző cikkben együtt tanultunk az egyszerű külső megszakítások megvalósításáról. Most, hogy gyakorlati tapasztalatunk van a megszakításokkal, beszéljünk ebben a szakaszban az időzítő megszakításokról. A CC2430-nak összesen 4 időzítője van, amelyek három kategóriába oszthatók: 1-es időzítő, 2-es, 3/4-es időzítő (a 3-as és 4-es használata ugyanaz).

Mivel a szerző szintén új a CC2430-ban, és gyakorlatilag nulla gyakorlati tapasztalata nincs időzítőkkel kapcsolatos projektekben, nem szándékomban áll (és nem is tudok semmit tenni) alaposan elemezni az időzítőt. Ez a cikk csak rövid kísérleti áttekintést nyújt az 1-es időzítő használatáról a túlfolyó megszakítások számlálásában, és nem említi annak bemeneti rögzítési/kimeneti összehasonlítása/PWM függvényeit. A 2-es és 3/4-es időzítő csak egyszerű funkcióbevezetések. Miután a szerző képességei elérnek egy bizonyos szintet, Zigbee gyakorlati tapasztalatának csúcsán állok, hogy javítsam ezt az esszét.

2. Időzítő 1

Az 1-es időzítő egy 16 bites időzítő, időzítő/számláló/impulzusszélesség modulációval. Három külön programozható bemenet-rögzítési/kimeneti összehasonlító csatornája van, amelyek mindegyike használható PWM kimenetként vagy élidőként a bemeneti jel rögzítésére (a bemeneti rögzítési/kimeneti összehasonlításról és a PWM kimenet megvalósításáról az olvasók a CC2430 kínai kézikönyvhöz tekinthetők).

Az időzítőknek van egy nagyon fontos fogalma:Működési mód

Az üzemmódok a következők: Szabad működési mód (szabadon futó), molda mód (modulo) és Pozitív Számolás/Visszaszámlálás mód (Fel-le)。

Az alábbiakban egy részlet található a CC2430 kínai kézikönyvéből a három mód bevezetéséhez:



A három módmód összehasonlításakor látható, hogy a szabad működési mód túlcsordulás értéke 0xFFFF változatlan; A másik két mód lehetővé teszi az időzítő túlcsordulásának pontos szabályozását azáltal, hogy egy értéket rendelnek a T1CC0-hoz. Ez a kísérlet ezt a funkciót használja arra, hogy egy adott T1CC0-on keresztül 1 másodpercenként megszakítást indítson el az időzítő által, hogy pontosan szabályozzák a LED fény villogási intervallumát 1 másodpercig.

(1) Bevezetés a kísérlethez

Az időzítő modulo módjában a LED fény villogási intervallumát pontosan az 1-es fények szabályozzák, nevezetesen: világos 0,5s → sötét 0,5s → fényes 0,5s → halvány 0,5s ...... → Világos 0,5s → Sötét 0,5s (azaz a sötét és világos közötti időintervallum 1s). A világos/sötét inverziót túlcsorduló megszakítások érik el.

(2) Programáram

(3) Releváns számítások

Ahogy korábban említettük, a LED fény állapota: világos 0,5s → sötét 0,5s → világos 0,5s → halvány 0,5s ...... → 0,5s fény → 0,5s sötét, és túlcsordulás megszakításokkal kell megvalósítani, így az időzítő túlcsordulási ideje 0,5s kell, hogy legyen. Ehhez ki kell számítani a megfelelő túlfolyó értéket (ideiglenesen N-re állítva).

A rendszer órajel frekvenciája 32MHz-nek van kiválasztva, és a megadott órajel alapértelmezés szerint 16MHz (mindkettőt speciális függvényregiszterek határozzák meg).CLKCONRészletekért kérjük, tekintse meg a CC2430 kínai kézikönyvet.

Az 1-es időmérő esetében állítsuk be az óra átjátszását 128 divízióra.

Összefoglalva, a lista a következő:

Ahhoz, hogy megtaláljuk N=62500-at, annak hexadecimalája 0xF424, vagyis be kell állítani: T1CC0H=0xF4, T1CC0L=0x24 .

(4) Kísérleti forráskód és elemzés/*
    Kísérlet leírása: Timer Timer1 kísérlet, időzítő szám túlcsordulás, LED1 villogása
*/

#include

#define lead1 P1_0         
#define led2 P1_1         
#define lead3 P1_2         
#define lead4 P1_3         

/*系统时钟初始化
-------------------------------------------------------*/
Semmixtal_init(Semmi)
{
  ALVÁS &= ~0x04;            //都上电
  miközben(! (ALVÁS &0x40));     //晶体振荡器开启且稳定
  CLKCON &= ~0x47;            Válassz egy 32 MHz-es kristályoscillátort
  ALVÁS |=0x04;
}

/*LED初始化
-------------------------------------------------------*/
Semmiled_init(Semmi)
{
  P1SEL =0x00;            A P1 a normál I/O port
  P1DIR |=0x0F;            P1.0 P1.1 P1.2 P1.3 kimenet
  
  led1 =1;                  //关闭所有LED
  led2 =1;
  led3 =1;
  led4 =1;
}

/*T1初始化
-------------------------------------------------------*/
Semmitimer1_init(Semmi)
{
  EA=1;            //开总中断
  T1IE=1;           //开T1中断
  OVFIM=1;         //开T1溢出中断
  
  T1CC0L=0x24;      //溢出值低8位
  T1CC0H=0xF4;      //溢出值高8位
  
  T1CTL =0x0e;     128 crossover; modulo mód (0x0000->T1CC0); Kezdj el futni;
  T1IF=0;           Töröld a megszakító táblát  
}

/*主函数
-------------------------------------------------------*/
Semmimain(Semmi)
{
  xtal_init();
  led_init();
  timer1_init();

  miközben(1);            //等待溢出中断
}

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

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

Rendben, fordítsd le a programot és debugálj online, a fejlesztő panel LED1 villog, ahogy tervezték, és úgy érzem, a villogási intervallum körülbelül 1 másodperc. De ez nem elég a kísérlet sikerének bizonyításához, ha az intervallum szigorúan 1-nek lehet meghatározni, tökéletes lesz~ Ezért bekapcsoltam a WIN 7 óráját (kattints a feladatsáv jobb oldalán lévő időre). Miközben a második mutatót nézte, a szeme sarkából a LED1 villogását látta. Az eredmény: két percen belül a kettő tempója gyakorlatilag pontosan ugyanaz (ez a pontosság elviselhető~). Ezen a ponton a kísérlet gyakorlatilag befejezett, hehe~

3. Időzítő 2

A 2-es időzítőt más néven is hívjákMAC időzítő, kifejezetten az IEEE 802.15.4 MAC eseménykövető protokolljának támogatására tervezték. Az időzítő 8 jegyű túlcsordulás számlálóval rendelkezik, amellyel rögzítheti a bekövetkezett ciklusok számát; Van egy 16 bites rögzítő regiszter, amely pontosan rögzíti, mikor kezd el egy képkocka elkapni/küldeni, vagy pontosan mikor fejeződik be az adás. Emellett tartalmaz egy 16 bites kimeneti összehasonlító regisztert is, amely különböző parancskapus jeleket generál (indítás, küldés indítása stb.) a vezeték nélküli modul felé egy adott időpontban.

4. Időzítő 3/4

A 3/4-es időzítő egy 8 bites időzítő, időzítő/számláló/PWM funkcióval. A T3/T4-nek 2 kimeneti összehasonlító csatornája van, amelyek mindegyike PWM kimenetként használható.

5. Összegzés

Ez a rész főként az 1-es időzítő számlálási túlfolyó megszakításának módszerét tanulja, és megvalósítja a LED fény villogási intervallumának pontos irányítását 1s. Csak néhány másik időzítő csak egy húzás, és később visszajövök, hogy hozzáadjam őket. A következő részben bemutatjuk a CC2430 soros port kommunikációt.






Előző:Zigbee Journey (3): Több fontos CC2430 alapkísérlet – külső megszakítás
Következő:Zigbee Journey (5): Több fontos CC2430 alapkísérlet – sorozatos kommunikáció
Lemondás:
A Code Farmer Network által közzétett összes szoftver, programozási anyag vagy cikk kizárólag tanulási és kutatási célokra szolgál; A fenti tartalmat nem szabad kereskedelmi vagy illegális célokra használni, különben a felhasználók viselik az összes következményet. Az oldalon található információk az internetről származnak, és a szerzői jogi vitáknak semmi köze ehhez az oldalhoz. A fenti tartalmat a letöltés után 24 órán belül teljesen törölni kell a számítógépéről. Ha tetszik a program, kérjük, támogassa a valódi szoftvert, vásároljon regisztrációt, és szerezzen jobb hiteles szolgáltatásokat. Ha bármilyen jogsértés történik, kérjük, vegye fel velünk a kapcsolatot e-mailben.

Mail To:help@itsvse.com