- Kodėl mums reikia pertraukos?
- MSP430 pertraukimų tipai
- Nutraukti programos valdymą MSP430
- MSP430 grandinė GPIO pertraukimui patikrinti
- MSP430 programavimas pertraukimams
- Programos įkėlimas į MSP430 iš CCS
- Nutraukimo programa MSP430
Apsvarstykite paprastą skaitmeninį laikrodį, kuris yra užprogramuotas tiesiog parodyti jums laiką, dabar įsivaizduokite, kad norite pakeisti jo laiko juostą. Ką tu darytum? Tiesiog paspauskite mygtuką, kuris pakeis meniu, leidžiantį pakeisti laiko juostą. Čia sistema negali numatyti jūsų išorinio laiko palaikymo procesų pertraukimo ir negali paprašyti jūsų palaukti, nes ji užimta didindama sekundžių vertę savo laikrodyje. Čia yra naudingi pertraukėliai.
Pertraukimai nebūtinai turi būti išoriniai; jis taip pat gali būti vidinis. Dauguma kartų įterptojo pertraukimo metu taip pat palengvina ryšį tarp dviejų procesoriaus periferinių įrenginių. Apsvarstykite iš anksto nustatytą laikmatį iš naujo ir pertraukimą, kai laikas pasiekia laikmačio registro vertę. Pertraukimo tvarkytuvas gali būti naudojamas inicijuojant kitus išorinius įrenginius, pvz., DMA.
Šioje pamokoje mes naudojome išorinius MSP430 pertraukiklius, norėdami perjungti skirtingus šviesos diodus. Kai išorinis pertraukimas įvyksta pakeitus būseną mygtuku, valdiklis perduodamas (iš anksto ištuštintas) į ISR ir jis daro reikalingą. Norėdami sužinoti pagrindinius dalykus, pvz., „CCS“ aplinkos sąranką, skirtą „MSP430G2“ paleidimo pultui, eikite į šią nuorodą, norėdami pradėti naudoti „MSP430“ naudodami CCS, nes šioje instrukcijoje mes apie tai nesiaiškinsime. Taip pat patikrinkite kitas MSP430 pagrįstas mokymo programas naudodami „Energia IDE“ ir „CCS“.
Kodėl mums reikia pertraukos?
Pertraukimai reikalingi norint išsaugoti balsavimo išlaidas pridėtoje sistemoje. Jie iškviečiami, kai reikia atlikti didesnio prioriteto užduotis iš anksto užfiksuojant dabartinę vykdomą užduotį. Jis taip pat gali būti naudojamas pažadinti procesorių iš mažos galios režimų. Kai jis pažadinamas išorinio signalo krašto perėjimu per GPIO prievadą, ISR vykdomas ir procesorius vėl grįžta į mažos galios režimą.
MSP430 pertraukimų tipai
„ MSP430 “ pertraukimai priklauso nuo šių tipų:
- Sistemos atstatymas
- Neužmaskuojamas pertraukimas
- Užmaskuojamas pertraukimas
- Vektorizuoti ir ne vektoriniai pertraukimai
Sistemos atstatymas:
Tai gali atsirasti dėl maitinimo įtampos (Vcc) ir dėl mažo signalo RST / NMI kaiščio su pasirinktu Reset režimu, taip pat gali atsirasti dėl tokių priežasčių kaip sargybos laikmačio perpildymas ir saugos rakto pažeidimas.
Neužmaskuojamas pertraukimas:
Šių pertraukimų negalima užmaskuoti CPU instrukcijomis. Kai įjungtas bendrasis pertraukimas, negalima užmaskuoti pertraukimo nuo apdorojimo. Tai sukuria tokie šaltiniai kaip osciliatoriaus gedimai ir kraštas, rankiniu būdu suteikiamas RST / NMI (NMI režimu).
Užmaskuojamas pertraukimas:
Kai įvyksta pertraukimas ir jei jį galima užmaskuoti CPU instrukcija, tai yra „Maskable Interrupt“. Jie nebūtinai turi būti visada išoriniai. Jie taip pat priklauso nuo periferinių įrenginių ir jų funkcijų. Čia naudojami išoriniai prievado pertraukikliai priskiriami šiai kategorijai.
Vektorizuoti pertraukimai ir ne vektoriniai pertraukimai:
Vektorizuotas: šiuo atveju prietaisai, kurie pertraukia, pateikia mums pertraukimo šaltinį, perduodami pertraukimo vektoriaus adresą. Čia fiksuojamas ISR adresas ir valdymas perkeliamas tuo adresu, o ISR rūpinasi likusiais dalykais.
Neskaičiuojama: čia visi pertraukiamieji turi bendrą ISR. Kai nutrūksta iš ne vektorizuoto šaltinio, valdiklis perkeliamas į bendrą adresą, kuriuo dalijasi visi ne vektorizuoti pertraukikliai.
Nutraukti programos valdymą MSP430
Įvykus pertraukai, MCLK įjungiamas ir procesorius iškviečiamas iš „OFF“ būsenos. Kadangi įvykus pertraukimui programos valdymas perkeliamas į ISR adresą, programos skaitiklio ir būsenos registro vertės perkeliamos į kaminą.
Nuosekliai būsenos registras išvalomas, taip išvalant GIE ir nutraukiant mažos galios režimą. Pertraukimas su didžiausiu prioritetu parenkamas ir vykdomas įterpiant pertraukimo vektoriaus adresą į programos skaitiklį. Prieš patekdami į MSP430 GPIO pertraukimo pavyzdžio kodą, svarbu suprasti jame veikiančių uostų registrų veikimą.
„MSP430“ GPIO valdymo prievado registrai:
PxDIR: Tai uosto krypties valdymo registras. Tai leidžia programuotojui konkrečiai pasirinkti savo funkciją parašant 0 arba 1. Jei kaištis pasirinktas kaip 1, jis veikia kaip išvestis. Laikykite, kad 1 prievadas yra 8 bitų prievadas, o jei kaiščiai 2 ir 3 turi būti priskirti kaip išvesties prievadai, tada P1DIR registras turi būti nustatytas 0x0C verte.
PxIN: tai yra tik skaitomas registras, o dabartines prievado reikšmes galima nuskaityti naudojant šį registrą.
PxOUT: Šis konkretus registras gali būti naudojamas tiesiogiai uostams įrašyti. Tai įmanoma tik išjungus traukimo / išskleidimo registrą.
PxREN: Tai yra 8 bitų registras, naudojamas įjungti arba išjungti „pullup / pulldown“ registrą. Kai kaištis tiek PxREN, tiek PxOUT registre yra nustatytas kaip 1, tada konkretus kaištis ištraukiamas aukštyn.
PxDIR |
PxREN |
PxOUT |
Įvesties / išvesties konfigūracija |
0 |
0 |
X |
Įvestis, kai rezistoriai išjungti |
0 |
1 |
0 |
Įvestis su įjungtu vidiniu išskleidžiamuoju mygtuku |
0 |
1 |
1 |
Įvestis su įjungtu vidiniu traukimu |
1 |
X |
X |
Išvestis - PxREN neturi jokio poveikio |
PxSEL ir PxSEL2: Kadangi visi MSP430 kaiščiai yra multipleksuojami, prieš naudojant jį reikia pasirinkti tam tikrą funkciją. Kai tiek PxSEL, tiek PxSEL2 registrai tam tikram kaiščiui nustatomi kaip 0, tada pasirenkamas bendrosios paskirties įvestis / išvestis. Kai PxSEL nustatoma kaip 1, pasirenkama pagrindinė periferinė funkcija ir pan.
PxIE: jis įgalina arba išjungia tam tikro kaiščio pertraukimus x prievade.
PxIES: Jis parenka kraštą, kuriame generuojamas pertraukimas. 0 atveju pasirinktas kylantis kraštas, o 1 - krentantis kraštas.
MSP430 grandinė GPIO pertraukimui patikrinti
MSP430 grandinė, naudojama bandant mūsų MSP430 pertraukimo pavyzdžio kodą, parodyta žemiau.
Lentos įžeminimas naudojamas LED ir mygtukui įžeminti. Įstrižai priešingos mygtuko pusės yra atviros gnybtai ir sujungiamos, kai nuspaudžiamas mygtukas. Prieš šviesos diodą yra prijungtas rezistorius, kad būtų išvengta didelio šviesos diodo suvartojimo. Paprastai naudojami žemi rezistoriai 100 ohm - 220ohm diapazone.
Norėdami geriau suprasti uosto pertraukimus, naudojame 3 skirtingus kodus. Pirmieji du kodai naudoja tą pačią grandinę kaip ir 1 grandinės schemoje. Pasinerkime į kodą. Atlikus ryšius, mano sąranka atrodo taip.
MSP430 programavimas pertraukimams
Visą MSP430 pertraukimo programą rasite šio puslapio apačioje, kodas paaiškinamas taip.
Žemiau eilutė sustabdo budėjimo laikmačio veikimą. „Watchdog“ laikmatis paprastai atlieka dvi operacijas. Vienas iš jų apsaugo valdiklį nuo begalinių kilpų iš naujo nustatydamas valdiklį, o kitas yra tai, kad jis sukelia periodinius įvykius naudodamas integruotą laikmatį. Kai mikrovaldiklis iš naujo nustatomas (arba įjungiamas), jis veikia laikmačio režimu ir yra linkęs iš naujo nustatyti MCU po 32 milisekundžių. Ši eilutė neleidžia valdikliui to daryti.
WDTCTL = WDTPW + WDTHOLD;
Nustačius P1DIR registrą į vertę 0x07, nustatoma pin0, pin1 ir pin2 kaip išvesties kryptis. Nustačius P1OUT į 0x30, konfigūruojamas įėjimas su vidiniais traukimo rezistoriais, įjungtais pin4 ir pin5. Nustačius P1REN į 0x30, įgalinamas vidinis šių kaiščių prisitraukimas. P1IE įgalina pertraukimą, kai P1IES pasirenka aukšto ir žemiausio perėjimą kaip pertraukimo kraštą šiuose kaiščiuose.
P1DIR - = 0x07; P1OUT = 0x30; P1REN - = 0x30; P1IE - = 0x30; P1IES - = 0x30; P1IFG & = ~ 0x30;
Kita eilutė įgalina mažos galios režimą ir įgalina GIE būsenos registre, kad būtų galima priimti pertraukimus.
__bis_SR_register (LPM4bits + GIE)
Programos skaitiklis nustatomas su 1 prievado vektoriaus adresu naudojant makrokomandą.
PORT1_VECTOR . #pragma vector = PORT1_VECTOR __interrupt void Port_1 (negaliojantis)
Žemiau pateiktas kodas perjungia kiekvieną šviesos diodą, prijungtą prie pin0, pin1, pin2 po vieną.
jei (skaičiuoti% 3 == 0) { P1OUT ^ = BIT1; P1IFG & = ~ 0x30; skaičius ++; } else if (skaičiuoti% 3 == 1) { P1OUT ^ = BIT1; P1IFG & = ~ 0x30; skaičius ++; } dar { P1OUT ^ = BIT2; P1IFG & = ~ 0x30; skaičius ++; }
2 grandinės schema:
Panašiai pabandykime ir kitą smeigtuką, kad suprastume sąvoką daug geriau. Taigi čia mygtukas sujungtas su kaiščiu 2.0, o ne su kaiščiu 1.5. modifikuota grandinė yra tokia. Vėlgi ši grandinė naudojama bandant MSP430 mygtuko pertraukimo programą.
Čia įvestis naudojama 2 prievadą. Taigi reikia naudoti skirtingą pertraukimo vektorių. P1.4 ir P2.0 ima įvestis.
Kadangi 2 prievadas naudojamas tik įėjimui, P2DIR nustatomas kaip 0. Norėdami 2 prievado kaištį 0 nustatyti kaip įvestį su įjungtais vidiniais rezistoriais, registrus P2OUT ir P2REN reikia nustatyti 1 reikšme. pertraukite 2 prievado kaištį 0, taip pat norėdami pasirinkti pertraukimo kraštą, P2IE ir P2IES nustatomi reikšme 1. Norėdami iš naujo nustatyti vėliavą 2 prievade, P2IFG išvaloma, kad vėliavą būtų galima vėl nustatyti pertraukimo atsiradimas.
P2DIR - = 0x00; P2OUT = 0x01; P2REN - = 0x01; P2IE - = 0x01; P2IES - = 0x01; P2IFG & = ~ 0x01;
Kai pertraukimo šaltinis yra iš 1 prievado, tada 1 prievado 1 kontaktą prijungtas šviesos diodas šviečia. Kai pertraukimo šaltinis priklauso 2 prievadui, tada 1 prievado kaiščiu 2 prijungtas šviesos diodas šviečia.
#pragma vector = PORT1_VECTOR __interrupt void Port_1 (negaliojantis) { P1OUT ^ = BIT1; P1IFG & = ~ 0x10; už (i = 0; i <20000; i ++) { } P1OUT ^ = BIT1; } #pragma vector = PORT2_VECTOR __interrupt void Port_2 (negaliojantis) { P1OUT ^ = BIT2; P2IFG & = ~ 0x01; už (j = 0; j <20000; j ++) { } P1OUT ^ = BIT2; }
Programos įkėlimas į MSP430 iš CCS
Norėdami įkelti projektą į paleidimo pultą ir derinti, pasirinkite projektą ir įrankių juostoje spustelėkite derinimo piktogramą. Arba paspauskite F11 arba spustelėkite RunàDebug, kad įeitumėte į derinimo režimą.
Įvedę derinimo režimą, paspauskite žalią paleidimo mygtuką, kad laisvai paleistumėte įkeltą kodą MCU. Dabar, kai nuspaudžiamas mygtukas, pertraukimas įsijungia dėl krašto pasikeitimo, todėl paskatina pakeisti šviesos diodo būseną.
Nutraukimo programa MSP430
Sėkmingai įkėlus kodą, mes galime jį išbandyti paprasčiausiai naudodami mygtuką. LED modelis pasikeis pagal mūsų programą, kai tik paspaudus mygtuką bus pertraukiama.
Visą darbą galite rasti toliau pateiktame vaizdo įraše. Tikiuosi, kad jums patiko pamoka ir sužinojote ką nors naudingo. Jei turite klausimų, palikite juos komentarų skiltyje arba naudokite mūsų forumus kitiems techniniams klausimams.