Intel 8259

Az Intel 8259 programozható megszakításvezérlők (PIC) családja, amelyet az Intel az Intel 8080 , Intel 8085 és Intel 8086 mikroprocesszorokhoz fejlesztett ki . A család eredetileg a 8259, 8259A és 8259B modellekből állt, de sok más kompatibilis modellt is készítettek a mai napig más gyártók. A 8259 multiplexerként működik , több megszakítási forrást egyetlen megszakítási forrásba kombinálva , hogy megszakítson egy másik eszközt, amelynél könnyebb kezelni a megszakítási prioritási szinteket és azok esetleges egymásba ágyazását.

Történelem

A vezérlő eredeti verziója csak a 8080-as és 8085-ös processzorokhoz készült. A megszakítás nyugtázó jelére három bájtot adott ki a buszon, az első a "Call subrutin" műveleti kódnak felelt meg (0xCD érték hexadecimálisan), majd két bájt ennek az alprogramnak a hívási címe, amelyet az egyes megszakítási forrásoknak megfelelő vezérlő belső regisztereibe kellett írni. A 8259A chipet az x86 processzorcsaládhoz adták ki, mert megváltozott a vezérlés átviteli mechanizmusa. Most két bájtot adtak ki egymás után a buszra, az első "tétlen" volt, a mikroprocesszor figyelmen kívül hagyta az értékét, a második bájt a megszakítási vektor számát tartalmazza, és a megszakítási vektor táblából vették a címet, amelyre a program végrehajtását továbbítani kell. . A 8086-os, 80186-os és 8088-as processzorok esetében ez foglalta el a memória címterének legalacsonyabb kilobájtját. A későbbieknél, a 80286-tól kezdődően, a megszakítási vektortábla bármely memóriahelyre áthelyezhető.

A 8259A 1980-ban került be az eredeti IBM PC -be, és megmaradt az 1983 -ban bevezetett IBM PC/XT architektúrában is . Az IBM PC/AT bevezetésével megjelent a második 8259A chip. A 8259A családot ezt követően fokozatosan kivonták az Intel APIC architektúra javára , amelyet eredetileg többprocesszoros PC-kre terveztek.

Valójában az 1990-es évek eleje óta a 8259A-t nem használták külön eszközként, hanem a chipset chip részévé vált, később, mint a déli híd . Az egyik leghíresebb chip, amely teljes mértékben integrálta az IBM PC-AT kártyán található összes programozható vezérlő funkcióját, a 82C206 chip volt, amelyet a Chips & Technologies 1988-ban adott ki.

A Szovjetunióban a 8259-et KR580VN59-ként, a 8259A-t pedig programozható vezérlőchipként gyártották a KR1810VN59A prioritásos megszakításokhoz [1]

A 8259-ben használt fő következtetések a következők:

Legfeljebb 8 8259 slave csatlakoztatható a 8259 masterhez, akár 64 megszakítást biztosítva. Kaszkádoláskor a slave INT kimenete a 8259 master egyik IRQ vonalához csatlakozik.

A 8259-nek három regisztere van:

Az Interrupt Termination (EOI) műveletek meghatározott, nem meghatározott és automatikus kategóriába sorolhatók. Az EOI-specifikus művelet meghatározza, hogy melyik megszakítási szintet kell nyugtázni az ISR-ben (valójában melyik bitet kell törölni az ISR-ben). Egy meghatározatlan EOI-parancs alaphelyzetbe állítja a feldolgozott legmagasabb prioritású IRQ-vonalat. Az automatikus EOI mód a megszakítás nyugtázása után azonnal törlődik egy kicsit az ISR-ben.

Az él- és szintmegszakítási módok támogatottak.

A fix és ciklikus prioritásváltási módok támogatottak.

A 8259A úgy konfigurálható, hogy 8088-as vagy 8086-os jellel működjön együtt. Vagyis 8 vagy 16 bites adatbusszal .

Programozási jellemzők

DOS és Windows

A 8259A programozása DOS és Microsoft Windows alatt számos kínos visszamenőleges kompatibilitási problémát okozott, amelyek gyökerei az első PC-kig nyúlnak vissza, 1981-ben.

Az első probléma többé-kevésbé a második forrása. A DOS-eszköz-illesztőprogramoknak egy nem meghatározott EOI-parancsot kell küldeniük, ha befejezték eszközük szervizelését. Emiatt más megszakítás-lezárási módok használata nehézkes (nem mindig lehet garantálni, hogy a kívánt szint ne kerüljön visszaállításra korábban). Lehetetlenné teszi a 8259-es mesterről a slave-re átirányított megszakítások megkülönböztetését is.

A második probléma az IRQ2 és IRQ9 használatakor merül fel, ami akkor jelent meg, amikor a slave 8259A bekerült a PC/AT-be. A slave 8259 INT kimenete a master IRQ2 vonalához csatlakozik. Az ISA busz IRQ2 vonala, amely korábban ehhez a vonalhoz volt csatlakoztatva, most át lett irányítva a slave IRQ1 kimenetére. Tehát most az IRQ2 buszmegszakítás váltja ki az IRQ9-et. A még mindig IRQ2-t váró DOS-illesztőprogramokkal való kompatibilitás érdekében egy kezelő került hozzáadásra, amely átirányítja az IRQ9-et az eredeti IRQ2-kezelőre.

A PC BIOS-ban (és így a DOS-ban) hagyományosan leképezi a 8259 fő megszakítási kérelmeket (IRQ0-IRQ7) az INT08-INT0F megszakítási vektorokhoz. És 8259A slave kérések (PC/AT és azon kívül) IRQ8-IRQ15-INT70-INT77. Ez annak ellenére történt, hogy az első 32 megszakítási vektor a processzor belső megszakításai számára van fenntartva (valamilyen oknál fogva a PC architektúra tervezői figyelmen kívül hagyták ezt a tényt). Ezért a legtöbb más operációs rendszer a megszakításokat (legalábbis a 8259-es fő esetében) a megszakítási vektorok más tartományára képezi le.

Egyéb operációs rendszerek

A legtöbb egyéb operációs rendszer más üzemmódokat is lehetővé tesz a 8259A számára, például automatikus megszakítás-lezárást. Ez különösen fontos a modern x86 -alapú rendszerek esetében, ahol jelentős mennyiségű időt veszíthetünk el a 8259-es műveleteknél az I/O-tér késleltetésével. Lehetővé teszi további időzítési optimalizálásokat, például kritikus szakaszok bevezetését a 8259-es többprocesszoros rendszereszközökön.

Él/szint üzemmód

Mivel az ISA-busz nem támogatja a szintmegszakításokat, PC/XT, PC/AT és MCA rendszerek esetén a 8259A-t éltől élig kell állítani. Az újabb EISA -n , PCI -n és újabb verziókon él/szintvezérlő regiszterek (ELCR) vannak, amelyek lehetővé teszik az egyes IRQ-vonalak működési módjának egyenkénti beállítását, így gyakorlatilag nincs szükség a 8259-es üzemmód beállítására az ilyen rendszerek ISA-busszal. .

Ezek a regiszterek a 0x4d0 és 0x4d1 címeken találhatók az x86 I/O címtérben. Dimenziójuk 8 bit, minden bit megfelel valamelyik IRQ 8259A vonalnak. Amikor a bit be van állítva, az IRQ vonal a szinten, egyébként az előlapon aktiválódik.

Spontán megszakítások

Bizonyos körülmények között a 8259A spontán megszakítást generálhat, általában IRQ7, és sokkal ritkábban IRQ15.

Az első esetben az IRQ vonal alaphelyzetbe áll, mielőtt nyugtázná. Ennek oka lehet az IRQ vonalak zaja. Éltől élig módban a zajnak magasan kell tartania a vonalat 100 n-ig (az IRR flip-flopra való írás minimális ideje). Amikor a zaj megszűnik, a felhúzó ellenállás alacsonyra húzza az IRQ szintet, így hamis megszakítást generál. Szintüzemben a zaj magas állapotot okozhat az INTR vonalon. Amikor a rendszer megszakítás megerősítési kérést ad ki, a 8259 nem rendelkezik az engedélyezéséhez szükséges adatokkal, és kiadja az IRQ7-et (az alapértelmezett érték). Így jelenhetnek meg a hamis IRQ7-ek.

Hasonló eset fordulhat elő, ha a 8259A maszkfeloldása és az IRQ vonal alaphelyzetbe állítása nincs gondosan szinkronizálva. Sok rendszerben az IRQ sort alaphelyzetbe állítja egy I/O címtér írási parancs, és a processzor nem várja meg, hogy az utasítás elérje az I/O eszközt. Ha a processzor folytatja és feloldja a megfelelő 8259A szintet, mielőtt az IRQ vonal alaphelyzetbe állítása megtörténne, a 8259A ismét INTR megszakítási kérelmet ad ki. Mire a processzor felismeri ezt az INTR kérést és nyugtázást ad ki, az IRQ vonal alaphelyzetbe állhat, és a 8259A spontán IRQ7-et küld vissza.

A második eset hasonló az elsőhöz, azzal a különbséggel, hogy a jelzett helyzet a slave eszközre vonatkozik, azaz amikor a master IRQ2 vonal aktív abban a pillanatban, amikor a slave 8259 IRQ vonalak inaktívak a megszakítás nyugtázásának lefutó éle (INTA) miatt. Ebben az esetben a spontán IRQ15 jelenik meg, de ez rendkívül ritka eset.

Ezért, amikor az IRQ7-tel dolgozik, ajánlatos a megszakításkezelő elején ellenőrizni az újrabelépést és az ISR 8259A regisztert annak megállapítására, hogy ez nem egy spontán megszakítás, hanem egy tényleges megszakítás, amely az IRQ7 vonalról jött.

PC/XT és PC/AT

Az IBM PC/XT architektúra csak egy 8259A megszakításvezérlővel rendelkezett, és az IBM PC/AT -től kezdve a rendszerek egy második, 8259A szolga vezérlőt kaptak. Az IRQ0…IRQ7 vonalak a master 8259A IR0..IR7 vonalai, az IRQ8…IRQ15 vonalak pedig a slave 8259A IR0..IR7 vonalai. Az IRQ0…IRQ15 azok az ISA-buszvonalak, amelyekhez a 8259A korábban csatlakoztatva volt.

Kezdetben az IRQ7 volt az általános választás hangkártyákban, de később az IRQ5-öt használták ebben a szerepben, hogy elkerüljék az LPT nyomtatóporttal való ütközést. A soros portokat gyakran letiltották, hogy felszabadítsák az IRQ-vonalat egy másik eszköz számára.

Lásd még

Jegyzetek

  1. Pod. szerk. levelező tag Az Ukrán SSR Tudományos Akadémia B. N. Malinovsky. fejezet 2.6. A prioritásos megszakítások programozható vezérlőjének mikroáramköre KR1810VN59A // Handbook of personal computers = Handbook of personal computers. - K . : Technika, 1990. - S. 384. - ISBN 5-335-00168-2 . 81. oldal

Irodalom