架构师_程序员_码农网

U Získání hesla
Registrace

QQ登录

Stačí jeden krok, abyste mohli začít

Vyhledávání
Zobrazení:4624|Odpověď: 0
打印 上一主题 下一主题

[转]Zigbee之旅(三):几个重要的CC2430基础实验--Externí přerušení

[Kopírovat odkaz]
V 跳转到指定楼层
majiteli budovy
发表于 2014-10-30 23:16:46|只看该作者回帖奖励|Reverzníprocházení|Režim čtení
I. Pokračování z předchozího na následující

  V předchozí přednášce jsme se seznámili se základním postupem vývoje programů CC2430 v IARu prostřednictvím malého experimentu s nejjednodušším blikáním LED. Nůž byl alespoň nabroušen (ačkoliv mi to s tím broušením kamene moc nejde) a teď je čas začít řezat chyby :). Dále se naučíme několik základních experimentů s CC2430. Každý malý experiment, rozdělený na "experimentální úvod", "vývojový diagram programu", "experimentální zdrojový kód a analýza" tři části popisu.

  Tento článek vysvětluje externí přerušení.

Za druhé, externí přerušení(1) Úvod do experimentu

  Přerušení je mikrokontrolér reálného času pro řešení vnitřních nebo vnějších událostí, vnitřní mechanismus. Když dojde k nějaké vnitřní nebo vnější události, systém přerušení mikrokontroléru donutí procesor pozastavit prováděný program, ale přejít na zpracování události přerušení, zpracování přerušení je dokončeno a pak se vrátí k přerušení programu, pokračuje v provádění.

  Přerušení se dělí na externí přerušení a interní přerušení, CC2430 obsahuje celkem 18 zdrojů přerušení (konkrétní popis přerušení a definici vektoru přerušení najdete v " Čínské příručce CC2430 ").

  Nyní se podívejme na schéma zapojení této vývojové desky:

2011021811145691.jpg

  Vývojová deska byla připojena k tlačítku S1 a P0.1, efekt, kterého chce tento experiment dosáhnout, je vyvolat přerušení P0.1 stisknutím tlačítka S1 a následně ovládat rozsvícení/zhasnutí LED1 v podprogramu obsluhy přerušení.

(2) Princip experimentu a vývojový diagram

  Blokové schéma experimentu je následující:

2011021811430713.png
c













(
3) Experimentální zdrojový kód// hlavičkový soubor#include // podfunkce 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 krystalová inicializacevoid xtal_init( void ) { SLEEP &=~0x04; &
nbsp; //všechno napájeníwhile (!
(SLEEP & 0x40 )); //krystalový oscilátor zapnut a stabilní CLKCON &=~0x47; &






nbsp; /Zvolte 32MHz krystalový oscilátor SLEEP |=0x04; }//Inicializace LEDvoid led_init( void ) { P1SEL =0x00; &nbsp


; //P1 je normální I/O port P1DIR |=0x0F; //P1.0 P1.1 P1.2 P1.3 Výstup








led1 = 0; led2 = 0; led3 = 0; led4 = 0; }//io a inicializace externího přerušenívoid io_init( void ) { P0INP &=~0X02;



/ /P0.1 má pull-up a 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); //čekání na přerušení }//podprogram obsluhy přerušení#pragma vector = P0INT_VECTOR__přerušení void P0_ISR( void ) { EA =0;

/ / vypnutí přerušení Zp oždění





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

nbsp; if ((P0IFG & 0x02 ) >0 ) //přerušení klíče { P0IFG &=~0x02; &


nbsp; //P0.1 příznak přerušení clear 0 led1 = !led1; } P0IF =0; &

nbsp; //P0 příznak přerušení clear 0 EA =1; &
nbsp; // zapnout přerušení }

  Nejprve inicializujte Unity Clock: zvolte 32MHz krystalový oscilátor.

  Poté inicializujte LED diody: nastavte P1 jako univerzální I/O port, nastavte směr P1.0 ~ P1.3 jako výstup a poté vypněte 4 LED diody.

  Poté nakonfigurujte příslušné registry SFR pro externí přerušení a zapněte povolení přerušení na všech úrovních, což zahrnuje 3 SFR: EA, IEN1, PICTL (podrobný popis jednotlivých SFR najdete v " Čínské příručce CC2430 "):

     EA -- celkové povolení přerušení;

     IEN1.5 -- povolení přerušení P0;

     PICTL.3 -- povolení přerušení portu P0.1;

     PICTL.0 -- nastavte klesající hranu vstupu portu P0.1 tak, aby způsobila spuštění přerušení.

  Pak použijte while(1) v hlavní funkci pro čekání na přerušení.

CC2430 Tipy
(1) Syntaxe přiřazování bitů Shrnutí
Velmi často potřebujeme přiřadit hodnotu (0 nebo 1) bitu v jednobajtovém SFR, abychom přesně řídili hardwarové zařízení.
  

N
ěkteré SFR podporují bitové adresování, například TCON, P0 atd. v tuto chvíli je přiřazení bitu velmi jednoduché, stačí se zeptat v hlavičkovém souboru ioCC2430.h v části SFR Bitový přístup definice bitu může být:
P0_0 = 0; // P0 první bit přiřazení hodnoty 0
P0_0 = 1; / / / P0 první bit přiřazení hodnoty 1
Existují
však SFR, které
bitové adresování
nepodporují,
jako v případě
prvního bitu přiřazení hodnoty prvního bitu prvního bitu prvního bitu
druhého
bitu
.
Některé SFR však
bitové adresování nepodporují, jako například PICTL v tomto experimentu, když chcete jednomu z nich přiřadit hodnotu, syntaxe je následující:
PICTL &= ~0x01; //přiřazení hodnoty 0 prvnímu bitu
PICTL |= 0x01; //přiřazení hodnoty 1 prvnímu bitu
Můžete si
zapamatovat, že &
amp;= ~, |= ~, |= ~, |= ~,
|= P0_0
=
1; //přiřazení hodnoty 1 prvnímu bitu P0
. amp;= ~, |= tyto dvě běžné syntaxe přiřazení bitů.
(2) Shrnutí povolování přerušení
Pokud je do programu zapojeno přerušení, musí být před jeho spuštěním povoleno.
  

S
ystém povolování přerušení C51, jeho hierarchická struktura je velmi zřejmá:
šéf přerušení: EA je šéf, zodpovědný za celkové povolení přerušení:
EA = 1;
kapitán odpojení
přerušení: další je pro každou funkční komponentu (jako je P0, časovač 1 atd.) povolení řízení, takový SFR obecně bitově adresovatelný, pojmenování obecně obsahuje IE (Interrupt Enable):
P0IE = 1;
členové
týmu přerušení
: odpojení, ale kvůli
přerušeníprogramu
musí být
přerušení
povoleno před spuštěním přerušení.

k
aždý člen týmu přerušení: tým, ale protože každá funkční komponenta obsahuje také více přerušení, takže poslední úroveň je pro každou povolenou kontrolu přerušení, takový SFR není obecně bitově adresovatelný, pojmenovaný obecně obsahuje IE (Interrupt Enable) nebo IM (Interrupt Mask):
PICTL | = 0x01;
není třeba si pamatovat SFR přerušení SFR pro přerušení není třeba si pamatovat, pokud pochopíte jejich hierarchii a při jejich použití se pak podíváte do příručky nebo hlavičkových souborů.
(3) Psaní programů pro přerušení
Použití přerušení v programu se obecně skládá ze dvou částí: zápisu podprogramu obsluhy přerušení a otevření povolení přerušení.

P
ovolení přerušení bylo představeno výše, následuje stručný úvod k přípravě podprogramu obsluhy přerušení:
Nejprve určete vektor přerušení, může být v hlavičkovém souboru ioCC2430.h v části dotazu Interrupt Vectors, syntaxe je následující:
# pragma vector = Interrupt Vectors
a poté následuje příprava obsluhy přerušení, struktura je následující:
___
interrupt void Function Name (___)


p
řerušení void function name(void)
{
//na přerušení
//obsluha přerušení
//příznak přerušení clear 0
//vypnutí přerušení
}

III. Závěr

  V tomto článku jsme představili jednoduchý způsob implementace externího přerušení na bázi CC2430, přičemž základem je přerušení, dále jsme představili další velmi důležitý modul - časovač. CC2430 má celkem čtyři časovače, které lze rozdělit do tří kategorií: časovač 1, časovač 2, časovač 3/4 (3 a 4 použití stejného základu). stejný).


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




Předchozí: [Re-]Zigbee Journey (II): první program CC2430 - experiment s blikáním LED diody
Další: [Re-]Zigbee Journey (4): Několik důležitých základních experimentů s CC2430 - přerušení časovače
Kód farmářské sítě, zveřejněn pouze v průběhu praxe, vyskytly se technické potíže, neuvádějte ostatní v omyl.
Před odesláním příspěvku se musíte přihlásit Přihlásit se | Registrovat se

T ato verze integrálních pravidel


VYLOUČENÍ: Veškerý software, programové materiály nebo články publikované Code Farmerem jsou omezeny pouze na použití pro studijní a výzkumné účely; výše uvedený obsah nesmí být používán ke komerčním nebo nelegálním účelům, jinak veškeré následky ponesou sami uživatelé. Tyto stránky informace ze sítě, spor o autorská práva nemá s těmito stránkami nic společného. Výše uvedený obsah musíte do 24 hodin od stažení kompletně odstranit z počítače. Pokud se vám program líbí, podpořte prosím originální software, zakupte si registraci a získejte lepší originální služby. Pokud dojde k porušení práv, kontaktujte nás prosím e-mailem, abychom to mohli řešit.

Mail To:help@itsvse.com

QQ| ( 鲁ICP备14021824号-2)|Mapa stránek

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

Rychlá odpověďZpět na začátekZpět na seznam