mercoledì

Calcolatori : ottenere indirizzo tabella interrupt

In questo nuovo articolo sui calcolatori vedremo come ottenere l'indirizzo della tabella interrupt con le relative spiegazioni.

come si ottiene l'indirizzo della cella della tabella degli interrupt corrispondente a un certo irq del dispositivo esterno ? (o più che altro, l'inizio della tabella, poi ci si aggiunge 4*irqi no?)

La CPU all'inizio carica nel registro TR(Type Register) un certo valore(negli esempi è 50h,80h e così via)
questo valore caricato coinvolge solo i 5 bit più significativi del TR.

poi arriva una richiesta al PIC, ad esempio la numero 3.
se viene accettata si somma il contenuto del TR(base) al numero dell'interruzione,e poi si manda il valore a 8 bit lungo il bus D[0:7]

a quel punto il valore (base+indice interrupt) viene moltiplicato per 4.
l'indirizzo trovato è la prima casella corrispondente all'indirizzo della RRI, formato da CS:IP (in memoria viene memorizzato all'indirizzo più basso IP , a quello più alto CS)


Una periferica manda la sua richiesta di inerrupt che arriva (ipotizzo) al piedino 2 del pic che gestisce le varie IRQ, quindi in questo caso avrò IRQ2.
A questo punto, il pic esegue alcune operazioni per verificare che tale irq non sia mascerata e che abbia la giusta priorità per essere eseguita, verificate tali ipotesi, all'interno del registro "Type Register" (sempre dentro al pic), viene scritto (dalla CPU) un valore (di solito è qualcosa del tipo 40h, o 50h), questo è quello che viene chiamato N.
Ora il pic prende N e lo somma con il numero dell'interruzione che corrisponde al piedino IRQ al quale è arrivata, nel nostro caso 2.
Avremo pertanto N+2, dove se ipotizziamo N=40h ---> 40h+2h=42h.
Tale risultato viene ora spedito alla CPU che lo elabora moltiplicandolo x4 ----> 42h x 4 = 108h.
Questo è l'indirizzo che mi serve per reperire dalla tabella i 4Byte che devono comporre a loro volta l'indirizzo (formato da CS:IP) che punterà alla prima istruzione della RRI che mi interessa.
Da notare (mi pare) che la tabella degli interrupt sia allocata nella memoria a partire dal primo indirizzo.
 

L'indirizzo della routine di servizio si crea in questo modo:

CS:IP cioè CS come segmento (shiftato di 4 bit a sinistra) e IP come offset

ma questo non vuol dire che nella IT ci sia prima CS poi IP. è solo la rappresentazione di come si calcola l'indirizzo.

nella IT è presente prima IP poi CS.


Oltre all'indirizzo della specifica tabella interrupt, dei calcolatori sul blog è possibile trovare appunti e dispense di ingegneria informatica per studenti delle università cercando nella sezione ingegneria.

Tutto sui calcolatori: ecco come ottenere l'indirizzo o le coordinate della tabella interrupt
  

Nessun commento:

Posta un commento