Intel 8259

Intel 8259 er en familie af programmerbare interrupt controllere (PIC'er) udviklet af Intel til Intel 8080 , Intel 8085 og Intel 8086 mikroprocessorer . Familien bestod oprindeligt af modellerne 8259, 8259A og 8259B, men mange andre kompatible modeller er blevet skabt af andre producenter til dato. 8259 fungerer som en multiplekser , der kombinerer flere afbrydelseskilder til en enkelt afbrydelseskilde for at afbryde en anden enhed, for hvilken det er lettere at håndtere afbrydelsesprioritetsniveauer og deres mulige indlejring.

Historie

Den originale version af controlleren var kun beregnet til processorerne 8080 og 8085. På afbrydelsesbekræftelsessignalet udsendte den tre bytes på bussen, den første svarede til "Call subroutine" opkoden (værdi 0xCD i hexadecimal), derefter to bytes på opkaldsadressen for denne underrutine, som skulle skrives til de interne registre i controlleren svarende til hver afbrydelseskilde. 8259A-chippen blev frigivet til x86-familien af ​​processorer, fordi kontroloverførselsmekanismen er ændret. Nu blev der udstedt to bytes sekventielt til bussen, den første var "tomgang", mikroprocessoren ignorerede dens værdi, den anden byte indeholdt interrupt-vektornummeret, og adressen, hvortil programafviklingen skulle transmitteres, blev taget fra interrupt-vektortabellen . For 8086-, 80186- og 8088-processorerne optog den den laveste kilobyte af hukommelsesadresserummet. Med senere, startende med 80286, kunne interrupt-vektortabellen flyttes til enhver hukommelsesplacering.

8259A blev inkluderet i den originale IBM PC i 1980 og blev bibeholdt i IBM PC/XT- arkitekturen , der blev introduceret i 1983 . Med introduktionen af ​​IBM PC/AT kom den anden 8259A-chip. 8259A-familien blev efterfølgende udfaset til fordel for Intel APIC- arkitekturen , oprindeligt designet til multiprocessor-pc'er.

Faktisk er 8259A siden begyndelsen af ​​1990'erne ikke blevet brugt som en separat enhed, men er blevet en del af chipset-chippen, senere end sydbroen . En af de mest berømte chips, der fuldt ud integrerede funktionaliteten af ​​alle de programmerbare controllere, der var på IBM PC-AT-kortet, var 82C206-chippen, udgivet af Chips & Technologies i 1988.

I USSR blev 8259 produceret som KR580VN59, og 8259A, som en programmerbar controller-chip til prioriterede interrupts KR1810VN59A [1]

De vigtigste konklusioner brugt i 8259 er:

Der kan tilsluttes op til 8 8259 slaver til 8259 masteren, hvilket giver op til 64 interrupts. Ved kaskade forbindes slavens INT-udgang til en af ​​IRQ-linjerne på 8259-masteren.

8259 har tre registre:

Afbrydelsesterminering (EOI) operationer er kategoriseret som specificeret, uspecificeret og automatisk. Den EOI-specifikke operation specificerer, hvilket interrupt-niveau, der skal bekræftes i ISR'en (faktisk hvilken bit, der skal slettes i ISR'en). En uspecificeret EOI-kommando nulstiller den højest prioriterede IRQ-linje, der behandles. Den automatiske EOI-tilstand rydder en smule i ISR ​​umiddelbart efter, at afbrydelsen er bekræftet.

Kant- og niveauafbrydelsestilstande understøttes.

Faste og cykliske prioritetsskiftetilstande understøttes.

8259A kan konfigureres til at arbejde med en 8088 eller 8086. Det vil sige en 8 eller 16 bit databus .

Programmeringsfunktioner

DOS og Windows

Programmering af 8259A under DOS og Microsoft Windows forårsagede et betydeligt antal pinlige bagudkompatibilitetsproblemer, der havde rødder tilbage til de første pc'er i 1981.

Det første problem er mere eller mindre kilden til det andet. DOS-enhedsdrivere skal sende en uspecificeret EOI-kommando, når de er færdige med at servicere deres enhed. På grund af dette er brugen af ​​andre afbrydelsestermineringstilstande vanskelig (det er ikke altid muligt at garantere, at det ønskede niveau ikke nulstilles tidligere). Det gør det også umuligt at skelne mellem afbrydelser omdirigeret fra 8259-masteren til slaven.

Det andet problem opstår ved brug af IRQ2 og IRQ9, som dukkede op, da slaven 8259A blev introduceret i PC/AT. Slave 8259's INT-udgang er forbundet til masterens IRQ2-linje. IRQ2-linjen på ISA-bussen, der tidligere var forbundet til denne linje, er nu blevet omdirigeret til IRQ1-udgangen på slaven. Så nu udløser busafbrydelse IRQ2 IRQ9. For kompatibilitet med DOS-drivere, der stadig forventer IRQ2, er der tilføjet en handler, der omdirigerer IRQ9 til den originale IRQ2-handler.

I pc'ens BIOS (og dermed DOS) kortlægger man traditionelt master 8259 interrupt requests (IRQ0-IRQ7) for at afbryde vektorerne INT08-INT0F hhv. Og 8259A slaveanmodninger (i PC/AT og videre) IRQ8-IRQ15 til INT70-INT77. Dette blev gjort på trods af, at de første 32 interrupt-vektorer er reserveret til interne processor-interrupts (af en eller anden grund ignorerede pc-arkitekturdesignerne dette faktum). Derfor kortlægger de fleste andre operativsystemer interrupts (i det mindste for 8259-masteren) til en anden række af interrupt-vektorer.

Andre operativsystemer

De fleste andre operativsystemer tillader andre driftsformer for 8259A, såsom automatisk afbrydelsesterminering. Dette er især vigtigt for moderne x86 -baserede systemer , hvor en betydelig mængde tid kan spildes på I/O-rumlatens på 8259-operationer. Det tillader også, at yderligere timing-optimeringer, såsom kritiske sektioner, kan introduceres på multiprocessorsystemenheder 8259.

Kant-/niveaudriftstilstand

Fordi ISA-bussen ikke understøtter niveauafbrydelser, for PC/XT-, PC/AT- og MCA-systemer, skal 8259A indstilles til kant-til-kant. På nyere EISA , PCI og senere er der Edge/Level Control Registers (ELCR'er), der giver dig mulighed for at indstille driftstilstanden for hver IRQ-linje individuelt, hvilket effektivt eliminerer behovet for at indstille 8259-driftstilstanden for sådanne systemer med ISA-bus .

Disse registre er placeret på adresserne 0x4d0 og 0x4d1 i x86 I/O-adresserummet. Deres dimension er 8 bit, hver bit svarer til en af ​​IRQ 8259A linjerne. Når bit er indstillet, udløses IRQ-linjen på niveauet, ellers på forsiden.

Spontane afbrydelser

Under visse forhold kan 8259A generere en spontan afbrydelse, normalt IRQ7 og meget sjældnere IRQ15.

I det første tilfælde nulstilles IRQ-linjen, før den kvitteres. Dette kan skyldes støj på IRQ-linjerne. I kant-til-kant-tilstand skal støjen holde linjen højt i 100 ns (minimumstiden for at skrive til en IRR-flip-flop). Når støjen er væk, vil pull-up-modstanden trække IRQ-niveauet lavt og dermed generere en falsk afbrydelse. Ved niveaudrift kan støj forårsage en høj tilstand på INTR-linjen. Når systemet udsteder en anmodning om afbrydelsesbekræftelse, vil 8259 ikke have dataene til at aktivere det og vil udstede IRQ7 (standardværdien). Sådan kan falske IRQ7'er fremstå.

Et lignende tilfælde kan forekomme, når 8259A-afmaskningen og IRQ-linjenulstillingen ikke er omhyggeligt synkroniseret. I mange systemer nulstilles IRQ-linjen af ​​en skrivekommando til I/O-adresserum, og processoren venter ikke på, at instruktionen når I/O-enheden. Hvis processoren fortsætter og afmasker det passende 8259A-niveau, før IRQ-linjen nulstilles fra enheden, vil 8259A udstede en INTR-afbrydelsesanmodning igen. På det tidspunkt, hvor processoren genkender denne INTR-anmodning og udsteder en bekræftelse, kan IRQ-linjen blive nulstillet, og 8259A vil returnere en spontan IRQ7.

Det andet tilfælde ligner det første, bortset fra at den angivne situation gælder for slaveanordningen, dvs. når master IRQ2-linjen er aktiv i det øjeblik, hvor slave 8259 IRQ-linjerne er inaktive af den faldende kant af afbrydelsesbekræftelse (INTA). I dette tilfælde vil spontan IRQ15 blive vist, men dette er et yderst sjældent tilfælde.

Derfor anbefales det, når du arbejder med IRQ7, at kontrollere i begyndelsen af ​​interrupt-handleren for genindtastning og kontrollere ISR 8259A-registret for at fastslå, at dette ikke er en spontan afbrydelse, men en interrupt, der faktisk kom fra IRQ7-linjen.

PC/XT og PC/AT

IBM PC/XT- arkitekturen havde kun én 8259A interrupt controller, og startende med IBM PC/AT modtog systemerne en anden, slave 8259A. IRQ0...IRQ7-linjerne er IR0..IR7-linjerne på master 8259A, og IRQ8...IRQ15-linjerne er IR0..IR7-linjerne i slave 8259A. IRQ0…IRQ15 er ISA-buslinjerne, som 8259A historisk har været forbundet til.

Oprindeligt var IRQ7 det almindelige valg til brug i lydkort, men IRQ5 blev senere brugt i denne rolle for at undgå konflikt med LPT-printerporten. Serielporte blev ofte deaktiveret for at frigøre IRQ-linjen til en anden enhed.

Se også

Noter

  1. Pod. udg. tilsvarende medlem Videnskabernes Akademi for den ukrainske SSR B.N. Malinovsky. Kapitel 2.6. Mikrokredsløb af den programmerbare styreenhed af prioritetsafbrydelser KR1810VN59A // Håndbog til personlige computere = Håndbog til personlige computere. - K . : Technika, 1990. - S. 384. - ISBN 5-335-00168-2 . Side 81

Litteratur