架构师_程序员_码农网

N Odzyskaj hasło
Zarejestruj się

QQ登录

Wystarczy jeden krok, aby rozpocząć

Wyszukiwanie
Wyświetl:5109|Odpowiedź: 0
打印 上一主题 下一主题

[ Tłumacz] Zigbee Journey (IV): Kilka ważnych eksperymentów z CC2430 - przerwanie timera

[ Kopiuj link]
P 跳转到指定楼层
właściciela budynku
发表于 2014-10-30 23:17:29|只看该作者回帖奖励 | Odwróćprzeglądanie|Tryb odczytu
I. Kontynuacja poprzedniego artykułu

  W poprzedniej części poznaliśmy implementację prostych przerwań zewnętrznych. Po zdobyciu praktycznego doświadczenia z przerwaniami, w tej sekcji omówimy przerwania timerów. CC2430 ma 4 timery, które można podzielić na 3 kategorie: Timer1, Timer2, Timer3/4 (użycie 3 i 4 jest takie samo).

  Ponieważ autor również dopiero dotyka CC2430, projekt obejmujący doświadczenie timera jest w zasadzie zerowy, więc nie zamierzam (i nie mogę pomóc) w dogłębnej analizie timera. Ten artykuł dotyczy tylko użycia przerwania przepełnienia timera 1 w celu przeprowadzenia prostej eksploracji eksperymentalnej, ponieważ jego funkcja przechwytywania wejścia / porównania wyjścia / PWM została pominięta. Timer 2 i Timer 3/4 są również wprowadzone tylko krótko. Czekam, aż moc autora osiągnie pewien poziom ognia, a następnie stanie na wysokości bojowego doświadczenia Zigbee, aby ulepszyć ten esej.

Timer 1

  Timer1 to 16-bitowy timer z funkcjami timera/licznika/modulacji szerokości impulsu. Posiada trzy indywidualnie programowalne kanały przechwytywania wejścia/porównywania wyjścia, z których każdy może być używany jako wyjście PWM lub używany do przechwytywania czasu zbocza sygnału wejściowego (aby uzyskać więcej informacji na temat tego, czym jest przechwytywanie wejścia/porównywanie wyjścia i jak zaimplementować wyjścia PWM, czytelnicy mogą samodzielnie zapoznać się z chińską instrukcją CC2430).

  Timer ma bardzo ważną koncepcję: tryb pracy.

  Tryby pracy obejmują: pracę swobodną, modulo i up-down.

  Poniżej znajduje się wprowadzenie do tych trzech trybów z chińskiej instrukcji obsługi CC2430:



  Porównując te trzy tryby, można zauważyć, że: wartość przepełnienia w trybie swobodnym wynosi 0xFFFF i nie można jej zmienić; podczas gdy pozostałe dwa tryby można dokładnie kontrolować, przypisując wartość do T1CC0 w celu precyzyjnego kontrolowania wartości przepełnienia timera. W tym eksperymencie wykorzystano tę funkcję, aby timer wyzwalał przerwanie co 1 s za pośrednictwem określonej wartości T1CC0, aby precyzyjnie kontrolować interwał migania diody LED wynoszący 1 s.

(1) Wprowadzenie do eksperymentu

  W trybie modulo timera, interwał migania diody LED jest precyzyjnie kontrolowany i wynosi 1s, tj.: jasny 0,5s → ciemny 0,5s → jasny 0,5s → ciemny 0,5s ...... → jasny 0,5s → ciemny 0,5s (tj. moment przejścia z ciemności do światła wynosi 1s). Odwrócenie jasności/ciemności jest realizowane przez przerwanie przepełnienia.

(2) Schemat blokowy programu

(3) Powiązane obliczenia

  Jak wspomniano wcześniej, stan diody LED to: jasny 0.5s → ciemny 0.5s → jasny 0.5s → ciemny 0.5s ...... → jasny 0,5s → ciemny 0,5s i muszą być osiągnięte z przerwaniem przepełnienia, więc okres przepełnienia timera musi wynosić 0,5s. W tym celu należy obliczyć odpowiednią wartość przepełnienia (tymczasowo ustawioną na N).

  Częstotliwość zegara systemowego jest wybrana jako 32 MHz, a częstotliwość zegara dostarczana do timera wynosi domyślnie 16 MHz (oba są konfigurowane przez specjalny rejestr funkcji CLKCON, który można znaleźć w chińskiej instrukcji obsługi CC2430).

  Dla timera 1 należy ustawić częstotliwość zegara na 128 podziałów.

  Podsumowując, formuła może wyglądać następująco:

2011022120560133.jpg
c

  Dowiedz się N = 62500, jego szesnastkowy to 0xF424, czyli musisz ustawić T1CC0H = 0xF4, T1CC0L = 0x24, czyli .








(
4) eksperymentalny kod źródłowy i analiza/* Opis eksperymentu: eksperyment z timerem1, przepełnienie licznika timera, miganie diody LED1 */ #include #define led1 P1_0 #define led2 P 1_1 #define led3 P1_0 #define led3 P1_1

1 #define led3 P1_2 #define led4 P1_3 &





n bsp; /* inicjalizacja zegara systemowego-------------------------------------------------------*/void xtal_init( void ) { SLEEP &=~0x04;&
nbsp; // oba włączają sięwhile (!
(SLEEP & 0x40 )); //oscylator krystaliczny włączony i stabilny CLKCON &=~0x47; &







nbsp; //wybór oscylatora kwarcowego 32MHz SLEEP |=0x04; }/*Inicjalizacja diod LED-------------------------------------------------------*/void led_init( void ) { &
nbsp; P1SEL = 0x00; //P1 jest normalnym portem I/O P1DIR |=0x0F; &

nbsp; //P1.0 P1.1 P1.2 P1.3 wyjścia led1 =1; &






nbsp; //Wyłącz wszystkie diody led2 =1; led3 =1; led4 =1; }/*Inicjalizacja timera T1---------------------------



- ---------------------------*/void timer1_init( void ) {EA=1; //włącz przerwanie całkowite &
nbsp; T1IE=1; // włączenie przerwania T1OVFIM=1; // włączenie przepełnienia T1


T
1CC0L=0x24; //wartość przepełnienia niska 8 bitówT1CC0H=0xF4; //wartość przepełnienia wysoka 8 bitów &

nbsp; T1CTL =0x0e; //128 podziałów; tryb modulo (0x0000->T1CC0); rozpoczęcie pracy;T1IF=0; &




nbsp; // wyczyść flagę przerwania }/* główna funkcja-------------------------------------------------------*/void main( void





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





nbsp; //czekaj na przerwanie przepełnienia }/*Podprogram obsługi terminala T1-------------------------------------------------------*/#pragma vector=T1_VECTOR__interrupt



v oid T1_ISR( void ) {EA=0; //wyłącz przerwanie led1 = !


led1; //LEDs reversedEA=1; //On interrupt &nbsp

; T1CTL &=~0x10; //wyczyść flagę przerwania }

  OK, kompilacja programu i debugowanie online, płytka rozwojowa na LED1 miga zgodnie z oczekiwaniami, czuć interwał migania około 1s. Ale to nie wystarczy, aby udowodnić sukces eksperymentu, jeśli można rygorystycznie określić interwał 1s byłby idealny ~ więc otworzyłem zegar WIN 7 (kliknij po prawej stronie paska zadań czas może być). Obserwując sekundnik, kątem oka zerknąłem na migającą diodę LED1. Wynik jest następujący: w ciągu dwóch minut tempo obu jest w zasadzie identyczne (tę dokładność można tolerować ~). W tym momencie eksperyment można uznać za zakończony, hehe~.

Po trzecie, Timer 2

  Timer2, znany również jako timer MAC, został specjalnie zaprojektowany do obsługi protokołu śledzenia zdarzeń w IEEE 802.15.4 MAC. Timer ma 8-bitowy licznik przepełnienia, który może być używany do rejestrowania liczby cykli, które wystąpiły; ma 16-bitowy rejestr przechwytywania, który służy do rejestrowania dokładnego czasu odebrania / wysłania ogranicznika początku ramki lub dokładnego czasu zakończenia transmisji; a także zawiera 16-bitowy wyjściowy rejestr porównawczy, który służy do generowania różnych selektywnych sygnałów komunikacyjnych do modułu bezprzewodowego w określonym czasie (rozpoczęcie odbierania, rozpoczęcie nadawania itp.).

Timer 3/4

  Timer 3/4 to 8-bitowy zegar z funkcjami timera/licznika/PWM. t3/t4 ma dwa wyjściowe kanały porównania, z których każdy może być używany jako wyjście PWM.

V. Podsumowanie

  W tej sekcji poznaliśmy metodę liczenia przerwania przepełnienia timera 1 i osiągnęliśmy precyzyjną kontrolę interwału migania diody LED wynoszącego 1 s. Prześledzimy tylko pozostałe timery, a następnie wrócimy, aby dodać je później. W następnej sekcji przedstawimy komunikację portu szeregowego CC2430.






Previous: [Re-]Zigbee Journey (III): Kilka ważnych podstawowych eksperymentów CC2430 - Przerwania zewnętrzne
Następny: [Ponownie zmieniony] Zigbee Journey (V): Kilka ważnych podstawowych eksperymentów CC2430 - Komunikacja szeregowa
Code farmer network, opublikowane tylko w procesie praktyki, napotkał trudności techniczne, nie wprowadzać w błąd innych.
Musisz się zalogować zanim będziesz mógł pisać ponownie Zaloguj się | Zarejestruj się

T a wersja integralnych zasad


ZASTRZEŻENIE: Wszelkie oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer są przeznaczone wyłącznie do celów edukacyjnych i badawczych; powyższe treści nie mogą być wykorzystywane do celów komercyjnych lub nielegalnych, w przeciwnym razie wszelkie konsekwencje będą ponoszone przez samych użytkowników. Ta strona zawiera informacje z sieci, spór o prawa autorskie nie ma nic wspólnego z tą stroną. Należy całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli podoba Ci się program, prosimy o wsparcie oryginalnego oprogramowania, kup rejestrację i uzyskaj lepszą oryginalną usługę. W przypadku jakichkolwiek naruszeń, prosimy o kontakt mailowy w celu ich rozwiązania.

Mail To:help@itsvse.com

QQ| ( 鲁ICP备14021824号-2)|Sitemap

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

Szybka odpowiedźPowrótdo góryPowrót do listy