Denne artikkelen er en speilartikkel om maskinoversettelse, vennligst klikk her for å hoppe til originalartikkelen.

Utsikt: 7368|Svare: 0

Zigbee Journey (3): Flere viktige CC2430 grunnleggende eksperimenter – ekstern avbrudd

[Kopier lenke]
Publisert på 30.10.2014 23:16:46 | | | |
1. Sammenkobling av øvre og nedre nivåer

I forrige forelesning gjorde vi oss kjent med den grunnleggende prosessen i IAR ved å utvikle CC2430-programmet gjennom et enkelt LED-blinkeksperiment. Kniven er uansett slipt (selv om slipesteinen min ikke er god), og nå skal jeg begynne å slakte insekter :). La oss deretter lære noen grunnleggende eksperimenter i CC2430. Hvert lite eksperiment er delt inn i tre deler: «Eksperimentintroduksjon», «Programflytskjema» og «Eksperimentell kildekode og analyse».

Denne artikkelen forklarer eksterne avbrytelser.

2. Ekstern avbrudd(1) Introduksjon til eksperimentet

Avbrudd er en intern mekanisme for mikrokontrollere til å behandle interne eller eksterne hendelser i sanntid. Når en intern eller ekstern hendelse oppstår, vil avbruddssystemet til mikrokontrolleren tvinge CPU-en til å pause det kjørende programmet og i stedet behandle avbruddshendelsen.

Avbrudd er delt inn i eksterne og interne avbrudd, og CC2430 inneholder totalt 18 avbruddskilder (for spesifikke avbruddsbeskrivelser og definisjoner av avbruddsvektorer, vennligst se "CC2430 Kinesisk manual》)。

La oss nå se på kretsdiagrammet til dette utviklingskortet:

S1-knappen er koblet til P0.1 på utviklingskortet, og effekten av dette eksperimentet er å utløse avbruddet til P0.1 gjennom knappen S1, og deretter kontrollere på/av av LED1 i avbruddstjeneste-delprogrammet.

(2) Eksperimentelt prinsipp og flytskjema

Det eksperimentelle flytskjemaet er som følger:


(3) Eksperimentell kildekode//头文件
#include

//延时子函数
#defineled1 P1_0
#defineled2 P1_1
#defineled3 P1_2
#defineled4 P1_3

TomromForsinkelse(Usignertn)   
{
  UsignertTT;
  for(tt =0; tt<n; tt++);
  for(tt =0; tt<n; tt++);
  for(tt =0; tt<n; tt++);
  for(tt =0; tt<n; tt++);
  for(tt =0; tt<n; tt++);
}

//32M晶振初始化
Tomromxtal_init(Tomrom)
{
  SOV &= ~0x04;            //都上电
  mens(! (SØVN &0x40));     //晶体振荡器开启且稳定
  CLKCON &= ~0x47;           //Velg en 32 MHz krystalloscillator
  SØVN |=0x04;
}

//LED灯初始化
Tomromled_init(Tomrom)
{
  P1SEL =0x00;         P1 er den vanlige I/O-porten
  P1DIR |=0x0F;         P1.0 P1.1 P1.2 P1.3-utgang
  
  led1 = 0;
  led2 = 0;
  led3 = 0;
  led4 = 0;
}

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

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

//主函数
Tomromhoved(Tomrom)   
{
  xtal_init();
  led_init();  
  io_init();

  mens(1);   //等待中断
}

//中断服务子程序
#pragma vektor = P0INT_VECTOR
__interrupt TomromP0_ISR(Tomrom)
{
  EA =0;                        Porten er avbrutt  

  Forsinkelse(10000);  
  Forsinkelse(10000);
  Forsinkelse(10000);
  Forsinkelse(10000);
  Forsinkelse(10000);

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

  EA =1;                        //开中断
}

Først, initialiser systemklokken: velg en 32 MHz krystalloscillator.

Initialiser deretter LED-ene: sett P1 som generell I/O-port, sett retningen P1.0 ~ P1.3 som utgang, og slå deretter av de 4 LED-lysene.

Deretter konfigurerer du de relevante SFR-registrene for eksterne avbrudd for å aktivere avbrudd på alle nivåer, med 3 SFR-er:EAIEN1PICTL(For detaljer om hver SFR, vennligst seCC2430 Kinesisk manual》):

EA- Total avbruddsaktivering;

    IEN1.5- P0-avbrudd aktivert;

    PICTL.3—— P0.1 port interrupt aktivert;

    PICTL.0—— Sett P0.1-portens inngangsdropkant til å forårsake avbruddsutløsing.

Bruk deretter while(1) i hovedfunksjonen og vent på avbruddet.

CC2430-tips
(1) Oppsummering av bittildelingssyntaks
Mange ganger må vi tildele en bit (0 eller 1) til en enkelt byte SFR for å kontrollere maskinvareenheten presist.
Det finnes SFRStøttebitadresseringFor eksempel, TCON, P0, osv., på dette tidspunktet er tildelingen av kontrapunkter veldig enkel, bare spør i bitdefinisjonen i SFR Bit Access-seksjonen i ioCC2430.h-headerfilen:
P0_0 = 0; // tildeler 0 til det første sifferet i P0
P0_0 = 1; // tildeles verdien 1 til det første sifferet i P0  

Men noen SFR-er finnes ikkeBitadressering støttes ikke, som i dette eksperimentetPICTL, på dette tidspunktet vil du tildele en verdi til en av dem, syntaksen er som følger:
PICTL &= ~0x01;   Tildel verdien 0 til det første sifferet
PICTL |= 0x01;     Tildel verdien 1 til det første sifferet

Du kan huske&= ~|=Disse to brukte bittildelingssyntaksene.
(2) Oppsummering av avbruddsaktivering
Når et avbrudd er involvert i programmet, må det aktiveres før avbruddet utløses.
Hierarkiet i C51-avbruddsaktiveringssystemet er svært åpenbart:
Avbruddssjef: EAer sjefen, ansvarligGenereltAvbruddsaktivering:
EA = 1;

  Hver avbrutt lagleder: Neste er for hver av demFunksjonelle deler(som P0, timer 1, osv.), er slike SFR-er vanligvis bitadresserbare, og navnet inneholder vanligvis IE (Interrupt Enable):
P0IE = 1;

  Hvert lagmedlem ble avbrutt: Tropp Men siden hver funksjon også inneholder flere avbrudd, er siste nivå for detteHver avbrytelseDenne typen SFR er vanligvis bitløs og uadresserbar, og inneholder vanligvis IE (Interrupt Enable) eller IM (Interrupt Mask) i navnet:
PICTL |=0x01;

Ingen grunn til å rote avbrytelses-SFR, bare forstå hierarkiet og ta deg tid til å slå opp manualen eller header-filen.
(3) Avbryte skrivingen av programmer
Bruken av avbrudd i et program består vanligvis av to deler: skriving av avbruddstjenestedelprogrammet og åpning av avbruddsaktiveringen. Avbruddsfunksjonen er introdusert ovenfor, og følgende er en kort introduksjon til skrivingen av avbruddstjeneste-delprogrammet:
Spesifiser førstBruddvektor, som kan forespørres i avbruddsvektorseksjonen i ioCC2430.h-headerfilen, med følgende syntaks:
#pragma vektor = avbruddsvektor

Skriv deretter interrupt-handleren umiddelbart etterpå, som er strukturert som følger:
__interrupt void-funksjonsnavn (void)
  {
    //开中断
    //中断处理
    //中断标志清0
    //关中断
  }



3. Konklusjon

Denne artikkelen introduserer implementeringsmetoden for enkle eksterne avbrudd basert på CC2430, og etter grunnlaget for avbrudd vil vi introdusere en annen svært viktig modul – timere. CC2430 har totalt 4 timere, som kan deles inn i tre kategorier: timer 1, timer 2, timer 3/4 (3 og 4 er i bunn og grunn samme bruk).


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




Foregående:Zigbee Journey (2): Det første CC2430-programmet - LED-lysblinkeksperiment
Neste:Zigbee Journey (4): Flere viktige CC2430 grunnleggende eksperimenter – tidsavbrudd
Ansvarsfraskrivelse:
All programvare, programmeringsmateriell eller artikler publisert av Code Farmer Network er kun for lærings- og forskningsformål; Innholdet ovenfor skal ikke brukes til kommersielle eller ulovlige formål, ellers skal brukerne bære alle konsekvenser. Informasjonen på dette nettstedet kommer fra Internett, og opphavsrettstvister har ingenting med dette nettstedet å gjøre. Du må fullstendig slette innholdet ovenfor fra datamaskinen din innen 24 timer etter nedlasting. Hvis du liker programmet, vennligst støtt ekte programvare, kjøp registrering, og få bedre ekte tjenester. Hvis det foreligger noen krenkelse, vennligst kontakt oss på e-post.

Mail To:help@itsvse.com