- Kāpēc mums vajag pārtraukt?
- Pārtraukumu veidi MSP430
- Pārtraukt programmas vadību MSP430
- MSP430 shēma GPIO pārtraukuma pārbaudei
- MSP430 programmēšana pārtraucējiem
- Programmas augšupielāde MSP430 no CCS
- Pārtraukt programmu MSP430
Apsveriet vienkāršu digitālo pulksteni, kas ir ieprogrammēts tā, lai tikai parādītu laiku, tagad iedomājieties, ka vēlaties mainīt tā laika joslu. Ko tu darītu? Jums vienkārši jānospiež poga, kas mainās uz izvēlni, kas ļauj mainīt laika joslu. Šeit sistēma nevar paredzēt jūsu ārējo pārtraukumu laika uzturēšanas procesos un nevar lūgt gaidīt, jo tā ir aizņemta, palielinot jūsu pulksteņa sekundes vērtību. Šeit ir noderīgi pārtraucēji.
Pārtraukumiem ne vienmēr jābūt ārējiem; tas var būt arī iekšējs. Lielākā daļa reizes iegultā pārtraukumā atvieglo saziņu starp diviem CPU perifērijas ierīcēm. Apsveriet, vai iepriekš iestatītais taimeris tiek atiestatīts un tiek pārtraukts, kad laiks sasniedz taimera reģistra vērtību. Pārtraukumu apstrādātāju var izmantot, lai iniciētu citas perifērijas ierīces, piemēram, DMA.
Šajā apmācībā mēs izmantojām MSP430 ārējos traucējumus, lai pārslēgtu dažādas gaismas diodes. Ja ārējais pārtraukums tiek veikts, mainot stāvokli, izmantojot spiedpogu, vadība tiek pārsūtīta (iepriekš iztukšota) uz ISR, un tā ir nepieciešama. Lai uzzinātu tādus pamatus kā CCS vides iestatīšana MSP430G2 palaišanas vietnei, izmantojiet šo saiti, lai sāktu darbu ar MSP430, izmantojot CCS, jo šajā apmācībā mēs par to sīkāk neiedziļināsimies. Pārbaudiet arī citas MSP430 balstītas apmācības, izmantojot Energia IDE un CCS, sekojot saitei.
Kāpēc mums vajag pārtraukt?
Pārtraukumi ir nepieciešami, lai saglabātu vēlēšanu pieskaitāmās izmaksas iegultā sistēmā. Tie tiek izsaukti, kad ir nepieciešami uzdevumi ar lielāku prioritāti, veicot iepriekšējo pašreizējo uzdevumu. To var izmantot arī, lai pamodinātu procesoru no mazjaudas režīmiem. Kad to pamodina ārēja signāla malas pāreja caur GPIO portu, tiek izpildīts ISR un centrālais procesors atkal atgriežas mazjaudas režīmā.
Pārtraukumu veidi MSP430
Ar in MSP430 pārtrauc nāk ar šādiem veidiem
- Sistēmas atiestatīšana
- Nemaskējams pārtraukums
- Maskējams pārtraukums
- Vektorizēti un bez vektoriem pārtrauc
Sistēmas atiestatīšana:
Tas var notikt barošanas sprieguma (Vcc) un zema signāla dēļ RST / NMI tapā ar atlasītu Reset režīmu, un tas var notikt arī tādu iemeslu dēļ kā sargsuņa taimera pārpilde un drošības atslēgas pārkāpums.
Nemaskējams pārtraukums:
Šos pārtraukumus nevar maskēt ar CPU instrukcijām. Kad ir iespējots vispārējais pārtraukums, nemaskējamo pārtraukumu nevar novirzīt no apstrādes. To ģenerē tādi avoti kā oscilatora bojājumi un RST / NMI manuāli piešķirta mala (NMI režīmā).
Maskējams pārtraukums:
Kad notiek pārtraukums un ja to var maskēt ar CPU instrukciju, tas ir Maskable Interrupt. Viņiem nav vienmēr jābūt ārējiem. Tie ir atkarīgi arī no perifērijas ierīcēm un to funkcijām. Šeit izmantotie ārējā porta pārtraukumi ietilpst šajā kategorijā.
Vektorizēti pārtraukumi un bezvektoru pārtraukumi:
Vektorizēts: Šajā gadījumā ierīces, kas pārtrauc darbību, mums nodrošina pārtraukuma avotu, nododot pārtraukuma vektora adresi. Šeit ISR adrese tiek fiksēta un vadība tiek pārsūtīta uz šo adresi, un ISR rūpējas par pārējo.
Bez vektoriem: šeit visiem pārtraucējiem ir kopīgs ISR. Ja pārtraukums notiek no avota, kas nav vektorizēts, vadība tiek pārsūtīta uz kopējo adresi, uz kuru visi kopēji, kas nav vektorizētie, dalās.
Pārtraukt programmas vadību MSP430
Kad notiek pārtraukums, MCLK tiek ieslēgts un CPU tiek izsaukts no OFF stāvokļa. Tā kā pēc pārtraukuma iestāšanās programmas vadība tiek pārsūtīta uz ISR adresi, programmas skaitītājā un statusa reģistrā esošās vērtības tiek pārvietotas uz kaudzīti.
Pēc tam statusa reģistrs tiek notīrīts, tādējādi iztīrot GIE un pārtraucot mazjaudas režīmu. Pārtraukums ar augstāko prioritāti tiek izvēlēts un izpildīts, programmas skaitītājā ievietojot pārtraukuma vektora adresi. Pirms mēs nonākam līdz mūsu MSP430 GPIO pārtraukuma parauga kodam, ir svarīgi saprast tajā iesaistīto ostu reģistru darbību.
Ostu reģistri GPIO kontrolei MSP430:
PxDIR: Tas ir ostas virziena kontroles reģistrs. Tas ļauj programmētājam īpaši izvēlēties savu funkciju, rakstot 0 vai 1. Ja tapa ir izvēlēta kā 1, tad tā darbojas kā izeja. Uzskatiet, ka ports 1 ir 8 bitu ports, un, ja tapas 2 un 3 jāpiešķir kā izejas porti, tad P1DIR reģistrs ir jāiestata ar vērtību 0x0C.
PxIN: Tas ir tikai lasāms reģistrs, un pašreizējās vērtības ostā var nolasīt, izmantojot šo reģistru.
PxOUT: Šo konkrēto reģistru var izmantot, lai tieši ierakstītu vērtības ostās. Tas ir iespējams tikai tad, ja atspiešanās / nolaižamais reģistrs ir atspējots.
PxREN: Tas ir 8 bitu reģistrs, ko izmanto, lai iespējotu vai atspējotu izvilkšanas / nolaižamā reģistra reģistru. Kad gan PxREN, gan PxOUT reģistrā tapa ir iestatīta kā 1, tad konkrētā tapa tiek uzvilkta uz augšu.
PxDIR |
PxREN |
PxOUT |
I / O konfigurācija |
0 |
0 |
X |
Ieeja ar atspējotiem rezistoriem |
0 |
1 |
0 |
Ieeja ar iespējotu iekšējo nolaižamo |
0 |
1 |
1 |
Ievade ar iespējotu iekšējo izvilkšanu |
1 |
X |
X |
Rezultāts - PxREN nav ietekmes |
PxSEL un PxSEL2: Tā kā visas MSP430 tapas ir multipleksētas, pirms tās izmantošanas ir jāizvēlas konkrētā funkcija. Kad gan PxSEL, gan PxSEL2 reģistri konkrētai tapai ir iestatīti kā 0, tiek izvēlēts vispārējā mērķa I / O. Kad PxSEL ir iestatīts kā 1, tiek izvēlēta primārā perifērijas funkcija utt.
PxIE: Tas iespējo vai atspējo pārtraukumus noteiktai tapai x ostā.
PxIES: tā izvēlas malu, kurā tiek ģenerēts pārtraukums. Attiecībā uz 0 tiek izvēlēta pieaugošā mala, bet 1 - krītošā mala.
MSP430 shēma GPIO pārtraukuma pārbaudei
MSP430 ķēde, ko izmanto, lai pārbaudītu mūsu MSP430 pārtraukuma parauga kodu, ir parādīta zemāk.
Dēļa iezemējums tiek izmantots gan LED, gan pogas iezemēšanai. Spiedpogas diagonāli pretējās puses parasti ir atvērtas spailes un savienojas, nospiežot pogu uz leju. Pirms gaismas diode ir pievienots rezistors, lai izvairītos no liela strāvas patēriņa ar LED. Parasti tiek izmantoti zemi rezistori diapazonā no 100ohm - 220ohm.
Mēs izmantojam 3 dažādus kodus, lai labāk izprastu ostas traucējumus. Pirmajos divos kodos tiek izmantota tā pati shēma kā 1. shēmas shēmā. Iegremdēsimies kodā. Pēc savienojumu izveidošanas mana iestatīšana izskatās šādi.
MSP430 programmēšana pārtraucējiem
Pilnīga MSP430 pārtraucošā programma ir atrodama šīs lapas beigās, koda skaidrojums ir šāds.
Zemāk redzamā līnija pārtrauc sargsuņa taimera darbību. Watchdog taimeris parasti veic divas darbības. Viens novērš kontroliera bezgalīgas cilpas, atiestatot kontrolieri, un otrs ir tas, ka tas izraisa periodiskus notikumus, izmantojot iebūvēto taimeri. Kad mikrokontrolleris tiek atiestatīts (vai tiek ieslēgts), tas ir taimera režīmā un pēc 32millisekundēm mēdz atiestatīt MCU. Šī līnija neļauj kontrolierim to darīt.
WDTCTL = WDTPW + WDTHOLD;
Iestatot P1DIR reģistru vērtībai 0x07, tiek iestatīts pin0, pin1 un pin2 virziens kā izeja. Iestatījumu P1OUT līdz 0x30 konfigurē to ievades ar iekšējiem Pullup rezistoriem iespējots pin4 un pin5. Iestatot P1REN uz 0x30, tiek iespējota šo tapu iekšējā izvilkšana. P1IE ļauj pārtraukt, kur P1IES izvēlas pāreju no augšas uz zemu kā pārtraukuma malu uz šīm tapām.
P1DIR - = 0x07; P1OUT = 0x30; P1REN - = 0x30; P1IE - = 0x30; P1IES - = 0x30; P1IFG & = ~ 0x30;
Nākamā rinda iespējo mazjaudas režīmu un iespējo GIE statusa reģistrā, lai varētu saņemt pārtraukumus.
__bis_SR_register (LPM4bits + GIE)
Izmantojot makro, programmas skaitītājs tiek iestatīts ar 1. porta vektora adresi.
PORT1_VECTOR . #pragma vector = PORT1_VECTOR __interrupt void Port_1 (void)
Zemāk esošais kods pa vienam pārslēdz katru no LED, kas savienots ar pin0, pin1, pin2.
ja (skaitīt% 3 == 0) { P1OUT ^ = BIT1; P1IFG & = ~ 0x30; skaits ++; } else if (skaitīt% 3 == 1) { P1OUT ^ = BIT1; P1IFG & = ~ 0x30; skaits ++; } cits { P1OUT ^ = BIT2; P1IFG & = ~ 0x30; skaits ++; }
2. shēma:
Tāpat izmēģināsim citu tapu, lai daudz labāk saprastu šo jēdzienu. Tātad šeit spiedpoga ir savienota ar tapu 2.0, nevis ar tapu 1.5. modificētā shēma ir šāda. Arī šo ķēdi izmanto, lai pārbaudītu MSP430 pogas pārtraukšanas programmu.
Šeit ievadei tiek izmantots ports 2. Tāpēc jāizmanto atšķirīgs pārtraukuma vektors. P1.4 un P2.0 ņem ievadi.
Tā kā 2. pieslēgvieta tiek izmantota tikai ievadei, P2DIR ir iestatīts uz 0. Lai 2. porta pin0 iestatītu kā ieeju ar iespējotu iekšējo pievilkšanas rezistoru, reģistriem P2OUT un P2REN jābūt iestatītiem ar vērtību 1. Lai iespējotu pārtraukt 2. porta pin0 un arī, lai izvēlētos pārtraukuma malu, P2IE un P2IES tiek iestatīti ar vērtību 1. Lai atiestatītu karodziņu 2. portā, P2IFG tiek notīrīts, lai karogu varētu atkal iestatīt uz pārtraukuma iestāšanās.
P2DIR - = 0x00; P2OUT = 0x01; P2REN - = 0x01; P2IE - = 0x01; P2IES - = 0x01; P2IFG & = ~ 0x01;
Kad pārtraukuma avots ir no 1. porta, tad 1. porta 1. kontaktam pievienotā gaismas diode spīd. Kad pārtraukuma avots pieder 2. pieslēgvietai, tad 1. porta 2. kontaktligzdai pievienotā gaismas diode spīd.
#pragma vector = PORT1_VECTOR __interrupt void Port_1 (void) { P1OUT ^ = BIT1; P1IFG & = ~ 0x10; par (i = 0; i <20000; i ++) { } P1OUT ^ = BIT1; } #pragma vector = PORT2_VECTOR __interrupt void Port_2 (void) { P1OUT ^ = BIT2; P2IFG & = ~ 0x01; par (j = 0; j <20000; j ++) { } P1OUT ^ = BIT2; }
Programmas augšupielāde MSP430 no CCS
Lai ielādētu projektu startēšanas panelī un atkļūdotu, atlasiet projektu un rīkjoslā noklikšķiniet uz atkļūdošanas ikonas. Alternatīvi nospiediet F11 vai noklikšķiniet uz RunàDebug, lai pārietu uz atkļūdošanas režīmu.
Kad ir ievadīts atkļūdošanas režīms, nospiediet zaļās krāsas palaišanas pogu, lai brīvi palaistu ielādēto kodu MCU. Tagad, nospiežot spiedpogu, mala izmaiņas izraisa pārtraukumu, tādējādi mudinot mainīt gaismas diodes stāvokli.
Pārtraukt programmu MSP430
Pēc tam, kad kods ir veiksmīgi augšupielādēts, mēs to varam pārbaudīt, vienkārši izmantojot spiedpogu. Gaismas diodes modelis mainīsies atbilstoši mūsu programmai ikreiz, kad tiek pārtraukts, izmantojot spiedpogu.
Pilnīgu darbu var atrast zemāk esošajā videoklipā. Ceru, ka jums patika apmācība un uzzinājāt kaut ko noderīgu. Ja jums ir kādi jautājumi, atstājiet tos komentāru sadaļā vai izmantojiet mūsu forumus citiem tehniskiem jautājumiem.