| 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:
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í:
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í  
; 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. |