FAKTABLAD

Johan Futsæther, 21.12.97, 03.05.01, 05.03.04

               

 

Interupt.

 

Et interupt er en melding til uP om at en enhet, eller et program, vil ha oppmerksomhet.

 

Vi skiller mellom to typer interupt.:

 

1. Hardwareinterupt  (IRQ):      15 stk

2. Softwareinterupt    (INT):    241 stk

----------------------------------------------------

Tilsammen antall interupts:      256 stk

==============================

 

Hensikten med et interupt er å få uP til å kjøre en rutine som kan håndtere den enheten (IRQ) eller programmet (INT) som har gitt interuptet. Disse rutinene ligger i hukommelsen eller i BIOS.

For oss som teknikere, blir det hardwareinterupts (IRQ) som vi kommer til å få mest “bry” med.

 

Hvordan håndteres et interupt?

 

Skjematisk fremstilling av et hardwareinterupt (IRQ):

 

 

Forklaring til skissen:

 

Jeg bruker interuptet for en seriemus som eksempel.:

 

Hardwareinterupt. (IRQ):

 

1.   Musen beveges og serieportkortet gir interupt (IRQ) ut på bussen om at den vil betjenes.

2.   PIC (Programable Interupt Controller) registrerer interuptet og sender det videre til uP med en INTR-instruksjon.

3.   uP må først “gjemme unna” det den arbeidet med akkurat nå på en “stakk”.

4.   uP gir tilbakemelding til PIC med en INTA (Interupt Acknowledge) om at den har  registrert og godkjenner at en interupt er på vei.

5.   PIC sier nå fra til uP hvilket interupt det er ved å legge ut interuptnummeret på en 8 bits buss til uP. (Ett interupt (IRQ) mellom 3 og 15)

6.   uP “ser” i vektortabellen for å finne adressen til rutinen som skal utføres.

7.   uP “hopper” til den riktige adresse og utfører rutinen.

 

Softwareinterupt. (INT)

 

1.   uP får en instruksjon fra et program (ikke fra PIC) om hvilket interupt det er. Dette blir det samme punktet som punkt 5 i hardwareinteruptforklaringen.  Punkt 6 og 7 er de samme for soft og hardwareinterupt.

 

Hvordan finner uP den rette adressen til rutinen i vektortabellen.?                    

Vektortabellen inneholder vektorene (IP og CS) som er adressen til aktuell rutine. Hver vektor tar 4 byte. Det betyr at vi kan legge inn nye vektorer for hver 32 bit (4 byte). Forbindelsen mellom interupt og rett vektor i vektortabellen ligger i at vi multipliserer interuptet med 4.

 

Eksempel.

 

På hvilken adresse i vektortabellen ligger adressen til musrutinen?

 

Serieporten har interupt  IRQ 4  = INT 0C   ( I følge tabellen nederst på siden.)

 

0C * 4 = 12 * 4 = 48 (Dec) = 30 H

 

Hva skjer viss noen manipulerer med adressene i vektortabellen?

Viss vektortabellen blir manipulert, vil det ikke være sammenheng mellom interupt og adressen til riktig rutine.

 

Eks.

 

Vi bruker eksempelet med interuptet fra COM 1. Rutinen ligger i hukommelsen.

 

DOS-programmet DEBUG er et program som gjør at du kan skrive rett inn i hukommelsen. Vi bruker dette programmet til å manipulere vektortabellen.

 

0.   Start opp Mouse.com 

1.   Tast DEBUG  [return]

2.   Skriv inn F 0:30 L 4  00 00 FF FF [return]

3.   Skriv Q [return]

 

Du har nå fylt (F) inn i segmentadresse 0 og offsetadresse 30 i vektortabellen fire byte med data (L 4). Disse data er adressen FF FF 00 00 som ikke er adressen til musrutinen, men adressen til Bootrutinen. Maskinen vil nå boote når prøver å bruke musen.

 

Vil du at dette automatisk skal gjøres hver gang maskinen starter opp, gjør du følgende:

 

1.   Lag en BAT fil hvor du skriver inn punkt 2 og 3 ovenfor. Filen kan f.eks. hete BOOT.BAT.

2.  Du kobler DEBUG-programmet med BOOT.BAT ved å skrive:

      DEBUG < BOOT.BAT

3.   Linjen ovenfor kan nå legges inn i autoexec.bat sammen med andre “artigheter.”

 

Hvordan kan jeg finne interuptnummeret ?

For  finne alle 256 interuptnummer, må du bruke hjelpeprogram/litteratur. Interuptnummer er standardisert. Det er bare hardwareinterupt (IRQ) som er interessant for oss. IRQ er nummerert fra 1 til 15, men det er ikke det samme som at de ligger som de 15 første interupt blant de 256 interupts. Her er en interupt-tabellen for hardwareinterupts (IRQ)

 

Nummer i

INTTAB

8/16 XT/AT ?

IRQ

nr:

Hvem gir disse interupt?

(Interupthandler)

 

Nummer i INTTAB

8/16 XT/AT ?

IRQ

nr:

Hvem gir disse interupt?

(Interupthandler)

08

XT/AT

0

Systemtimer

 

71

AT

9

Redirigert INT 2

09

XT/AT

1

Tastaturkontroller (ceyb.ctrl)

 

72

AT

10

Ledig

0A

XT/AT

2

Ledig/Avbruddsctrl. krets 2

 

73

AT

11

Ledig

0B

XT/AT

3

Serieport 2. (Com 2)

 

74

AT

12

Musport på H.kort 

0C

XT/AT

4

Serieport 1. (Com 1)

 

75

AT

13

Matteprosessor

0D

XT/AT

5

Parallellport 2 (LPT 2)

 

76

AT

14

Harddiskkontroller

0E

XT/AT

6

Kontroller for diskettstasjon

 

77

AT

15

Ledig

0F

XT/AT

7

Parallellport 1. (LPT 1)

 

 

 

 

 

70

AT

8

Real-time-klokke/CMOS

 

 

 

 

 

 

Laveste IRQ-nummer har høyest prioritet, men interupt 8 til 15 har høyere prioritet enn 3 til 7. Dette kommer av at vi får tilgang til interupt 8 til 15 gjennom interupt 2. Se Interupt 2 og 9.