- Miksi tarvitsemme keskeytyksiä?
- Keskeytystyypit MSP430: ssa
- Keskeytä ohjelman hallinta MSP430: ssa
- MSP430-piiri GPIO-keskeytyksen testaamiseksi
- MSP430: n ohjelmointi keskeytyksille
- Ohjelman lataaminen CCS: ltä MSP430: een
- Keskeytysohjelma MSP430: lla
Harkitse yksinkertaista digitaalikelloa, joka on ohjelmoitu näyttämään sinulle vain aikaa. Kuvittele nyt, että haluat muuttaa aikavyöhykettään. Mitä sinä tekisit? Painat vain painiketta, joka vaihtaa valikkoon, jonka avulla voit muuttaa aikavyöhykettä. Täällä järjestelmä ei voi ennustaa ulkoista keskeytystäsi ajanpitoprosesseihin eikä voi pyytää sinua odottamaan, koska se on varattu lisäämään kellosi sekuntiarvoa. Tässä keskeytykset ovat käteviä.
Keskeytysten ei tarvitse aina olla ulkoisia; se voi olla myös sisäinen. Suurin osa upotetun keskeytyksen aikoista helpottaa myös prosessorin kahden oheislaitteen välistä viestintää. Harkitse, että ennalta asetettu ajastin nollataan ja keskeytys laukaistaan, kun aika saavuttaa ajastinrekisterin arvon. Keskeytyskäsittelijää voidaan käyttää muiden oheislaitteiden, kuten DMA: n, käynnistämiseen.
Tässä opetusohjelmassa olemme käyttäneet MSP430: n ulkoisia keskeytyksiä eri LEDien vaihtamiseen. Kun tilanvaihto antaa painikkeella ulkoisen keskeytyksen, ohjaus siirretään (ennalta tyhjennetään) ISR: ään ja se tekee tarpeellisen. Jos haluat tietää perusasiat, kuten CCS-ympäristöasetukset MSP430G2-käynnistyslevylle, seuraa tätä linkkiä, jotta pääset alkuun MSP430: n kanssa CCS: n avulla, koska emme käsittele yksityiskohtia tässä opetusohjelmassa. Tarkista myös muut MSP430-pohjaiset oppaat käyttämällä Energia IDE: tä ja CCS: ää seuraamalla linkkiä.
Miksi tarvitsemme keskeytyksiä?
Keskeytyksiä tarvitaan äänestyskustannusten tallentamiseksi upotettuun järjestelmään. Ne kutsutaan, kun korkeamman prioriteetin tehtävät on suoritettava ennakoimalla nykyinen käynnissä oleva tehtävä. Sitä voidaan käyttää myös suorittimen herättämiseen pienitehoisista tiloista. Kun se herätetään ulkoisen signaalin reunamuutoksella GPIO-portin kautta, ISR suoritetaan ja CPU palaa jälleen takaisin virransäästötilaan.
Keskeytystyypit MSP430: ssa
Katkaisevat vuonna MSP430 kuuluvat seuraavat tyypit-
- Järjestelmän nollaus
- Ei-peitettävä keskeytys
- Peittävä keskeytys
- Vektorit ja ei-vektorittomat keskeytykset
Järjestelmän nollaus:
Se voi johtua syöttöjännitteestä (Vcc) ja alhaisesta signaalista RST / NMI-nastassa, kun nollaus-tila on valittu, ja se voi johtua myös syistä, kuten valvojan ajastimen ylivuoto ja suojausavaimen rikkominen.
Ei-peitettävä keskeytys:
Näitä keskeytyksiä ei voida peittää suorittimen ohjeilla. Kun yleinen keskeytys on käytössä, ei-peitettävää keskeytystä ei voida ohjata käsittelystä. Tämän tuottavat lähteet, kuten oskillaattoriviat, ja RST / NMI: lle manuaalisesti annettu reuna (NMI-tilassa).
Peittävä keskeytys:
Kun tapahtuu keskeytys ja jos se voidaan peittää CPU-käskyllä, se on Maskable Interrupt. Niiden ei tarvitse olla aina ulkoisia. Ne riippuvat myös oheislaitteista ja niiden toiminnoista. Tässä käytetyt ulkoisen portin keskeytykset kuuluvat tähän luokkaan.
Vektoritut keskeytykset ja vektorittomat keskeytykset:
Vektoroitu: Tässä tapauksessa keskeyttävät laitteet antavat meille keskeytyksen lähteen välittämällä keskeytysvektorin osoitteen. Tässä ISR: n osoite on kiinteä ja ohjaus siirretään siihen osoitteeseen ja ISR huolehtii lopusta.
Ei-vektoroitu: Täällä kaikilla keskeytyksillä on yhteinen ISR. Kun keskeytys tapahtuu vektorittomasta lähteestä, ohjaus siirretään yhteiseen osoitteeseen, johon kaikki vektorittomat keskeytykset jakavat.
Keskeytä ohjelman hallinta MSP430: ssa
Kun keskeytys tapahtuu, MCLK kytketään päälle ja keskusyksikkö kutsutaan takaisin OFF-tilasta. Kun ohjelman ohjaus siirretään ISR-osoitteeseen keskeytyksen tapahtuessa, ohjelmalaskurin ja tilarekisterin arvot siirretään pinoon.
Tällöin tilarekisteri tyhjennetään, mikä poistaa GIE: n ja lopettaa virransäästötilan. Keskeytys suurimmalla prioriteetilla valitaan ja suoritetaan asettamalla keskeytysvektoriosoite ohjelmalaskuriin. Ennen kuin pääsemme MSP430 GPIO-keskeytysesimerkkiin, on tärkeää ymmärtää siihen liittyvien satamarekistereiden toiminta.
MSP430: n GPIO-ohjauksen porttirekisterit:
PxDIR: Se on portin suunnanhallintarekisteri. Sen avulla ohjelmoija voi valita toimintonsa nimenomaisesti kirjoittamalla 0 tai 1. Jos tappi valitaan 1, se toimii ulostulona. Pidä porttia 1 8-bittisenä porttina, ja jos nastat 2 ja 3 määritetään lähtöportteiksi, P1DIR-rekisteri on asetettava arvolla 0x0C.
PxIN: Se on vain luku -rekisteri ja portin nykyiset arvot voidaan lukea tämän rekisterin avulla.
PxOUT: Tätä rekisteriä voidaan käyttää arvojen kirjoittamiseen suoraan portteihin. Tämä on mahdollista vain, kun haku- / pudotusrekisteri on poistettu käytöstä.
PxREN: Se on 8-bittinen rekisteri, jota käytetään vetämään / pudottamaan -rekisterin käyttöön ottamiseen tai poistamiseen käytöstä. Kun tappi asetetaan 1: ksi sekä PxREN- että PxOUT-rekisterissä, kyseinen tappi vedetään ylös.
PxDIR |
PxREN |
PxOUT |
I / O-määritykset |
0 |
0 |
X |
Tulo vastusten ollessa poissa käytöstä |
0 |
1 |
0 |
Sisääntulo, kun sisäinen pudotus on käytössä |
0 |
1 |
1 |
Sisääntulo, kun sisäinen veto on käytössä |
1 |
X |
X |
Lähtö - PxREN ei vaikuta |
PxSEL ja PxSEL2: Koska kaikki MSP430 : n nastat ovat multipleksoituja, tietty toiminto on valittava ennen sen käyttöä. Kun sekä PxSEL- että PxSEL2-rekisterit on asetettu arvoksi 0 tietylle pinille, valitaan yleiskäyttöinen I / O. Kun PxSEL on asetettu arvoksi 1, ensisijainen oheislaitetoiminto valitaan ja niin edelleen.
PxIE: Se ottaa käyttöön tai poistaa käytöstä keskeytykset tietylle portille x.
PxIES: Se valitsee reunan, jolla keskeytys syntyy. Kohdassa 0 valitaan nouseva reuna ja arvoksi 1 laskeva reuna.
MSP430-piiri GPIO-keskeytyksen testaamiseksi
MSP430-keskeytysesimerkkikoodimme testaamiseen käytetty MSP430-piiri on esitetty alla.
Levyn maadoitusta käytetään sekä LEDin että painikkeen maadoittamiseen. Painikkeen diagonaalisesti vastakkaiset puolet ovat tavallisesti avoimia liittimiä ja kytkeytyvät, kun painike painetaan alas. LEDin edessä on kytketty vastus, jotta vältetään LEDin suuri virrankulutus. Yleensä käytetään matalia vastuksia alueella 100 ohm - 220 ohm.
Käytämme 3 erilaista koodia saadaksemme paremman käsityksen sataman keskeytyksistä. Kaksi ensimmäistä koodia käyttävät samaa virtapiiriä kuin piirikaaviossa 1. Sukelletaan koodiin. Kun liitännät on tehty, kokoonpanoni näyttää tältä.
MSP430: n ohjelmointi keskeytyksille
Täydellinen MSP430-keskeytysohjelma löytyy tämän sivun alaosasta, koodin selitys on seuraava.
Alla oleva viiva estää vahtiajastimen toiminnan. Watchdog-ajastin suorittaa yleensä kaksi toimintoa. Yksi estää ohjainta loputtomilta silmukoilta nollaamalla ohjaimen ja toinen on se, että se laukaisee jaksoittaisia tapahtumia sisäänrakennetun ajastimen avulla. Kun mikrokontrolleri nollataan (tai käynnistetään), se on ajastintilassa ja pyrkii nollaamaan MCU: n 32 millisekunnin kuluttua. Tämä rivi estää ohjainta tekemästä sitä.
WDTCTL = WDTPW + WDTHOLD;
Kun P1DIR- rekisteri asetetaan arvoon 0x07, asetetaan pin0: n, pin1: n ja pin2: n suunta lähdöksi. Kun P1OUT asetetaan arvoon 0x30, se konfiguroidaan tuloksi, kun sisäiset vetovastukset ovat käytössä pin4: ssä ja pin5: ssä. Jos P1REN asetetaan arvoon 0x30, näiden nastojen sisäinen veto tapahtuu. P1IE mahdollistaa keskeytyksen, jossa P1IES valitsee korkeasta matalaan siirtymän keskeytysreunaksi näille nastoille.
P1DIR - = 0x07; P1OUT = 0x30; P1REN - = 0x30; P1IE - = 0x30; P1IES - = 0x30; P1IFG & = ~ 0x30;
Seuraava rivi mahdollistaa pienitehoisen tilan ja GIE: n tilarekisterissä, jotta keskeytykset voidaan vastaanottaa.
__bis_SR_register (LPM4bit + GIE)
Ohjelmalaskuri asetetaan portin 1 vektorin osoitteella makrolla.
PORT1_VECTOR . #pragma vector = PORT1_VECTOR __interrupt void Port_1 (void)
Alla oleva koodi vaihtaa kukin pin0: een, pin1: iin, pin2: een kytketyistä LEDeistä yksitellen.
jos (laske% 3 == 0) { P1OUT ^ = BIT1; P1IFG & = ~ 0x30; laskea ++; } else if (laskea% 3 == 1) { P1OUT ^ = BIT1; P1IFG & = ~ 0x30; laskea ++; } muu { P1OUT ^ = BIT2; P1IFG & = ~ 0x30; laskea ++; }
Piirikaavio 2:
Vastaavasti kokeillaan toista tapia ymmärtää käsite paljon paremmin. Joten tässä painike on kytketty nastaan 2.0 nastan 1.5 sijaan. muokattu piiri on seuraava. Jälleen tätä virtapiiriä käytetään testaamaan MSP430-painikkeen keskeytysohjelma.
Tässä porttia 2 käytetään syötteeksi. Joten on käytettävä erilaista keskeytysvektoria. P1.4 ja P2.0 ottavat tulot.
Koska porttia 2 käytetään vain tuloon, P2DIR on asetettu arvoon 0. Portin 2 pin0 asettamiseksi tuloksi, kun sisäiset vetovastukset ovat käytössä, rekistereiden P2OUT ja P2REN on oltava asetettu arvoon 1. keskeytä portin 2 pin0: lla ja myös keskeytyksen reunan valitsemiseksi, P2IE ja P2IES asetetaan arvoon 1. Jos haluat nollata lipun portissa 2, P2IFG tyhjennetään, jotta lippu voidaan asettaa uudelleen keskeytyksen esiintyminen.
P2DIR - = 0x00; P2OUT = 0x01; P2REN - = 0x01; P2IE - = 0x01; P2IES - = 0x01; P2IFG & = ~ 0x01;
Kun keskeytyslähde on portista 1, portin 1 napaan 1 kytketty LED palaa. Kun keskeytyslähde kuuluu porttiin 2, portin 1 napaan 2 kytketty LED palaa.
#pragma vector = PORT1_VECTOR __interrupt void Port_1 (void) { P1OUT ^ = BIT1; P1IFG & = ~ 0x10; for (i = 0; i <20000; i ++) { } P1OUT ^ = BIT1; } #pragma vector = PORT2_VECTOR __interrupt void Port_2 (mitätöity) { P1OUT ^ = BIT2; P2IFG & = ~ 0x01; for (j = 0; j <20000; j ++) { } P1OUT ^ = BIT2; }
Ohjelman lataaminen CCS: ltä MSP430: een
Voit ladata projektin käynnistysalustalle ja virheenkorjata sen valitsemalla projektin ja napsauttamalla työkalurivin virheenkorjauskuvaketta. Vaihtoehtoisesti paina F11 tai napsauta RunàDebug siirtyäksesi virheenkorjaustilaan.
Kun virheenkorjaustila on tullut, paina vihreää ajopainiketta, jotta ladattu koodi voidaan suorittaa vapaasti MCU: ssa. Nyt kun painonappia painetaan alas, reunan muutos laukaisee keskeytyksen, mikä kehottaa LEDin tilaa muuttumaan.
Keskeytysohjelma MSP430: lla
Kun koodi on lähetetty onnistuneesti, voimme testata sen yksinkertaisesti painikkeella. LED-kuvio muuttuu ohjelmamme mukaan aina, kun keskeytys annetaan painikkeella.
Koko työ löytyy alla olevasta videosta. Toivottavasti pidit opetusohjelmasta ja opit jotain hyödyllistä. Jos sinulla on kysyttävää, jätä ne kommenttiosioon tai käytä foorumeitamme muihin teknisiin kysymyksiin.