架构师_程序员_码农网

N Odzyskaj hasło
Zarejestruj się

QQ登录

Wystarczy jeden krok, aby rozpocząć

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

[转]Zigbee之旅(三):几个重要的CC2430基础实验--Przerwanie zewnętrzne

[ Kopiuj link]
P 跳转到指定楼层
właściciela budynku
发表于 2014-10-30 23:16:46|只看该作者回帖奖励 | Odwróćprzeglądanie|Tryb odczytu
I. Przejście od poprzedniego do następnego wykładu

  W poprzednim wykładzie zapoznaliśmy się z podstawowym procesem tworzenia programów CC2430 w IAR poprzez mały eksperyment z najprostszą migającą diodą LED. Nóż został przynajmniej naostrzony (chociaż nie jestem zbyt dobry w tym ostrzeniu na kamieniu), a teraz czas zacząć rzeź błędów :). Następnie nauczmy się kilku podstawowych eksperymentów CC2430. Każdy mały eksperyment, podzielony na "eksperymentalne wprowadzenie", "schemat blokowy programu", "eksperymentalny kod źródłowy i analiza" trzy części opisu.

  W tym artykule wyjaśniono przerwanie zewnętrzne.

Po drugie, przerwanie zewnętrzne(1) Wprowadzenie do eksperymentu

  Przerwanie to wewnętrzny mechanizm mikrokontrolera czasu rzeczywistego służący do obsługi zdarzeń wewnętrznych lub zewnętrznych. Gdy wystąpi jakieś zdarzenie wewnętrzne lub zewnętrzne, system przerwań mikrokontrolera zmusi CPU do wstrzymania wykonywanego programu, ale przejdzie do przetwarzania zdarzenia przerwania, przetwarzanie przerwania zostanie zakończone, a następnie powróci do przerwania przez program, kontynuując wykonywanie.

  Przerwania są podzielone na przerwania zewnętrzne i wewnętrzne, CC2430 zawiera łącznie 18 źródeł przerwań (szczegółowy opis przerwań i definicję wektora przerwań można znaleźć w " CC2430 Chinese Manual ").

  Przyjrzyjmy się teraz schematowi obwodu tej płytki rozwojowej:

  Płytka rozwojowa została podłączona do przycisku S1 i P0.1, efektem tego eksperymentu jest wyzwolenie przerwania P0.1 przez naciśnięcie klawisza S1, a następnie sterowanie światłem LED1 w podprogramie obsługi przerwania.

(2) Zasada eksperymentu i schemat blokowy

  Schemat blokowy eksperymentu jest następujący:

2011021811430713.png
c













(
3) Eksperymentalny kod źródłowy// plik nagłówkowy#include // podfunkcja delay#define led1 P1_0#define led2 P1_1#define led3 P1_2#define led4 P1_3void Delay( unsigned n) { & &



nbsp; unsigned tt;for (tt = 0;tt<n;tt++);for (tt = 0;tt<n;tt++);for (tt = 0;tt<n;tt++); &






nbsp; for (tt = 0;tt<n;tt++);for (tt = 0;tt<n;tt++); }//32M crystal initialisationvoid xtal_init( void ) { SLEEP &=~0x04; &
nbsp; //all power upwhile (!
(SLEEP & 0x40 )); //oscylator krystaliczny włączony i stabilny CLKCON &=~0x47; &






nbsp; //Select 32MHz crystal oscillator SLEEP |=0x04; }//LED initialisationvoid led_init( void ) { P1SEL =0x00; &nbsp


; //P1 jest normalnym portem I/O P1DIR |=0x0F; //P1.0 P1.1 P1.2 P1.3 Wyjście








led1 = 0; led2 = 0; led3 = 0; led4 = 0; }//io i inicjalizacja przerwań zewnętrznychvoid io_init( void ) { P0INP &=~0X02;



/ /P0.1 ma pull-up i pull-down EA =1; //Total interrupt enable P0IE =1; &



nbsp; //P0 interrupt enable PICTL |=0X09; //P0.1 port interrupt enable, falling edge trigger P0IFG &=~0x02







; //P0.1 interrupt flag clear 0 };//main functionvoid main( void ) { xtal_init(); led_init();








io_init();while ( 1 ); //czekaj na przerwanie }//podprogram obsługi przerwania#pragma vector = P0INT_VECTOR__interrupt void P0_ISR( void ) { EA =0;

/ /wyłącz przerwanie Delay





( 10000 ); Delay(10000 ); Delay(10000 ); Delay( 10000 ); Delay(10000 ); &

nbsp; if ((P0IFG & 0x02 ) >0 ) //przerwanie klucza { P0IFG &=~0x02; &


nbsp; //P0.1 flaga przerwania clear 0 led1 = !led1; } P0IF =0; &

nbsp; //P0 flaga przerwania czysta 0 EA =1; &
nbsp; // włączenie przerwania }

  Najpierw zainicjuj zegar Unity: wybierz oscylator kwarcowy 32 MHz.

  Następnie zainicjuj diody LED: ustaw P1 jako port I/O ogólnego przeznaczenia, ustaw kierunek P1.0 ~ P1.3 jako wyjście, a następnie wyłącz 4 diody LED.

  Następnie skonfiguruj odpowiednie rejestry SFR dla przerwań zewnętrznych i włącz obsługę przerwań na wszystkich poziomach, obejmując 3 rejestry SFR: EA, IEN1, PICTL (szczegółowy opis każdego rejestru SFR znajduje się w " CC2430 Chinese Manual "):

     EA -- całkowite zezwolenie na przerwanie;

     IEN1.5 -- zezwolenie na przerwanie P0;

     PICTL.3 -- włączenie przerwania portu P0.1;

     PICTL.0 -- ustawienie opadającego zbocza wejścia portu P0.1 w celu wywołania przerwania.

  Następnie użyj while(1) w głównej funkcji, aby poczekać na przerwanie.

Wskazówki CC2430
(1) Podsumowanie składni przypisywania bitów
Bardzo często musimy przypisać wartość (0 lub 1) do bitu w jednobajtowym rejestrze SFR, aby precyzyjnie sterować urządzeniem sprzętowym.
  

N
iektóre SFR obsługują
adresowanie bitowe
, takie jak TCON, P0 itp., w tym momencie przypisanie bitu jest bardzo proste, wystarczy zapytać plik nagłówkowy ioCC2430.h w części SFR Bit Access definicji bitu może być:
P0_0
= 0; // P0 pierwszy bit przypisania wartości 0
P0_0 = 1; / / / P0 pierwszy bit przypisania wartości 1
Istnieją jednak SFR, które nie
obsługują adresowania bitowego, jak w przypadku
pierwszego bitu przypisania wartości pierwszego bitu pierwszego bitu pierwszego bitu pierwszego bitu
drugiego
bitu
.
Jednak niektóre SFR
nie obsługują adresowania bitowego, takie jak PICTL w tym eksperymencie, gdy chcesz przypisać wartość do jednego z nich, składnia jest następująca:
PICTL &= ~0x01
; //przypisanie
wartości 0 do pierwszego bitu
PICTL |= 0x01; //przypisanie wartości 1 do pierwszego bitu
Możesz zapamiętać, że &
amp;= ~, |= ~, |= ~,
|= P0_0
=
1; //przypisanie wartości 1 do pierwszego bitu P0
. amp;= ~, |= to dwie typowe składnie przypisywania bitów.
(2) Podsumowanie włączania przerwań
Gdy w programie występuje przerwanie, musi ono zostać włączone przed jego wyzwoleniem.
  

S
ystem włączania przerwań C51, jego hierarchiczna struktura jest bardzo oczywista:
szef przerwania: EA jest szefem, odpowiedzialnym za całkowite włączenie przerwania:
EA = 1;
kapitan odłączenia
przerwania: następny jest dla każdego komponentu funkcjonalnego (takiego jak P0, timer 1 itp.) Włącz kontrolę, takie SFR ogólnie adresowalne bitowo, nazewnictwo ogólnie zawiera IE (Interrupt Enable):
P0IE = 1;
członkowie
zespołu przerwań
: odłączenie, ale z powodu
przerwaniaprogramu
,
przerwanie
musi zostać włączone przed wyzwoleniem przerwania.

k
ażdy członek zespołu
przerwań
: zespół, ale ponieważ każdy komponent funkcjonalny zawiera również wiele przerwań, więc ostatni poziom jest dla każdego sterowania włączaniem przerwań, taki SFR nie jest zwykle adresowalny bitowo, nazwany ogólnie zawiera IE (Interrupt Enable) lub IM (Interrupt Mask):
PICTL | = 0x01;
nie trzeba zapamiętywać SFR przerwań Nie ma potrzeby zapamiętywania przerwań SFR, o ile rozumiesz ich hierarchię, a następnie zapoznaj się z instrukcją lub plikami nagłówkowymi, gdy ich używasz.
(3) Pisanie programów
obsługi przerwań Użycie przerwań w programie składa się zasadniczo z dwóch części: napisania podprogramu obsługi przerwania i otwarcia zezwolenia na przerwanie.

W
łączanie przerwań zostało przedstawione powyżej, poniżej znajduje się krótkie wprowadzenie do przygotowania podprogramu obsługi przerwań:
Przede wszystkim należy określić wektor przerwań, może on znajdować się w pliku nagłówkowym ioCC2430.h w części zapytania Interrupt Vectors, składnia jest następująca:
# pragma vector = Interrupt Vectors
,
a następnie należy przygotować program obsługi przerwań, struktura jest następująca:
___
interrupt void Function Name (___)


i
nterrupt void function name(void)
{
//on
interrupt //interrupt handling
//interrupt flag clear 0
//off interrupt
}

III. Podsumowanie

  Niniejszy artykuł przedstawia prostą metodę implementacji przerwania zewnętrznego w oparciu o CC2430, z podstawą przerwania, a następnie przedstawiamy kolejny bardzo ważny moduł - timer. CC2430 ma w sumie cztery timery, które można podzielić na trzy kategorie: timer 1, timer 2, timer 3/4 (3 i 4 z wykorzystaniem tego samego podstawowego). tego samego).


</n;tt++).
</n;tt++);.
</n;tt++).
</n;tt++); </n;tt++); </n;tt++); </n;tt++).
</n;tt++).




Poprzedni: [Re-]Zigbee Journey (II): pierwszy program CC2430 - eksperyment z miganiem diod LED
Następny: [Re-]Zigbee Journey (4): Kilka ważnych podstawowych eksperymentów CC2430 - przerwania timera
Kod sieci rolniczej, opublikowany tylko w trakcie praktyki, napotkał trudności techniczne, nie wprowadzaj innych w błąd.
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:49

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