架构师_程序员_码农网

U Získání hesla
Registrace

QQ登录

Stačí jeden krok, abyste mohli začít

Vyhledávání
Zobrazení:5109|Odpověď: 0
打印 上一主题 下一主题

[Translate] Zigbee Journey (IV): Několik důležitých základních experimentů s CC2430 - přerušení časovače

[Kopírovat odkaz]
V 跳转到指定楼层
majiteli budovy
发表于 2014-10-30 23:17:29|只看该作者回帖奖励|Reverzníprocházení|Režim čtení
I. Pokračování předchozího článku

  V předchozím díle jsme se společně seznámili s implementací jednoduchých externích přerušení. Po praktických zkušenostech s přerušeními se v této části budeme zabývat přerušeními časovačů. CC2430 má 4 časovače, které lze rozdělit do 3 kategorií: Timer1, Timer2, Timer3/4 (použití 3 a 4 je stejné).

  Vzhledem k tomu, že autor si CC2430 také teprve osahává, zkušenosti s projektem zahrnujícím časovače jsou v podstatě nulové, proto se nehodlám (a ani nemohu pomoci) časovačem hlouběji zabývat. Tento článek pouze o použití přerušení časovače 1 count overflow k jednoduchému experimentálnímu zkoumání, pro jeho zachycení vstupu/porovnání výstupu/PWM funkce je vynechán. Časovač 2 a časovač 3/4 jsou také představeny jen stručně. Čeká se, až autorův výkon dosáhne určité úrovně ohně, a pak se postaví do výšky bojových zkušeností Zigbee, aby tuto esej vylepšil.

Časovač 1

  Timer1 je 16bitový časovač s funkcemi časovače/počítače/modulace šířky impulzu. Má tři individuálně programovatelné kanály pro zachycení/porovnání vstupů, z nichž každý lze použít jako výstup PWM nebo použít k zachycení času hrany vstupního signálu (více informací o tom, co je to zachycení/porovnání vstupů a jak implementovat výstupy PWM, si čtenáři mohou sami vyhledat v čínské příručce CC2430).

  Časovač má velmi důležitý pojem: provozní režim.

  Mezi provozní režimy patří: volný chod, modulo a nahoru-dolů.

  Následuje představení těchto tří režimů z čínské příručky CC2430:

2011022119590527.jpg



  Při porovnání těchto tří režimů je vidět, že: hodnota přetečení v režimu volného běhu je 0xFFFF, kterou nelze měnit; zatímco ostatní dva režimy lze přesně řídit přiřazením hodnoty T1CC0, aby bylo možné přesně řídit hodnotu přetečení časovače. Tento experiment využívá této funkce k tomu, aby časovač spouštěl přerušení každou 1s prostřednictvím specifické hodnoty T1CC0, a přesně tak řídil interval blikání LED v délce 1s.

(1) Úvod k experimentu

  V režimu modulo časovače je interval blikání LED přesně řízen tak, aby byl 1s, tj. světlo 0,5s → tma 0,5s → světlo 0,5s → tma 0,5s ....... → světlo 0,5s → tma 0,5s (tj. okamžik přechodu ze tmy do světla je 1s). Přechod světlo/tma je realizován přerušením přetečení.

(2) Blokové schéma programu

(3) Související výpočty

  Jak již bylo uvedeno, stav LED diody je: světlá 0,5s → tmavá 0,5s → světlá 0,5s → tmavá 0,5s ....... → světlý 0,5s → tmavý 0,5s, a je třeba dosáhnout přerušení přetečení, takže perioda přetečení časovače musí být 0,5 s. Za tímto účelem je třeba vypočítat odpovídající hodnotu přetečení (dočasně nastavenou na N).

  Systémová hodinová frekvence je zvolena 32 MHz a hodinová frekvence poskytovaná časovači je ve výchozím nastavení 16 MHz (obojí se konfiguruje pomocí speciálního funkčního registru CLKCON, který najdete v čínské příručce CC2430).

  Pro časovač 1 nastavte jeho hodinovou frekvenci na 128 dělení.

  Shrnuto, vzorec může být následující:

2011022120560133.jpg
c

  Zjistěte N = 62500, jeho hexadecimální hodnota je 0xF424, to znamená, že musíte nastavit T1CC0H = 0xF4, T1CC0L = 0x24 to je .








(
4) zdrojový kód experimentu a analýza/* Popis experimentu: Experiment s časovačem1, přetečení počtu časovačů, blikání LED1 */ #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; /* inicializace systémových hodin-------------------------------------------------------*/void xtal_init( void ) { SLEEP &=~0x04;&
nbsp; // obě napájeníwhile (!
(SLEEP & 0x40 )); //krystalický oscilátor zapnut a stabilní CLKCON &=~0x47; & nbsp







nbsp; //zvolte 32MHz krystalový oscilátor SLEEP |=0x04; }/*Inicializace LED-------------------------------------------------------*/void led_init( void ) { &
nbsp; P1SEL = 0x00; //P1 je normální I/O port P1DIR |=0x0F; &

nbsp; //P1.0 P1.1 P1.2 P1.3 výstupy led1 =1; &






nbsp; //Vypnutí všech LEDl ed 2 = 1; led3 =1; led4 =1; }/*Inicializace T1---------------------------



- ---------------------------*/void timer1_init( void ) {EA=1; // zapnout celkové přerušení &
nbsp; T1IE=1; // zapnout přerušení T1OVFIM=1; // zapnout přetečení T1



p řerušeníT1CC0L=0x24; // hodnota přetečení nízká 8 bitů T1CC0H=0xF4; // hodnota přetečení vysoká 8 bitů &

nbsp; T1CTL =0x0e; //128 dělení; režim modulo (0x0000->T1CC0); spuštění běhu;T1IF=0; &




nbsp; // vymazat příznak přerušení }/* hlavní funkce-------------------------------------------------------*/void main( void





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





nbsp; //čekání na přerušení přetečením }/*Podprogram obsluhy terminálu T1-------------------------------------------------------*/#pragma vector=T1_VECTOR__interrupt



v oid T1_ISR( void ) {EA=0; //vypnout přerušení led1 = !


led1; //LED obráceněEA=1; //Přerušení &nbsp

; T1CTL &=~0x10; //vymaž příznak přerušení }

  OK, zkompilovat program a online ladění, vývojová deska na LED1 bliká nahoru podle očekávání, cítit interval blikání asi 1s. Ale to nestačí k prokázání úspěšnosti experimentu, pokud můžete striktně určit interval 1s by bylo perfektní ~ tak jsem otevřel WIN 7 hodiny (klikněte na pravé straně hlavního panelu čas může být). Při sledování vteřinové ručičky jsem se koutkem oka podíval na blikající LED1. Výsledek: za dvě minuty je jejich tempo v podstatě totožné (tuto přesnost lze tolerovat ~). V tuto chvíli lze říci, že experiment je v podstatě dokončen, hehehe~

Za třetí, časovač 2

  Časovač 2, známý také jako časovač MAC, je speciálně navržen pro podporu protokolu sledování událostí v MAC IEEE 802.15.4. Časovač má 8bitový čítač přetečení, který lze použít k záznamu počtu cyklů, které proběhly; má 16bitový registr zachycení, který se používá k záznamu přesného času, kdy je přijat/vyslán oddělovač začátku rámce, nebo přesného času, kdy je dokončen přenos; a obsahuje také 16bitový výstupní srovnávací registr, který se používá ke generování různých příkazově selektivních komunikačních signálů do bezdrátového modulu v určitém čase (začátek příjmu, začátek vysílání atd.).

Časovač 3/4

  Časovač 3/4 je 8bitový časovač s funkcemi časovače/počítače/PWM. t3/t4 má dva výstupní srovnávací kanály, z nichž každý lze použít jako výstup PWM.

V. Závěr

  V této části jsme se naučili metodu počítání přerušení přetečení časovače 1 a dosáhli jsme přesného řízení intervalu blikání LED 1 s. Ostatní časovače jen letmo projdeme a později se k jejich doplnění vrátíme. V další části se seznámíme s komunikací přes sériový port CC2430.






Předchozí: [Re-]Cesta za Zigbee (III): Několik důležitých základních experimentů s CC2430 - externí přerušení
Další: [Znovu] Zigbee Journey (V): Několik důležitých základních experimentů s CC2430 - Sériová komunikace
Code farmer network, zveřejněno pouze v procesu praxe, narazilo na technické potíže, neuvádí ostatní v omyl.
Před odesláním příspěvku se musíte přihlásit Přihlásit se | Registrovat se

T ato verze integrálních pravidel


VYLOUČENÍ: Veškerý software, programové materiály nebo články publikované Code Farmerem jsou omezeny pouze na použití pro studijní a výzkumné účely; výše uvedený obsah nesmí být používán ke komerčním nebo nelegálním účelům, jinak veškeré následky ponesou sami uživatelé. Tyto stránky informace ze sítě, spor o autorská práva nemá s těmito stránkami nic společného. Výše uvedený obsah musíte do 24 hodin od stažení kompletně odstranit z počítače. Pokud se vám program líbí, podpořte prosím originální software, zakupte si registraci a získejte lepší originální služby. Pokud dojde k porušení práv, kontaktujte nás prosím e-mailem, abychom to mohli řešit.

Mail To:help@itsvse.com

QQ| ( 鲁ICP备14021824号-2)|Mapa stránek

GMT+8, 2024-9-17 14:50

Rychlá odpověďZpět na začátekZpět na seznam