Programarea bus-ului ISA

by donpedro

Introducere
Portul serial permite utilizatorului să realizeze comunicaţii între PC şi alte dispozitive care suportă standardul RS-232. Pe de altă parte, în cadrul portului paralel se află opt ieşiri de date, cinci semnale de intrare, respectiv o ieşire pentru întreruperi (IRQ7).
În bus-ul ISA se regăsesc o magistrală de adrese pe 20 biţi şi o magistrală de date pe 8 biţi. Bus-ul ISA permite manipularea majorităţii semnalelor de întrerupere ale PC-ului şi gestionarea transferurile DMA.

Descrierea bus-ului ISA
În figura alăturată se poate observa pinout-ul bus-ului ISA. Bus-ul este divizat în două părţi. Pinii din prima parte sunt numerotaţi de la A1 la A31 şi sunt plasaţi pe partea componentelor, fiind format din magistralele de adrese şi date. Pinii din cea de-a doua parte sunt numerotaţi de la B1 la B31 şi se află pe partea pe care se efectuează lipiturile. Această parte conţine pini prin care se aplică tensiunile de alimentarea precum şi semnale legate de transferurile DMA, respectiv întreruperi.
Vom lista mai jos cei mai utilizaţi pini şi descrierea lor.

Pentru partea “A”:
A0-A19 (pinii de la A31 la A12): Aceste douăzeci de linii formează magistrala de adrese prin care se poate adresa 1MB (2-20 octeţi).
D0-D7 (pinii de la A9 la A2): Magistrala de date constă din aceste opt linii de date.
AEN (pinul B11): Este utilizat de controler-ul DMA pentru preluarea informaţiilor din magistralele de date şi adrese în transferurile DMA.

Pentru partea “B”:
GND (pinii B1, B10, B31): Conectaţi la masa (GND) a computerului.
+5V (pinii B3, B29): ieşirea 5VDC de la sursa de tensiune.
-5V (pinul B5): ieşirea -5VDC.
-12V (pinul B7): ieşirea -12VDC.
+12V (pinul B9): ieşirea +12VDC.
MEMW (pinul B11): mP acţionează acest semnal când realizează o operaţie de scriere în memorie.
MEMR (pinul B12): mP acţionează acest semnal când realizează o operaţie de citire din memorie.
IOW (pinul B13): mP acţionează acest semnal când realizează o operaţie de scriere într-un port de ieşire.
IOR (pinul B14): mP acţionează acest semnal când realizează o operaţie de citire dintr-un port de intrare.
DACK0-DACK3 (pinii B15, B17, B19 şi B26): Controler-ul DMA setează aceste semnale pentru a transmite dispozitivului faptul că DMA-ul controlează magistralele.
DRQ1-DRQ3 (pinii B6, B16 şi B18): Permite plăcilor perifericelor să solicite utilizarea magistralelor.
+T/C (pinul B27): Controler-ul DMA setează acest semnal pentru a comunica plăcilor perifericelor că numărul programat de octeţi a fost transmis.
IRQ2-IRQ7 (pinii B4, B21, B22, B23, B24 şi B25): Semnale de întrerupere. Dispozitivele periferice setează aceste semnale pentru a capta atenţia mP-ului.
ALE (pinul 28): Acest semnal este utilizat de mP în scopul de a memora cei 16 biţi mai puţin semnificativi ai magistralei de adrese pe parcursul unei operaţii cu memoria sau cu porturile de intrare /ieşire.
CLOCK (pinul 20): Ceasul sistemului.
OSC (pinul 30): Semnal de ceas cu frecvenţă ridicată care poate fi utilizată pentru plăcile de I/O.

Vom începe descrierea operaţiilor pe bus-ul ISA cu un ciclu simplu de citire de la un port intrare/ieşire. Primul lucrul pe care îl execută microprocesorul este acela de a trece în starea “1” semnalul ALE, urmat de generarea semnalelor pe liniile A0-A19 şi revenirea semnalului ALE în “0”. Din acest moment, adresa portului ce urmează să fie citit este memorată. Se generează apoi pe bus semnalul -IOR în starea “0” logic. Astfel, dispozitivul adresat va depune un octet de date pe magistrala de date D0-D7. Microprocesorul va citi conţinutul magistralei de date şi va readuce semnalul -IOR la nivelul “1” logic.
Un ciclu de scriere al unui port decurge astfel: microprocesorul setează semnalul ALE, apoi transmite A0-A19. Semnalul ALE este readus în starea “0” logic şi microprocesorul transmite octetul de date pentru a fi înscris. Comanda de scriere este realizată prin trecerea semnalului -IOW în starea “0” logic. După ce dispozitivul preia octetul, mP-ul trece semnalul -IOW în starea “1” logic.
Singura diferenţă între un ciclu de citire/scriere a memoriei şi, respectiv, de citire/scriere a unui port constă în faptul că în cadrul ciclului de lucru cu memoria sunt utilizate semnalele -MEMR şi -MEMW, în locul semnalelor -IOR şi -IOW utilizate la lucrul cu porturile.

Întreruperi (Driving Interrupts)
Un PC poate lucra cu două tipuri de întreruperi, software şi hardware. În această lucrare vom explica numai întreruperile hardware. Într-un PC întreruperile externe sunt gestionate de un controler de întreruperi de tip 8259A. După ce circuitul 8259A primeşte un semnal de tip cerere de întrerupere pe una din liniile IRQ2 la IRQ7, el transmite un semnal pe intrarea INTR a mP-ului. Apoi 8086 transmite un semnal INTA (interrupt-acknowledge) către 8259.
Astfel, mP poate obţine tipul de întrerupere de la dispozitivul extern ce a solicitat întrerupere. 8086 utilizează tipul citit de la dispozitivul extern pentru a prelua adresa procedurii de servire a întreruperii din tabelul pointerilor de întreruperi din memorie. De notat faptul că semnalele INTR şi INTA nu sunt prezente în bus-ul ISA, aceste semnale fiind utilizate numai pentru mP şi 8259A.

Programarea întreruperilor
Ideea de bază a unei întreruperi este de a executa o funcţie ce răspunde la cererile dispozitivului hardware. Un vector de întrerupere conţine adresa acestei funcţii. Într-un sistem 8086 primul Koctet de memorie (de la 00000H la 003FFH) este utilizat pentru vectorii de întrerupere. Pentru a adresa orice locaţie de memorie sunt necesari patru octeţi. 16 biţi sunt utilizaţi pentru adresa de bază, iar alţi 16 biţi pentru identificarea unui segment. Astfel, 1 Koctet de memorie permite stocarea unui număr de 256 vectori de întrerupere. Unii dintre cei 256 de vectori de întrerupere sunt utilizaţi de sistem, alţi vectori se pot utiliza pentru programele utilizatorului. Pentru a instala o procedură de servire a unei întreruperi se poate utiliza un program aşa cum este exemplificat în pagina WEB a ziarului “Electronica Azi” la secţiunea Download.
Programul instalează o rutină de întreruperi pentru canalul de întreruperi IRQ1, care este timer-ul sistemului. Acest timer generează 18,2 întreruperi per secundă. În rutina de servire a întreruperii se incrementează o variabilă globală. Când această variabilă ajunge la valoarea 18 se realizează afişarea pe ecran.

Transferuri DMA
Unele dispozitive de intrare/ieşire trimit datele mai rapid decât timpul de preluare al acestora de către microprocesor. Circuitul controler DMA (Direct Memory Access) este un circuit integrat dedicat care transmite şi recepţionează datele mai rapid decât microprocesorul. Discurile magnetice şi optice utilizează acest circuit pentru transferurile de date cu memoria sistemului.
Controlerul DMA preia controlul magistralei de adrese, al celei de date şi, respectiv, control de la sistem şi realizează transferul unui număr programat de octeţi de la dispozitivul rapid I/O către memorie. În PC, controler-ul DMA folosit pentru această funcţie este 8237.
Când un dispozitiv are pregătit un bloc de date pentru a fi transferat către memorie, transmite mai întâi o cerere DMA printr-un semnal DRQn către controler-ul DMA. Dacă canalul solicitat este liber, circuitul DMA va transmite un semnal HRQ (hold request) către microprocesor. Microprocesorul va răspunde emiţând un semnal HLDA (hold acknowledge) către DMA. Apoi circuitul DMA preia controlul magistralelor, setează semnalul AEN şi transmite adresa de memorie ce intervine în transfer. Circuitul DMA va transmite semnalul DACKn (DMA acknowledge) către dispozitiv. În final, controler-ul DMA activează semnalele MEMW şi IOR pe control bus. Când transferul de date este complet, semnalul HRQ este dezactivat şi procesorul preia din nou controlul magistralelor.
Dacă un dispozitiv necesită unele date de la memorie, procesul este similar. Singura diferenţă constă în faptul că circuitul DMA transmite semnalele MEMR and IOW pe magistalal de control.

S-ar putea să vă placă și