Keskeytys on laitteiston tai ohjelmiston prosessorille lähettämä viesti, joka ilmaisee välitöntä huomiota vaativan tapahtuman. Aina kun keskeytys tapahtuu, ohjain lopettaa nykyisen käskyn suorittamisen ja aloittaa keskeytyspalvelurutiinin (ISR) tai keskeytyksen käsittelijän suorittamisen. ISR kertoo prosessorille tai ohjaimelle, mitä tehdä keskeytyksen tapahtuessa. Keskeytykset voivat olla joko laitteistokeskeytyksiä tai ohjelmistokeskeytyksiä.
- Laitteistokeskeytys
- Ohjelmistokeskeytys
- Mitä on pollaus?
- Keskeytykset v/s Polling
- Keskeytyspalvelurutiini
- Keskeytysvektoritaulukko
- Vaiheet keskeytyksen suorittamiseksi
- Kantakäynnistys vs. tasokäynnistys
- Keskeytyksen ottaminen käyttöön ja poistaminen käytöstä
- Interrupt Enable Register
- Keskeytysprioriteetti 8051:ssä
- Keskeytys keskeytyksen sisällä
- Keskeytyksen laukaiseminen ohjelmistolla
Laitteistokeskeytys
Laitteistokeskeytys on elektroninen hälytyssignaali, joka lähetetään prosessorille ulkoiselta laitteelta, kuten levyohjaimelta tai ulkoiselta oheislaitteelta. Kun esimerkiksi painamme näppäimistön näppäintä tai liikutamme hiirtä, ne laukaisevat laitteistokeskeytyksiä, jotka saavat prosessorin lukemaan näppäimen painalluksen tai hiiren asennon.
Ohjelmistokeskeytys
Ohjelmistokeskeytys aiheutuu joko poikkeustilanteesta tai käskykokonaisuuteen sisältyvästä erityisestä käskystä, joka saa aikaan keskeytyksen, kun prosessori suorittaa sen. Esimerkiksi jos prosessorin aritmeettinen logiikkayksikkö suorittaa käskyn jakaa luku nollalla, aiheuttaa divide-by-zero -poikkeuksen, jolloin tietokone keskeyttää laskennan tai näyttää virheilmoituksen. Ohjelmiston keskeytyskäskyt toimivat samalla tavalla kuin aliohjelmakutsut.
Mitä on pollaus?
Jatkuvan seurannan tilaa kutsutaan pollaukseksi. Mikrokontrolleri tarkistaa jatkuvasti muiden laitteiden tilan; ja sitä tehdessään se ei tee mitään muuta operaatiota ja kuluttaa kaiken prosessointiaikansa valvontaan. Tähän ongelmaan voidaan puuttua käyttämällä keskeytyksiä.
Keskeytysmenetelmässä ohjain reagoi vain keskeytyksen tapahtuessa. Siten ohjaimen ei tarvitse seurata säännöllisesti liitettyjen ja sisäänrakennettujen laitteiden tilaa (lippuja, signaaleja jne.).
Keskeytykset v/s Polling
Tässä on analogia, joka erottaa keskeytyksen pollingista –
Keskeytys | Polling |
---|---|
Keskeytys on kuin myymälänhoitaja. Jos joku tarvitsee palvelua tai tuotetta, hän menee hänen luokseen ja ilmoittaa hänelle tarpeensa. Kun kyseessä on keskeytys, kun liput tai signaalit vastaanotetaan, ne ilmoittavat ohjaimelle, että ne tarvitsevat palvelua. | Kyselymenetelmä on kuin myyjä. Myyjä kulkee ovelta ovelle ja pyytää samalla ostamaan tuotteen tai palvelun. Vastaavasti ohjain tarkkailee jatkuvasti kaikkien laitteiden lippuja tai signaaleja yksi kerrallaan ja tarjoaa palvelua sille komponentille, joka tarvitsee sen palvelua. |
Keskeytyspalvelurutiini
Jokaista keskeytystä varten on oltava keskeytyspalvelurutiini (interrupt service routine, ISR) eli keskeytyksen käsittelijä. Kun keskeytys tapahtuu, mikrokontrolleri suorittaa keskeytyspalvelurutiinin. Jokaiselle keskeytykselle on muistissa kiinteä paikka, jossa on sen keskeytyspalvelurutiinin eli ISR:n osoite. ISR:ien osoitteita varten varattujen muistipaikkojen taulukkoa kutsutaan keskeytysvektoritauluksi.
Keskeytysvektoritaulukko
8051:ssä on kuusi keskeytystä RESET mukaan lukien.
Keskeytykset | ROM-sijainti (HEX) | Pin |
---|---|---|
Keskeytykset | ROM-sijainti (HEX) | |
Seriaalinen COM-tietoliittymä (RI… ja TI) | 0023 | |
Timer 1 interrupts(TF1) | 001B | |
Ulkoinen HW-keskeytys 1 (INT1) | 0013 | P3.3 (13) |
Ulkoinen HW-keskeytys 0 (INT0) | 0003 | P3.2 (12) |
Timer 0 (TF0) | 000B | |
Reset | 0000 | 9 |
-
Kun reset-piikki aktivoidaan, 8051 hyppää osoitteeseen 0000. Tämä on käynnistysreset.
-
Ajastimille on varattu kaksi keskeytystä: yksi ajastimelle 0 ja yksi ajastimelle 1. Muistipaikat ovat keskeytysvektoritaulukossa 000BH ja 001BH.
-
Kaksi keskeytystä on varattu laitteiston ulkoisia keskeytyksiä varten. Portin 3 nasta nro 12 ja nasta nro 13 ovat ulkoisia laitteistokeskeytyksiä INT0 ja INT1 varten. Muistipaikat ovat keskeytysvektoritaulukossa 0003H ja 0013H.
-
Sarjaliikenteessä on yksi keskeytys, joka kuuluu sekä vastaanottoon että lähetykseen. Muistipaikka 0023H kuuluu tähän keskeytykseen.
Vaiheet keskeytyksen suorittamiseksi
Kun keskeytys aktivoituu, mikrokontrolleri käy läpi seuraavat vaiheet –
-
Mikrokontrolleri sulkee parhaillaan suoritettavan käskyn ja tallentaa seuraavan käskyn osoitteen (PC) pinoon.
-
Se tallentaa myös kaikkien keskeytysten nykyisen tilan sisäisesti (esim, ei pinossa).
-
Se hyppää keskeytysvektoritaulukon siihen muistipaikkaan, jossa on keskeytyspalvelurutiinin osoite.
-
Mikrokontrolleri saa keskeytysvektoritaulukosta ISR:n osoitteen ja hyppää siihen. Se alkaa suorittaa keskeytyspalvelun aliohjelmaa, joka on RETI (return from interrupt).
-
RETI-käskyn suorittamisen jälkeen mikrokontrolleri palaa paikkaan, jossa se keskeytettiin. Ensin se hakee ohjelmalaskurin (PC) osoitteen pinosta nostamalla pinon ylimmät tavut PC:hen. Sitten se aloittaa suorituksen tästä osoitteesta.
Kantakäynnistys vs. tasokäynnistys
Keskeytysmoduuleja on kahta tyyppiä – tasokäynnistettyjä tai reunakäynnistettyjä.
Tasokäynnistetty | Kantakäynnistetty |
---|---|
Tasokäynnistetty keskeytysmoduuli synnyttää keskeytyksen aina, kun keskeytyslähteen taso vahvistuu. | Kantakäynnistetty keskeytysmoduuli synnyttää keskeytyksen vain silloin, kun se havaitsee keskeytyslähteen vahvistuvan reunan. Reuna havaitaan, kun keskeytyslähteen taso todella muuttuu. Se voidaan havaita myös jaksottaisella näytteenotolla ja havaitsemalla assertoitunut taso, kun edellinen näytteenotto oli deassertoitunut. |
Jos keskeytyslähde on edelleen assertoitunut, kun laiteohjelmiston keskeytyskäsittelijä käsittelee keskeytyksen, keskeytysmoduuli synnyttää keskeytyksen uudestaan, mikä aiheuttaa keskeytyskäsittelijän kutsumisen uudestaan. | Reunan laukaisemiin keskeytysmoduuleihin voidaan reagoida välittömästi riippumatta siitä, miten keskeytyslähde käyttäytyy. |
Level-triggeroidut keskeytykset ovat hankalia laiteohjelmistolle. | Edge-triggeroidut keskeytykset pitävät laiteohjelmiston koodin monimutkaisuuden alhaisena, vähentävät laiteohjelmiston ehtojen määrää ja tarjoavat enemmän joustavuutta keskeytysten käsittelyssä. |
Keskeytyksen ottaminen käyttöön ja poistaminen käytöstä
Nollauksen yhteydessä kaikki keskeytykset poistetaan käytöstä, vaikka ne olisivat aktivoituja. Keskeytykset on otettava käyttöön ohjelmistolla, jotta mikrokontrolleri voi reagoida näihin keskeytyksiin.
IE (interrupt enable) -rekisteri vastaa keskeytyksen ottamisesta käyttöön ja poistamisesta käytöstä. IE on bittiosoitteellinen rekisteri.
Interrupt Enable Register
EA | – | ET2 | ES | ET1 | EX1 | ET0 | EX0 |
---|
-
EA – Globaali aktivointi/deaktivointi.
-
– – Määrittelemätön.
-
ET2 – Ottaa käyttöön ajastin 2:n keskeytyksen.
-
ES – Ottaa käyttöön sarjaportin keskeytyksen.
-
ET1 – Ottaa käyttöön ajastin 1 keskeytyksen.
-
EX1 – Ota käyttöön ulkoinen 1-keskeytys.
-
ET0 – Ota käyttöön ajastin 0-keskeytys.
-
EX0 – Ota käyttöön ulkoinen 0-keskeytys.
Keskeytyksen ottamiseksi käyttöön toimitaan seuraavasti –
-
Ie-rekisterin D7:n bitin (EA) on oltava korkealla, jotta rekisterin muut osat voivat vaikuttaa.
-
Jos EA = 1, keskeytykset aktivoituvat ja niihin reagoidaan, jos IE:ssä niiden vastaavat bitit ovat korkealla. Jos EA = 0, keskeytyksiin ei vastata, vaikka niihin liittyvät nastat IE-rekisterissä olisivat korkealla.
Keskeytysprioriteetti 8051:ssä
Keskeytysprioriteettia voidaan muuttaa osoittamalla korkeampi prioriteetti jollekin keskeytykselle. Tämä tapahtuu ohjelmoimalla rekisteri nimeltä IP (interrupt priority).
Seuraavassa kuvassa on esitetty IP-rekisterin bitit. Nollauksen yhteydessä IP-rekisterissä on kaikki 0:t. Jotta jollekin keskeytykselle annettaisiin korkeampi prioriteetti, IP-rekisterin vastaava bitti asetetaan korkealle.
– | – | – | – | – | PT1 | PX1 | PT0 | PX0 |
---|
– | IP.7 | Ei toteutettu. |
– | IP.6 | Ei toteutettu. |
– | IP.5 | Ei toteutettu. |
– | IP.4 | Ei toteutettu. |
PT1 | IP.3 | Määrittää ajastin 1:n keskeytyksen prioriteettitason. |
PX1 | IP.2. | Määrittää ulkoisen keskeytyksen 1 prioriteettitason. |
PT0 | IP.1 | Määrittää ajastimen 0 keskeytyksen prioriteettitason. |
PX0 | IP.0 | Määrittää ulkoisen keskeytyksen 0 prioriteettitason. |
Keskeytys keskeytyksen sisällä
Mitä tapahtuu, jos 8051 suorittaa keskeytykseen kuuluvaa ISR:ää ja toinen keskeytys aktivoituu? Tällöin korkean prioriteetin keskeytys voi keskeyttää matalan prioriteetin keskeytyksen. Tätä kutsutaan keskeytykseksi keskeytyksen sisällä. 8051:ssä matalan prioriteetin keskeytyksen voi keskeyttää korkean prioriteetin keskeytys, mutta ei mikään toinen matalan prioriteetin keskeytys.
Keskeytyksen laukaiseminen ohjelmistolla
On tilanteita, joissa meidän on testattava ISR:ää simuloinnin avulla. Tämä voidaan tehdä yksinkertaisilla ohjeilla, jotka asettavat keskeytyksen korkealle ja saavat siten 8051:n hyppäämään keskeytysvektoritaulukkoon. Aseta esimerkiksi IE-bitin arvoksi 1 ajastinta 1 varten. Käsky SETB TF1 keskeyttää 8051:n missä tahansa se tekeekin ja pakottaa sen hyppäämään keskeytysvektoritaulukkoon.
Vastaa