Keskeytykset

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

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.

Ohjelmien suorittaminen

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.

Advertisements