Šis raksts ir mašīntulkošanas spoguļraksts, lūdzu, noklikšķiniet šeit, lai pārietu uz oriģinālo rakstu.

Skats: 7368|Atbildi: 0

Zigbee ceļojums (3): Vairāki svarīgi CC2430 pamata eksperimenti - ārējs pārtraukums

[Kopēt saiti]
Publicēts 30.10.2014 23:16:46 | | | |
1. Augšējā un apakšējā līmeņa savienošana

Iepriekšējā lekcijā mēs iepazināmies ar IAR CC2430 programmas izstrādes pamatprocesu, izmantojot vienkāršu LED mirgojošu eksperimentu. Nazis jebkurā gadījumā ir asināts (lai gan mans akmens nav labs), un tagad es sākšu :) nokaut kukaiņus. Tālāk uzzināsim dažus CC2430 pamata eksperimentus. Katrs mazais eksperiments ir sadalīts trīs daļās: "Eksperimenta ievads", "Programmas plūsmas diagramma" un "Eksperimentālais pirmkods un analīze".

Šajā rakstā ir izskaidroti ārējie pārtraukumi.

2. Ārējs pārtraukums(1) Ievads eksperimentā

Pārtraukumi ir iekšējs mehānisms mikrokontrolleriem, lai reāllaikā apstrādātu iekšējos vai ārējos notikumus. Ja notiek iekšējs vai ārējs notikums, mikrokontrollera pārtraukšanas sistēma piespiedīs CPU apturēt izpildes programmu un tā vietā apstrādāt pārtraukuma notikumu.

Pārtraukumi ir sadalīti ārējos un iekšējos pārtraukumos, un CC2430 satur kopumā 18 pārtraukumu avotus (konkrētus pārtraukumu aprakstus un pārtraukumu vektoru definīcijas, lūdzu, skatiet "CC2430 ķīniešu rokasgrāmata》)。

Tagad apskatīsim šīs izstrādes plates shēmas shēmu:

Poga S1 ir savienota ar P0.1 izstrādes platē, un šī eksperimenta efekts ir aktivizēt P0.1 pārtraukumu caur pogu S1 un pēc tam kontrolēt LED1 ieslēgšanu/izslēgšanu pārtraukuma pakalpojuma apakšprogrammā.

(2) Eksperimentālais princips un plūsmas shēma

Eksperimentālā plūsmas diagramma ir šāda:


(3) Eksperimentālais pirmkods//头文件
#include

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

TukšumsKavēšanās(bez parakstan)   
{
  bez parakstatt;
  par(tt =0; tt<n; tt++);
  par(tt =0; tt<n; tt++);
  par(tt =0; tt<n; tt++);
  par(tt =0; tt<n; tt++);
  par(tt =0; tt<n; tt++);
}

//32M晶振初始化
Tukšumsxtal_init (Tukšums)
{
  MIEGS &= ~0x04;            //都上电
  kamēr(! (MIEGS &0x40));     //晶体振荡器开启且稳定
  CLKCON &= ~0x47;           //Izvēlieties 32MHz kristāla oscilatoru
  MIEGS |=0x04;
}

//LED灯初始化
Tukšumsled_init (Tukšums)
{
  P1SEL =0x00;         P1 ir parastais I/O ports
  P1DIR |=0x0F;         P1.0 P1.1 P1.2 P1.3 izeja
  
  LED1 = 0;
  LED2 = 0;
  LED3 = 0;
  LED4 = 0;
}

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

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

//主函数
Tukšumsgalvenais(Tukšums)   
{
  xtal_init ();
  led_init ();  
  io_init ();

  kamēr(1);   //等待中断
}

//中断服务子程序
#pragma vektors = P0INT_VECTOR
__interrupt TukšumsP0_ISR (Tukšums)
{
  EA =0;                        Vārti tiek pārtraukti  

  Kavēšanās(10000);  
  Kavēšanās(10000);
  Kavēšanās(10000);
  Kavēšanās(10000);
  Kavēšanās(10000);

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

  EA =1;                        //开中断
}

Vispirms inicializējiet sistēmas pulksteni: atlasiet 32 MHz kristāla oscilatoru.

Pēc tam inicializējiet gaismas diodes: iestatiet P1 kā vispārējo I/O portu, iestatiet P1.0 ~ P1.3 virzienu kā izeju un pēc tam izslēdziet 4 LED gaismas.

Pēc tam konfigurējiet attiecīgos SFR reģistrus ārējiem pārtraukumiem, lai iespējotu pārtraukumus visos līmeņos, iesaistot 3 SFR:EAIEN1PICTL(Sīkāku informāciju par katru SFR, lūdzu, skatietCC2430 ķīniešu rokasgrāmata》):

EA- Pilnīga pārtraukuma iespējošana;

    IEN1.5- P0 pārtraukt iespējot;

    PICTL.3—— P0.1 porta pārtraukuma iespējošana;

    PICTL.0—— Iestatiet P0.1 porta ieejas nolaižamo malu, lai izraisītu pārtraukuma aktivizēšanu.

Pēc tam izmantojiet while (1) galvenajā funkcijā un gaidiet pārtraukumu.

CC2430 padomi
(1) Bitu piešķiršanas sintakses kopsavilkums
Daudzas reizes mums ir jāpiešķir bit (0 vai 1) vienam SFR baitam, lai precīzi kontrolētu aparatūras ierīci.
Ir SFRAtbalsta bitu adresēšanuPiemēram, TCON, P0 utt., Šobrīd kontrapunktu piešķiršana ir ļoti vienkārša, vienkārši vaicājiet bitu definīciju ioCC2430.h galvenes faila SFR bitu piekļuves sadaļā:
P0_0 = 0; // piešķirt 0 P0 pirmajam ciparam
P0_0 = 1; // piešķirt vērtību 1 P0 pirmajam ciparam  

Bet daži SFR tur navBitu adresācija netiek atbalstīta, tāpat kā šajā eksperimentāPICTL, šobrīd vēlaties piešķirt vērtību vienam no tiem, sintakse ir šāda:
PICTL &= ~0x01;   Pirmajam ciparam piešķiriet vērtību 0
PICTL |= 0x01;     Pirmajam ciparam piešķiriet vērtību 1

Jūs varat atcerēties&= ~|=Šīs divas bieži izmantotās bitu piešķiršanas sintakse.
(2) Pārtraukuma iespējošanas kopsavilkums
Ja programmā ir iesaistīts pārtraukums, tas ir jāiespējo pirms pārtraukuma aktivizēšanas.
C51 pārtraukumu iespējošanas sistēmas hierarhija ir ļoti acīmredzama:
Pārtraukt priekšnieku: EAir priekšnieks, atbildīgsVispārīgiPārtraukt iespējot:
EA = 1;

  Katrs pārtrauktais komandas vadītājs: Nākamais ir katramFunkcionālās daļas(piemēram, P0, taimeris 1 utt.), šādi SFR parasti ir bitu adresējami, un nosaukums parasti satur IE (Interrupt Enable):
P0IE = 1;

  Katrs komandas loceklis tika pārtraukts: Komanda Bet, tā kā katrā funkcijā ir arī vairāki pārtraukumi, pēdējais līmenis ir paredzēts šimKatrs pārtraukumsŠis SFR veids parasti ir bezbitu un neadresējams, un parasti nosaukumā ir IE (Interrupt Enable) vai IM (Interrupt Mask):
PICTL |=0x01;

Nav nepieciešams pārtraukt SFR, vienkārši izprotiet tā hierarhiju un pēc tam veltiet laiku, lai meklētu manuālo vai galvenes failu.
(3) Pārtrauciet programmu rakstīšanu
Pārtraukumu izmantošana programmā parasti ietver divas daļas: pārtraukuma pakalpojuma apakšprogrammas rakstīšanu un pārtraukuma iespējošanas atvēršanu. Pārtraukuma funkcija ir ieviesta iepriekš, un tālāk ir īss ievads pārtraukuma pakalpojuma apakšprogrammas rakstīšanā:
Norādiet vispirmsPārtraukuma vektors, kuru var vaicāt ioCC2430.h galvenes faila sadaļā Pārtraukt vektorus ar šādu sintaksi:
#pragma vektors = pārtraukuma vektors

Pēc tam uzreiz pēc tam uzrakstiet pārtraukuma apdarinātāju, kas ir strukturēts šādi:
__interrupt anulēt funkcijas nosaukumu (anulēt)
  {
    //开中断
    //中断处理
    //中断标志清0
    //关中断
  }



3. Secinājums

Šis raksts iepazīstina ar vienkāršu ārējo pārtraukumu ieviešanas metodi, pamatojoties uz CC2430, un pēc pārtraukumu pamata mēs iepazīstināsim ar vēl vienu ļoti svarīgu moduli - taimeri. CC2430 kopumā ir 4 taimeri, kurus var iedalīt trīs kategorijās: taimeris 1, taimeris 2, taimeris 3/4 (3 un 4 būtībā ir vienāds lietojums).


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




Iepriekšējo:Zigbee Journey (2): Pirmā CC2430 programma - LED gaismas mirgojošs eksperiments
Nākamo:Zigbee ceļojums (4): Vairāki svarīgi CC2430 pamata eksperimenti - taimera pārtraukums
Atruna:
Visa programmatūra, programmēšanas materiāli vai raksti, ko publicē Code Farmer Network, ir paredzēti tikai mācību un pētniecības mērķiem; Iepriekš minēto saturu nedrīkst izmantot komerciāliem vai nelikumīgiem mērķiem, pretējā gadījumā lietotājiem ir jāuzņemas visas sekas. Informācija šajā vietnē nāk no interneta, un autortiesību strīdiem nav nekāda sakara ar šo vietni. Iepriekš minētais saturs ir pilnībā jāizdzēš no datora 24 stundu laikā pēc lejupielādes. Ja jums patīk programma, lūdzu, atbalstiet oriģinālu programmatūru, iegādājieties reģistrāciju un iegūstiet labākus oriģinālus pakalpojumus. Ja ir kādi pārkāpumi, lūdzu, sazinieties ar mums pa e-pastu.

Mail To:help@itsvse.com