Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 7780|Odpověď: 0

Zigbee Journey (4): Několik důležitých základních experimentů CC2430 – přerušení časovače

[Kopírovat odkaz]
Zveřejněno 30.10.2014 23:17:29 | | | |
1. Propojení horní a dolní úrovně

V předchozím článku jsme se společně učili o implementaci jednoduchých externích přerušení. Teď, když máme praktické zkušenosti s přerušeními, pojďme si v této části promluvit o časovačích přerušeních. CC2430 má celkem 4 časovače, které lze rozdělit do 3 kategorií: časovač 1, časovač 2, časovač 3/4 (použití 3 a 4 je stejné).

Protože autor je také nový v CC2430 a prakticky nemá žádné praktické zkušenosti s projekty s časovači, nemám v úmyslu (a nemohu nic dělat) časovač podrobně analyzovat. Tento článek poskytuje pouze stručný experimentální průzkum použití časovače 1 při přerušení počtu přetečení a nezmiňuje jeho funkce pro zachycení/porovnání výstupů/PWM. Časovač 2 a Časovač 3/4 jsou pouze jednoduché úvody funkcí. Poté, co autorovy dovednosti dosáhnou určité úrovně napětí, budu stát na vrcholu Zigbeeho praktických zkušeností, abych tuto esej vylepšil.

2. Časovač 1

Timer 1 je 16bitový časovač s modulací šířky časovače/čítače/pulzu. Má 3 samostatně programovatelné kanály pro zachycení/porovnání výstupů, z nichž každý může sloužit jako výstup PWM nebo jako edge time pro zachycení vstupního signálu (pro informace o tom, co je to porovnání vstupů a výstupů a jak implementovat výstup PWM, mohou čtenáři navštívit čínský manuál CC2430).

Časovače mají velmi důležitý koncept:Způsob provozu

Provozní režimy zahrnují: Volný provozní režim (Volný běh), mold mode (modulo) a režim pozitivního počítání/odpočítávání (nahoru-dolů)。

Následuje úryvek z čínského manuálu CC2430 pro zavedení 3 režimů:



Porovnáním těchto tří režimů lze vidět, že přetečení volného režimu je 0xFFFF neměnné; Další dva režimy umožňují přesnou kontrolu hodnoty přetečení časovače přiřazením hodnoty T1CC0. Tento experiment využívá tuto funkci k vyvolání přerušení každých 1s časovačem pomocí konkrétního T1CC0, aby přesně kontroloval interval blikání LED světla na 1s.

(1) Úvod do experimentu

V režimu modulo časovače je interval blikání LED světla přesně řízen jednotkami, konkrétně: jasných 0,5 s → tmavých 0,5 s → jasných 0,5 s → tlumených 0,5 s ...... → Světlé 0,5 s → Tmavé 0,5 s (tj. časový interval od tmy ke světlu je 1s). Inverze světla/tmy je dosažena přetečením přetížením.

(2) Programový diagram

(3) Relevantní výpočty

Jak již bylo zmíněno, stav LED světla je: jasných 0,5 s → tmavých 0,5 s → jasných 0,5 s → tlumených 0,5 s ...... → 0,5 s světla → 0,5s tmy a musí být implementováno s přepadovými přerušeními, takže doba přetečení časovače musí být 0,5 s. K tomu je třeba vypočítat odpovídající přetečení (dočasně nastaveno na N).

Systémová frekvence je zvolena jako 32MHz a daná frekvence je výchozí 16MHz (obě frekvence jsou určeny speciálními funkčními registry).CLKCONPro podrobnosti se prosím podívejte do čínského manuálu CC2430).

U Timer 1 nastavte jeho časový crossover na 128 divizí.

Shrnuto, seznam je následující:

Pro nalezení N=62500 je jeho hexadecimální číslo 0xF424, tedy je třeba nastavit T1CC0H=0xF4, T1CC0L=0x24 .

(4) Experimentální zdrojový kód a analýza/*
    Popis experimentu: Experiment Timer Timer1, přetečení časovače, blikání LED1
*/

#include

#define vedl1 P1_0         
#define vedl2 P1_1         
#define vedení3 P1_2         
#define Led4 P1_3         

/*系统时钟初始化
-------------------------------------------------------*/
prázdnotaxtal_init(prázdnota)
{
  SPÁT &= ~0x04;            //都上电
  zatímco(! (SPÁT &0x40));     //晶体振荡器开启且稳定
  CLKCON &= ~0x47;            Vyberte krystalový oscilátor s frekvencí 32 MHz
  SPÁT |=0x04;
}

/*LED初始化
-------------------------------------------------------*/
prázdnotaled_init(prázdnota)
{
  P1SEL =0x00;            P1 je běžný I/O port
  P1DIR |=0x0F;            P1.0 P1.1 P1.1 P1.2 P1.3 výstup
  
  led1 =1;                  //关闭所有LED
  led2 =1;
  led3 =1;
  led4 =1;
}

/*T1初始化
-------------------------------------------------------*/
prázdnotatimer1_init(prázdnota)
{
  EA=1;            //开总中断
  T1IE=1;           //开T1中断
  OVFIM=1;         //开T1溢出中断
  
  T1CC0L=0x24;      //溢出值低8位
  T1CC0H=0xF4;      //溢出值高8位
  
  T1CTL =0x0e;     128 crossover; modulo režim (0x0000->T1CC0); Začni utíkat;
  T1IF=0;           Odstraňte přerušovací ceduli  
}

/*主函数
-------------------------------------------------------*/
prázdnotamain(prázdnota)
{
  xtal_init();
  led_init();
  timer1_init();

  zatímco(1);            //等待溢出中断
}

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

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

OK, zkompiluj program a debuguj online, LED1 na vývojové desce bliká podle plánu a zdá se, že interval blikání je asi 1 s. Ale to nestačí k ověření úspěchu experimentu, pokud lze interval přesně určit jako 1, bude to perfektní~ Tak jsem zapnul hodiny WIN 7 (klikněte na čas na pravé straně panelu). Při pohledu na sekundovou ručičku zahlédl koutkem oka blikání LED1. Výsledek: během dvou minut je tempo obou v podstatě stejné (tato přesnost je snesitelná~). V tuto chvíli lze říci, že experiment je v podstatě dokončen, hehe~

3. Časovač 2

Časovač 2 se také nazýváMAC časovač, je speciálně navržen pro podporu protokolu sledování událostí v IEEE 802.15.4 MAC. Časovač má 8místný přetečení počítadlo, které lze použít k zaznamenání počtu uplynulých cyklů; Existuje 16bitový registr pro zachycení, který zaznamenává přesný čas, kdy rámec začne přijímat nebo odesílat, nebo přesný čas dokončení přenosu. Obsahuje také 16bitový registr pro porovnání výstupů, který generuje různé příkazové signály (start accepting, start send atd.) do bezdrátového modulu v určitém čase.

4. Časovač 3/4

Timer 3/4 je 8bitový časovač s funkcí časovače/čítače/PWM. T3/T4 má 2 kanály pro porovnání výstupů, z nichž každý může sloužit jako výstup PWM.

5. Závěr

Tato sekce se hlavně učí metodu přerušení přetečení počítání časovače 1 a realizuje přesné řízení intervalu blikání LED světel 1 sekundy. Jen pár dalších časovačů je jen mrtvice a později je přidám později. V následující části představíme komunikaci CC2430 na sériovém portu.






Předchozí:Zigbee Journey (3): Několik důležitých základních experimentů CC2430 – vnější přerušení
Další:Zigbee Journey (5): Několik důležitých základních experimentů CC2430 – sériová komunikace
Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com