- Zašto trebamo prekid?
- Vrste prekida u MSP430
- Kontrola programa prekida u MSP430
- MSP430 krug za testiranje GPIO prekida
- Programiranje MSP430 za prekide
- Učitavanje programa na MSP430 s CCS-a
- Program prekida na MSP430
Razmislite o jednostavnom digitalnom satu koji je programiran tako da vam samo pokazuje vrijeme, a sada zamislite da želite promijeniti njegovu vremensku zonu. Što bi ti napravio? Jednostavno pritisnete gumb koji se mijenja u izbornik koji vam omogućuje promjenu vremenske zone. Ovdje sustav ne može predvidjeti vaš vanjski prekid prema vremenskim procesima i ne može tražiti od vas da pričekate jer je zauzet povećavanjem vrijednosti sekundi na vašem satu. Tu dobro dolaze prekidi.
Prekidi ne moraju uvijek biti vanjski; može biti i unutarnja. Većina puta u ugrađenom prekidu također olakšava komunikaciju između dvije periferne jedinice CPU-a. Uzmite u obzir da se unaprijed postavljeni timer resetira i pokreće se prekid kada vrijeme dosegne vrijednost u registru tajmera. Obrađivač prekida može se koristiti za pokretanje ostalih perifernih uređaja poput DMA.
U ovom uputstvu koristili smo vanjske prekide na MSP430 za prebacivanje različitih LED dioda. Kada se promjenom stanja pritiskom na tipku zada vanjski prekid, kontrola se prebacuje (unaprijed isprazni) na ISR i on čini potrebno. Da biste znali osnove poput postavljanja CCS okruženja za lansirnu ploču MSP430G2, slijedite ovu vezu kako započnete s MSP430 pomoću CCS-a jer u ovom vodiču nećemo ulaziti u detalje o tome. Također provjerite ostale vodiče temeljene na MSP430 koji koriste Energia IDE i CCS slijedeći vezu.
Zašto trebamo prekid?
Prekidi su potrebni za spremanje općih troškova glasanja u ugrađenom sustavu. Oni se pozivaju kada je potrebno izvršiti zadatke s većim prioritetom preduhitrući trenutni izvršeni zadatak. Također se može koristiti za buđenje CPU-a i iz načina rada male snage. Kad ga probudi prijelaz ruba vanjskog signala kroz GPIO priključak, izvršava se ISR i CPU se vraća natrag u način rada male snage.
Vrste prekida u MSP430
Na prekida u MSP430 dolaze pod sljedećim types-
- Resetiranje sustava
- Nemaskirani prekid
- Maskabilan prekid
- Vektorski i nevektorski prekidi
Poništavanje sustava:
To se može dogoditi zbog napona napajanja (Vcc) i zbog slabog signala u RST / NMI pinu s odabranim načinom resetiranja, a može se dogoditi i iz razloga kao što su preljev nadzornika i kršenje sigurnosnog ključa.
Nemaskirani prekid:
Upute CPU-a ne mogu prikriti ove prekide. Jednom kada je omogućen opći prekid, nemaskirani prekid ne može se preusmjeriti iz obrade. To generiraju izvori poput kvarova oscilatora i ruba koji se ručno daje RST / NMI (u načinu NMI).
Maskabilni prekid:
Kada se dogodi prekid i ako se može prikriti CPU naredbom, onda je to Maskable Interrupt. Ne moraju uvijek biti vanjski. Oni također ovise o perifernim uređajima i njihovim funkcijama. Ovdje korišteni vanjski prekidi porta spadaju u ovu kategoriju.
Vektorski prekidi i nevektorski prekidi:
Vektorirano: U ovom slučaju, uređaji koji prekidaju pružaju nam izvor prekida prosljeđivanjem adrese vektora prekida. Ovdje je adresa ISR-a fiksna i kontrola se prenosi na tu adresu, a ISR se brine za ostalo.
Bez vektora: Ovdje su svi prekidi zajednički ISR. Kad dođe do prekida iz nevektorskog izvora, kontrola se prenosi na zajedničku adresu na koju dijele svi nevektorski prekida.
Kontrola programa prekida u MSP430
Kada dođe do prekida, MCLK se UKLJUČUJE i CPU se ponovno poziva iz stanja ISKLJUČENO. Kako se kontrola programa prenosi na ISR adresu nakon pojave prekida, vrijednosti u programskom brojaču i statusnom registru premještaju se u stog.

Uzastopno, statusni registar se briše, čime se briše GIE i prekida način rada male snage. Prekid s najvišim prioritetom odabire se i izvršava postavljanjem adrese vektora prekida u brojač programa. Prije nego što dođemo do našeg primjera koda prekida MSP430 GPIO, važno je razumjeti rad lučkih registara koji su u njega uključeni.
Registri luka za GPIO kontrolu na MSP430:
PxDIR: To je registar za kontrolu smjera luke. Omogućuje programeru da posebno odabere svoju funkciju zapisujući 0 ili 1. Ako je pin označen kao 1, tada djeluje kao izlaz. Smatrajte priključak 1 8-bitnim priključkom, a ako se pinovi 2 i 3 trebaju dodijeliti kao izlazni priključci, tada P1DIR registar mora biti postavljen s vrijednošću 0x0C.
PxIN: To je registar samo za čitanje i trenutne vrijednosti u portu se mogu čitati pomoću ovog registra.
PxOUT: Ovaj se određeni registar može koristiti za izravno upisivanje vrijednosti u portove. To je moguće samo kada je onemogućen registar izvlačenja / izvlačenja.
PxREN: To je 8-bitni registar koji se koristi za omogućavanje ili onemogućavanje registra izvlačenja / izvlačenja. Kada je pin postavljen kao 1 u registru PxREN i PxOUT, tada se određeni pin povlači prema gore.
|
PxDIR |
PxREN |
PxOUT |
I / O konfiguracija |
|
0 |
0 |
x |
Ulaz s onemogućenim otpornicima |
|
0 |
1 |
0 |
Ulaz s omogućenim internim padajućim sustavom |
|
0 |
1 |
1 |
Ulaz s omogućenim internim izvlačenjem |
|
1 |
x |
x |
Izlaz - PxREN nema učinka |
PxSEL i PxSEL2: Kako su svi pinovi u MSP430 multipleksirani, prije upotrebe mora se odabrati određena funkcija. Kada su i registri PxSEL i PxSEL2 postavljeni kao 0 za određeni pin, tada se odabire općenito I / O. Kad je PxSEL postavljen na 1, odabire se primarna periferna funkcija itd.
PxIE: Omogućuje ili onemogućava prekide za određeni pin u priključku x.
PxIES: Odabire rub na kojem se generira prekid. Za 0 se odabire usponski rub, a za 1 padajući rub.
MSP430 krug za testiranje GPIO prekida
Krug MSP430 koji se koristi za testiranje našeg primjera prekida MSP430 prikazan je u nastavku.

Uzemljenje ploče služi za uzemljenje i LED-a i gumba. Dijagonalno suprotne strane gumba obično su otvoreni terminali i spajaju se kad se tipka pritisne prema dolje. Otpor je spojen prije LED diode kako bi se izbjegla velika potrošnja struje od LED diode. Obično se koriste niski otpornici u rasponu od 100ohm - 220ohm.
Koristimo 3 različita koda da bismo bolje razumjeli prekide porta. Prva dva koda koriste isti krug kao na shemi krugova 1. Zaronimo u kôd. Nakon uspostavljanja veza, moja postavka izgleda ovako.

Programiranje MSP430 za prekide
Kompletni program prekida MSP430 nalazi se na dnu ove stranice, objašnjenje koda je sljedeće.
Redak u nastavku zaustavlja rad tajmera za nadzor. Tajmer čuvara obično izvodi dvije operacije. Jedna sprečava beskonačne petlje kontrolera resetiranjem kontrolera, a druga je što pokreće periodične događaje pomoću ugrađenog tajmera. Kada se mikrokontroler resetira (ili uključi), on je u načinu odbrojavanja i nastoji resetirati MCU nakon 32 milisekunde. Ova linija zaustavlja kontroler u tome.
WDTCTL = WDTPW + WDTHOLD;
Postavljanjem registra P1DIR na vrijednost 0x07 postavlja se smjer pin0, pin1 i pin2 kao izlaz. Postavljanjem P1OUT na 0x30 konfigurira se ulaz s ugrađenim otporima na izvlačenje na pin4 i pin5. Postavljanje P1REN na 0x30 omogućuje unutarnje izvlačenje na tim klinovima. P1IE omogućuje prekid, pri čemu P1IES odabire visoki prema niskom prijelazu kao rub prekida na tim pinovima.
P1DIR - = 0x07; P1OUT = 0x30; P1REN - = 0x30; P1IE - = 0x30; P1IES - = 0x30; P1IFG & = ~ 0x30;
Sljedeći redak omogućuje način rada male snage i omogućuje GIE u registru statusa tako da se mogu primati prekidi.
__bis_SR_register (LPM4bits + GIE)
Programski brojač postavlja se s adresom vektora porta 1 pomoću makronaredbe.
PORT1_VECTOR . #pragma vector = PORT1_VECTOR __prekinuti prazninu Port_1 (void)
Donji kôd prebacuje svaku od LED dioda spojenih na pin0, pin1, pin2 jednu po jednu.
ako (broji% 3 == 0) { P1OUT ^ = BIT1; P1IFG & = ~ 0x30; brojati ++; } else if (count% 3 == 1) { P1OUT ^ = BIT1; P1IFG & = ~ 0x30; brojati ++; } else { P1OUT ^ = BIT2; P1IFG & = ~ 0x30; brojati ++; }
Kružni dijagram 2:
Slično tome, pokušajmo s drugim značkom da bismo puno bolje razumjeli koncept. Dakle, ovdje je tipka spojena na pin 2.0 umjesto na pin 1.5. modificirani sklop je sljedeći. Ponovno se ovaj krug koristi za testiranje programa prekida gumba MSP430.

Ovdje se ulaz 2 koristi za ulaz. Dakle, moraju se koristiti različiti vektori prekida. P1.4 i P2.0 uzimaju ulaze.
Kako se port 2 koristi samo za ulaz, P2DIR je postavljen na 0. Da bi pin0 porta 2 postavili kao ulaz s omogućenim unutarnjim povlačnim otpornicima, registri P2OUT i P2REN moraju se postaviti s vrijednošću 1. Da bi se omogućilo prekida na pin0 priključka 2, a također i za odabir ruba prekida, P2IE i P2IES postavljaju se s vrijednošću 1. Da bi resetirali zastavicu u priključku 2, P2IFG se briše, tako da se zastava može ponovno postaviti na pojava prekida.
P2DIR - = 0x00; P2OUT = 0x01; P2REN - = 0x01; P2IE - = 0x01; P2IES - = 0x01; P2IFG & = ~ 0x01;
Kad je izvor prekida iz priključka 1, tada LED lampica spojena na pin1 priključka 1 svijetli. Kad izvor prekida pripada priključku 2, tada LED lampica spojena na pin2 priključka 1 svijetli.
#pragma vector = PORT1_VECTOR __prekinuti prazninu Port_1 (void) { P1OUT ^ = BIT1; P1IFG & = ~ 0x10; za (i = 0; i <20000; i ++) { } P1OUT ^ = BIT1; } #pragma vector = PORT2_VECTOR __prekinuti prazninu Port_2 (void) { P1OUT ^ = BIT2; P2IFG & = ~ 0x01; za (j = 0; j <20000; j ++) { } P1OUT ^ = BIT2; }
Učitavanje programa na MSP430 s CCS-a
Da biste projekt učitali na lansirnu ploču i otklonili pogreške, odaberite projekt i kliknite ikonu za uklanjanje pogrešaka na alatnoj traci. Ili pritisnite F11 ili kliknite RunàDebug za ulazak u način uklanjanja pogrešaka.

Nakon ulaska u način otklanjanja pogrešaka, pritisnite zelenu tipku za pokretanje da biste slobodno pokrenuli učitani kôd u MCU-u. Sada, kada je tipka pritisnuta, prekid se pokreće promjenom ruba, što dovodi do promjene stanja LED-a.

Program prekida na MSP430
Nakon uspješnog prijenosa koda, možemo ga testirati jednostavnim pritiskom na gumb. Uzorak LED-a promijenit će se u skladu s našim programom kad god se tipkom pritisne tipka.

Kompletan rad možete pronaći u video linku ispod. Nadam se da ste uživali u vodiču i naučili nešto korisno. Ako imate pitanja, ostavite ih u odjeljku za komentare ili upotrijebite naše forume za druga tehnička pitanja.
