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

Widok: 7368|Odpowiedź: 0

Podróż Zigbee (3): Kilka ważnych podstawowych eksperymentów CC2430 – zewnętrzne zakłócenia

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

W poprzednim wykładzie zapoznaliśmy się z podstawowym procesem rozwoju programu CC2430 IAR poprzez prosty eksperyment z miganiem LED. Nóż i tak został naostrzony (choć mój kamień do ostrzenia nie jest dobry), a teraz zacznę :) zabijać owady. Następnie poznajmy kilka podstawowych eksperymentów z CC2430. Każdy mały eksperyment podzielony jest na trzy części: "Wprowadzenie do eksperymentu", "Diagram przepływu programu" oraz "Kod źródłowy i analiza eksperymentalnego".

Ten artykuł wyjaśnia zakłócenia zewnętrzne.

2. Zakłócenie zewnętrzne(1) Wprowadzenie do eksperymentu

Przerwania to wewnętrzny mechanizm, w którym mikrokontrolery przetwarzają zdarzenia wewnętrzne lub zewnętrzne w czasie rzeczywistym. Gdy wystąpi zdarzenie wewnętrzne lub zewnętrzne, system przerwań mikrokontrolera zmusza procesor do zatrzymania wykonywanego programu i zamiast tego przetworzenia zdarzenia przerwania.

Przerwania dzielą się na zewnętrzne i wewnętrzne, a CC2430 zawiera łącznie 18 źródeł przerwań (szczegółowe opisy i definicje wektorów przerwań należy do "Chiński podręcznik CC2430》)。

Przyjrzyjmy się teraz schematowi obwodów tej płyty rozwojowej:

Przycisk S1 został podłączony do P0.1 na płycie deweloperskiej, a efektem tego eksperymentu jest wywołanie przerwania P0.1 przez przycisk S1, a następnie kontrola włączania/wyłączania LED1 w podprogramie serwisowym przerwania.

(2) Zasada eksperymentu i schemat przepływu

Eksperymentalny schemat przepływu wygląda następująco:


(3) Eksperymentalny kod źródłowy//头文件
#include

//延时子函数
#defineLED1 P1_0
#defineLED2 P1_1
#defineLED3 P1_2
#defineLED4 P1_3

pustkaOpóźnienie(Niepodpisanyn)   
{
  Niepodpisanytt;
  dla(tt =0; tt<n; tt++);
  dla(tt =0; tt<n; tt++);
  dla(tt =0; tt<n; tt++);
  dla(tt =0; tt<n; tt++);
  dla(tt =0; tt<n; tt++);
}

//32M晶振初始化
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 = 0;
  led2 = 0;
  led3 = 0;
  led4 = 0;
}

//io及外部中断初始化
pustkaio_init(pustka)
{
    P0INP &= ~0X02;   //P0.1有上拉、下拉

    EA =1;           //总中断使能
   
    P0IE =1;   //P0中断使能
   
    PICTL |=  0X09;   //P0.1口中断使能,下降沿触发
   
    P0IFG &= ~0x02;   //P0.1中断标志清0
};

//主函数
pustkamain(pustka)   
{
  xtal_init();
  led_init();  
  io_init();

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

//中断服务子程序
#pragma wektor = P0INT_VECTOR
__interrupt pustkaP0_ISR(pustka)
{
  EA =0;                        Brama jest przerwana  

  Opóźnienie(10000);  
  Opóźnienie(10000);
  Opóźnienie(10000);
  Opóźnienie(10000);
  Opóźnienie(10000);

  jeśli((P0IFG &0x02) >0)         //按键中断
  {
    P0IFG &= ~0x02;               //P0.1中断标志清0
    led1 = !led1;
  }
  P0IF =0;                       //P0中断标志清0

  EA =1;                        //开中断
}

Najpierw inicjalizuj zegar systemu: wybierz oscylator kryształu 32MHz.

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

Następnie konfiguruj odpowiednie rejestry SFR dla zewnętrznych przerwań, aby umożliwić przerwania na wszystkich poziomach, obejmując 3 SFR:EAIEN1PICTL(Szczegóły dotyczące każdego SFR można znaleźć wChiński podręcznik CC2430》):

EA- Umożliwienie całkowitego przerwania;

    IEN1.5- Przerwanie P0 umożliwia;

    OBRAZ.3—— Włączenie przerwania portu P0.1;

    OBRAZEK.0—— Ustaw drop edge portu P0.1 tak, aby powodował wyzwalanie przerwania.

Następnie użyj while(1) w funkcji głównej i poczekaj na przerwanie.

Porady CC2430
(1) Podsumowanie składni przypisania bitów
Często musimy przypisać bit (0 lub 1) do jednego bajtu SFR, aby precyzyjnie sterować urządzeniem sprzętowym.
Jest SFRAdresowanie bitów wsparciaNa przykład TCON, P0 itd., obecnie przypisywanie kontrapunktów jest bardzo proste, wystarczy zapytać o definicję bitu w sekcji SFR Bit Access pliku nagłówka ioCC2430.h:
P0_0 = 0; // przypisz 0 do pierwszej cyfry P0
P0_0 = 1; // przypisz wartość 1 pierwszej cyfry P0  

Ale niektórych SFR tam nie maAdresowanie bitowe nie jest obsługiwane, jak w tym eksperymenciePICTL, w tym momencie chcesz przypisać wartość jednemu z nich, składnia jest następująca:
PIKTL &= ~0x01;   Przypisz wartość 0 pierwszej cyfrze
OBRAZEK |= 0x01;     Przypisz wartość 1 pierwszej cyfrze

Możesz zapamiętać&= ~|=Te dwie powszechnie stosowane składnie przypisywania bitów.
(2) Podsumowanie umożliwiania przerw
Gdy w programie pojawia się przerwanie, musi być ono włączone przed jego wywołaniem.
Hierarchia systemu włączenia przerwań C51 jest bardzo oczywista:
Boss przerwania: EAjest szefem, odpowiedzialnymOgólnePrzerwanie Umożliwia:
EA = 1;

  Każdy przerwany dowódca drużyny: Następne jest dla każdego z nichCzęści funkcjonalne(np. P0, timer 1 itd.), takie SFR są zazwyczaj adresowalne bitowo, a nazwa zazwyczaj zawiera IE (Interrupt Enable):
P0IE = 1;

  Każdy członek zespołu został przerwany: Drużyna Ale ponieważ każda cecha zawiera także wiele przerwań, ostatni poziom jest właśnie do tegoKażde przerwanieTen typ SFR jest zazwyczaj bezbitowy i nieadresowalny, zwykle zawiera IE (Interrupt Enable) lub IM (Interrupt Mask) w nazwie:
PICTL |=0x01;

Nie ma potrzeby powtarzać SFR przerwań, wystarczy zrozumieć jego hierarchię, a potem poświęcić czas na sprawdzenie pliku manualnego lub nagłówkowego.
(3) Przerwanie pisania programów
Zastosowanie przerwań w programie zazwyczaj obejmuje dwie części: zapis podprogramu usługi przerwań oraz otwarcie włączenia przerwań. Funkcja przerwań została wprowadzona powyżej, a poniżej znajduje się krótkie wprowadzenie do pisania podprogramu usługi przerwań:
Najpierw określWektor przerwania, które można zapytać w sekcji Wektorów Przerwań w pliku nagłówka ioCC2430.h, z następującą składnią:
#pragma wektor = wektor przerwania

Następnie natychmiast zapisz obsługę przerwań, która jest zorganizowana następująco:
__interrupt nazwa funkcji void (void)
  {
    //开中断
    //中断处理
    //中断标志清0
    //关中断
  }



3. Podsumowanie

W tym artykule przedstawiono metodę implementacji prostych zewnętrznych przerwań opartą na CC2430, a po podstawie przerwań wprowadzimy kolejny bardzo ważny moduł – timery. CC2430 ma łącznie 4 timery, które można podzielić na trzy kategorie: timer 1, timer 2, timer 3/4 (3 i 4 to zasadniczo ten sam sposób).


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




Poprzedni:Zigbee Journey (2): Pierwszy program CC2430 – eksperyment z miganiem światłem LED
Następny:Podróż Zigbee (4): Kilka ważnych podstawowych eksperymentów CC2430 – przerwanie timera
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