| I. Nadaljevanje s prejšnjega na naslednje V prejšnjem predavanju smo se seznanili z osnovnim postopkom razvijanja programov CC2430 v programu IAR z majhnim poskusom z najpreprostejšim utripanjem LED. Nož je bil vsaj nabrušen (čeprav mi to brušenje kamna ne gre najbolje od rok), zdaj pa je čas, da začnemo mesariti hrošče :). Nato se naučimo nekaj osnovnih poskusov s CC2430. Vsak mali eksperiment, razdeljen na "eksperimentalni uvod", "diagram poteka programa", "eksperimentalno izvorno kodo in analizo" tri dele opisa. V tem članku je razložena zunanja prekinitev. Drugič, zunanja prekinitev(1) Uvod v eksperiment Prekinitev je mikrokrmilnik v realnem času za obravnavo notranjih ali zunanjih dogodkov, notranji mehanizem. Ko pride do nekega notranjega ali zunanjega dogodka, bo sistem prekinitve mikrokrmilnika prisilil procesor, da ustavi program, ki se izvaja, vendar gre v obdelavo prekinitvenega dogodka, obdelava prekinitvenega dogodka je končana, nato pa se vrne v prekinitev programa, nadaljuje z izvajanjem. Prekinitve so razdeljene na zunanje in notranje prekinitve, CC2430 vsebuje skupno 18 virov prekinitev (poseben opis prekinitve in opredelitev vektorja prekinitve lahko najdete v " kitajskem priročniku CC2430 "). Zdaj si oglejmo shemo vezja te razvojne plošče:
Razvojna plošča je bila priključena na tipko S1 in P0.1, učinek, ki ga želi doseči ta eksperiment, je sprožiti prekinitev P0.1 s pritiskom na tipko S1 in nato v podprogramu za servisiranje prekinitev nadzorovati svetlobo/izklop LED1. (2) Načelo poskusa in diagram poteka Diagram poteka poskusa je naslednji:
c
(3) Eksperimentalna izvorna koda// datoteke z glavo#include // podfunkcija 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 kristalna inicializacijavoid xtal_init( void ) { SLEEP &=~0x04; & nbsp; //vse se vklopiwhile (! (SLEEP & 0x40 )); //kristalni oscilator vklopljen in stabilen CLKCON &=~0x47; &
nbsp; /izberite 32MHz kristalni oscilator SLEEP |=0x04; }//Inicializacija LEDvoid led_init( void ) { P1SEL =0x00;  
; //P1 je običajni vhodno-izhodni priključek P1DIR |=0x0F; //P1.0 P1.1 P1.2 P1.3 Izh od
led1 = 0; led2 = 0; led3 = 0; led4 = 0; }//io in inicializacija zunanjih prekinitevvoid io_init( void ) { P0INP &=~0X02;
/ /P0.1 ima pull-up in pull-down EA =1; //Totalno omogočanje prekinitve P0IE =1; &
nbsp; //P0 omogoči prekinitev PICTL |=0X09; //P0.1 omogoči prekinitev vrat, sproži padajoči rob P0IFG &=~0x02
; //P0.1 interrupt flag clear 0 };//main functionvoid main ( void ) { xtal_init(); led_init();
io_init();while ( 1); //čakanje na prekinitev }//podprogram za servisiranje prekinitev#pragma vector = P0INT_VECTOR__interrupt void P0_ISR( void ) { EA =0;
/ / izklopi prekinitev Zakasnitev
( 10000 ); Delay(10000 ); Delay(10000); Delay(10000 ); Delay(10000 ); Delay(10000 ); &
nbsp; if ((P0IFG & 0x02 ) >0 ) //prekinitev ključa { P0IFG &=~0x02; &
nbsp; //P0.1 prekinitvena zastavica clear 0 led1 = !led1; } P0IF =0; &
nbsp; //P0 prekinitvena zastavica počisti 0 EA =1; & nbsp; // vklopi prekinitev } Najprej inicializirajte enotno uro: izberite 32MHz kristalni oscilator. Nato inicializirajte svetleče diode: nastavite P1 kot splošno namensko vhodno/izhodno vrata, nastavite smer P1.0 ~ P1.3 kot izhod in nato izklopite 4 svetleče diode. Nato konfigurirajte ustrezne registre SFR za zunanje prekinitve in vklopite omogočanje prekinitev na vseh ravneh, kar vključuje 3 SFR: EA, IEN1, PICTL (za podroben opis vsakega SFR glejte " CC2430 Chinese Manual "): EA -- skupna možnost prekinitve; IEN1.5 -- omogočanje prekinitve P0; PICTL.3 -- omogočanje prekinitve vrat P0.1; PICTL.0 -- nastavi padajoči rob vhoda P0.1, da se sproži prekinitev. Nato uporabite while(1) v glavni funkciji, da počakate na prekinitev. CC2430 Nasveti(1) Povzetek sintakse dodeljevanja bitov Zelo pogosto moramo dodeliti vrednost (0 ali 1) bitu v enobajtnem SFR, da natančno upravljamo strojno napravo. N ekateri SFR podpirajo bitno naslavljanje, na primer TCON, P0 itd. v tem trenutku je dodelitev bita zelo preprosta, samo poizvedite v datoteke glave ioCC2430.h v delu SFR Bit Access (Dostop do bita) je lahko bitna definicija: P0_0 = 0; // P0 prvi bit dodelitve vrednosti 0 P0_0 = 1; / / / P0 prvi bit dodelitve vrednosti 1 Vendar nekateri SFR ne podpirajo bitnega naslavljanja , kot v primeru dodelitve vrednosti prvega bita prvega bita prvega bita prvega bita drugega bita . Nekateri SFR pa ne podpirajo bitnega naslavljanja, na primer PICTL v tem poskusu, ko želite enemu od njih dodeliti vrednost, je sintaksa naslednja: PICTL &= ~0x01; //pripisati vrednost 0 prvemu bitu PICTL |= 0x01; //pripisati vrednost 1 prvemu bitu Lahko si zapomnite, da & amp;= ~, |= ~, |= ~, |= ~, |= P0_0 = 1; //pripisati vrednost 1 prvemu bitu P0 . amp;= ~, |= ti dve običajni sintaksi dodeljevanja bitov. (2) Povzetek omogočanja prekinitev Kadar je v program vključena prekinitev, jo je treba omogočiti, preden se sproži prekinitev. S istem omogočanja prekinitev C51, njegova hierarhična struktura je zelo očitna: šef prekinitve: EA je šef, odgovoren za skupno omogočanje prekinitve: EA = 1; kapitan odklopa prekinitve: naslednji je za vsako funkcionalno komponento (kot so P0, časovnik 1 itd.) omogočiti nadzor, tak SFR je običajno bitno naslovljiv, poimenovanje običajno vsebuje IE (Interrupt Enable): P0IE = 1; člani ekipe prekinitve : odklop, vendar mora biti zaradi prekinitveprograma prekinitev omogočena pred sprožitvijo prekinitve.
v sak član ekipe za prekinitev: ekipa, vendar ker vsaka funkcionalna komponenta vsebuje tudi več prekinitev, zato je zadnja raven za vsak nadzor omogočanja prekinitve, tak SFR na splošno ni bitno naslovljiv, poimenovan običajno vsebuje IE (Interrupt Enable) ali IM (Interrupt Mask): PICTL | = 0x01; ni treba zapomniti SFR za prekinitev SFR za prekinitev si ni treba zapomniti, če razumete hierarhijo, in če jih uporabljate, se posvetujte s priročnikom ali glavnimi datotekami. (3) Pisanje programov za prekinitve Uporaba prekinitev v programu je običajno sestavljena iz dveh delov: pisanja podprograma za servisiranje prekinitev in odpiranja omogočanja prekinitev. M ožnost prekinitve je bila predstavljena zgoraj, v nadaljevanju je na kratko predstavljena priprava podprograma za servisiranje prekinitev: Najprej določite vektor prekinitve, lahko v naslovni datoteki ioCC2430.h v delu poizvedbe Interrupt Vectors, sintaksa je naslednja: # pragma vector = Interrupt Vectors in nato sledi priprava izvajalca prekinitve, struktura je naslednja: ___ interrupt void Ime funkcije (___)
p rekinitev void ime funkcije(void) { //na prekinitev //obravnava prekinitve //zaznamka prekinitve clear 0 //izklop prekinitve } III. Zaključek V tem članku predstavljamo preprost način izvajanja zunanje prekinitve na podlagi CC2430, pri čemer je osnova prekinitev, nato pa predstavljamo še en zelo pomemben modul - časovnik. CC2430 ima skupno štiri časovnike, ki jih lahko razdelimo v tri kategorije: časovnik 1, časovnik 2, časovnik 3/4 (3 in 4 uporabe istega osnovnega). enako). </n;tt++). </n;tt++);. </n;tt++). </n;tt++); </n;tt++); </n;tt++); </n;tt++); </n;tt++). </n;tt++). |