Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 7780|Odpowiedź: 0

Podróż Zigbee (4): Kilka ważnych podstawowych eksperymentów CC2430 – przerwanie timera

[Skopiuj link]
Opublikowano 30.10.2014 23:17:29 | | | |
1. Połączenie górnego i dolnego poziomu

W poprzednim artykule wspólnie dowiedzieliśmy się o implementacji prostych zewnętrznych przerwań. Teraz, gdy mamy praktyczne doświadczenie z przerwaniami, porozmawiajmy w tej sekcji o przerwaniach z timerem. CC2430 ma łącznie 4 timery, które można podzielić na 3 kategorie: timer 1, timer 2, timer 3/4 (użycie 3 i 4 jest takie samo).

Ponieważ autor również jest nowy w CC2430 i praktycznie nie ma praktycznego doświadczenia w projektach związanych z timerami, nie zamierzam (i nie mogę nic zrobić) szczegółowo analizować timera. Ten artykuł zawiera jedynie krótkie eksperymentalne wyjaśnienie zastosowania timera 1 w przerwaniach przelewu liczenia i nie wspomina o funkcjach przechwytywania wejść/porównania wyjść/PWM. Timer 2 i Timer 3/4 to tylko proste wprowadzenia funkcji. Gdy umiejętności autora osiągną pewien poziom napięcia, stanę na szczycie praktycznego doświadczenia Zigbee, by poprawić ten esej.

2. Timer 1

Timer 1 to 16-bitowy timer z modulacją szerokości timera/licznika/impulsu. Posiada 3 indywidualnie programowalne kanały do przechwytywania i wychodzenia wejściowych, z których każdy może być używany jako wyjście PWM lub jako czas brzegowy do przechwycenia sygnału wejściowego (informacje o tym, czym jest porównanie przechwytywania i wyjścia wejściowego oraz jak implementować wyjście PWM, czytelnicy mogą odwołać się do chińskiego podręcznika CC2430).

Timery mają bardzo ważną koncepcję:Tryb działania

Tryby pracy obejmują: tryb pracy swobodnej (Wolne przebieganie), tryb formy (modulo) oraz tryb dodatniego liczenia/odliczania (w górę-w dół)。

Poniżej znajduje się fragment chińskiego podręcznika CC2430 dotyczący wprowadzenia 3 trybów:



Porównując te trzy tryby, można zauważyć, że wartość przelewu trybu pracy swobodnej jest 0xFFFF niezmienna; Pozostałe dwa tryby pozwalają precyzyjnie kontrolować wartość przepełnienia timera poprzez przypisanie wartości T1CC0. W tym eksperymencie ta funkcja służy do wywołania przerwania co 1s przez timer przez konkretny T1CC0, aby precyzyjnie kontrolować interwał miganiań światła LED do 1s.

(1) Wprowadzenie do eksperymentu

W trybie modulo timera interwał światła LED jest precyzyjnie kontrolowany przez 1s, mianowicie: jasne 0,5s → ciemne 0,5s → jasne 0,5s → słabe 0,5s ...... → Światło 0,5 sekundy → ciemne 0,5 sekundy (czyli odstęp czasu od ciemnego do jasnego to 1 sekundy). Inwersja światła/ciemność uzyskuje się przez przerwania przepełnienia.

(2) Schemat przepływu programu

(3) Istotne obliczenia

Jak wspomniano wcześniej, status diody LED to: jasne 0,5 sekundy → ciemne 0,5 sekundy → jasne 0,5 sekundy → przyciemnione 0,5 sekundy ...... → 0,5s światło → 0,5s ciemne, i musi być zaimplementowane z przerwaniami przepełnienia, więc okres przelewu timera musi wynosić 0,5s. Aby to zrobić, należy obliczyć odpowiadającą wartość przepełnienia (tymczasowo ustawioną na N).

Częstotliwość zegara systemu jest wybierana jako 32MHz, a dana częstotliwość domyślnie wynosi 16MHz (oba są określane przez specjalne rejestry funkcji).CLKCONSzczegóły można znaleźć w chińskim podręczniku CC2430).

W Timer 1 ustaw jego przejście zegara na 128 dywizji.

Podsumowując, lista wygląda następująco:

Aby znaleźć N=62500, jego liczba szesnastkowa to 0xF424, czyli należy ustawić T1CC0H=0xF4, T1CC0L=0x24 .

(4) Kod źródłowy eksperymentalny i analiza/*
    Opis eksperymentu: Eksperyment Timer Timer1, przepełnienie licznika timera, LED1
*/

#include

#define prowadził1 P1_0         
#define LED2 P1_1         
#define LED3 P1_2         
#define LED4 P1_3         

/*系统时钟初始化
-------------------------------------------------------*/
pustkaxtal_init(pustka)
{
  SEN &= ~0x04;            //都上电
  podczas gdy(! (SEN &0x40));     //晶体振荡器开启且稳定
  CLKCON &= ~0x47;            Wybierz oscylator kryształowy 32MHz
  SEN |=0x04;
}

/*LED初始化
-------------------------------------------------------*/
pustkaled_init(pustka)
{
  P1SEL =0x00;            P1 to zwykły port I/O
  P1DIR |=0x0F;            P1.0 P1.1 P1.2 P1.3 wyjście
  
  led1 =1;                  //关闭所有LED
  led2 =1;
  led3 =1;
  led4 =1;
}

/*T1初始化
-------------------------------------------------------*/
pustkatimer1_init(pustka)
{
  EA=1;            //开总中断
  T1IE=1;           //开T1中断
  OVFIM=1;         //开T1溢出中断
  
  T1CC0L=0x24;      //溢出值低8位
  T1CC0H=0xF4;      //溢出值高8位
  
  T1CTL =0x0e;     128 crossover; tryb modulo (0x0000->T1CC0); Zacznij biec;
  T1IF=0;           Usuń znak przerwy  
}

/*主函数
-------------------------------------------------------*/
pustkamain(pustka)
{
  xtal_init();
  led_init();
  timer1_init();

  podczas gdy(1);            //等待溢出中断
}

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

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

OK, skompiluję program i debuguję online, LED1 na płycie deweloperskiej zgodnie z planem i wydaje się, że interwał to około 1 sekundy. Ale to nie wystarczy, by udowodnić sukces eksperymentu – jeśli można ściśle określić interwał jako 1, będzie idealny~ Włączyłem więc zegar WIN 7 (kliknij na czas po prawej stronie paska zadań). Patrząc na sekundową wskazówkę, kątem oka zauważył LED1. Efekt: w ciągu dwóch minut tempo obu jest praktycznie identyczne (ta precyzja jest do zniesienia~). Na tym etapie można powiedzieć, że eksperyment jest praktycznie zakończony, hehe~

3. Timer 2

Timer 2 jest również nazywanyTimer MAC, jest specjalnie zaprojektowany do obsługi protokołu śledzenia zdarzeń w IEEE 802.15.4 MAC. Timer posiada 8-cyfrowy licznik przepełnienia, który może służyć do zapisywania liczby zaliczonych cykli; Istnieje 16-bitowy rejestr przechwytu, który rejestruje dokładny moment, kiedy ramka zaczyna odbierać/wysyłać lub dokładny czas zakończenia transmisji. Zawiera także 16-bitowy rejestr porównawczy wyjść, który generuje różne sygnały sterujące poleceń (start accepting, start send itp.) do modułu bezprzewodowego w określonym czasie.

4. Timer 3/4

Timer 3/4 to 8-bitowy timer z funkcją timera/licznika/PWM. T3/T4 posiada 2 kanały porównawcze wyjść, z których każdy może być używany jako wyjście PWM.

5. Podsumowanie

Ta sekcja głównie uczy się metody przerwania przelewu licznika w timerze 1 oraz precyzyjnie kontroluje interwał światła LED w wysokości 1. Kilka innych timerów to tylko udar, a potem wrócę, żeby je dodać. W następnej sekcji przedstawimy komunikację portową CC2430.






Poprzedni:Podróż Zigbee (3): Kilka ważnych podstawowych eksperymentów CC2430 – zewnętrzne zakłócenia
Następny:Podróż Zigbee (5): Kilka ważnych podstawowych eksperymentów CC2430 – komunikacja szeregowa
Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com