Vai al contenuto

Primario: Sky Slate Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate Marble
Secondario: Sky Slate Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate Marble
Sfondo: Blank Waves Squares Notes Sharp Wood Rockface Leather Honey Vertical Triangles
Corsi di Laurea










ROX @ Unisa - Forum degli studenti di Ingegneria utilizza i cookie. Se prosegui la navigazione accetti il loro uso.    Accetto l'uso dei cookie
-->
Foto

input output driver dubbi


  • Effettua l'accesso per rispondere
Questa discussione ha avuto 1 risposta/e

#1
Luca9_1

Luca9_1

    Advanced Member

  • Utente
  • StellaStellaStella
  • 32 Messaggi:
Salve ragazzi,sto cercando di capire la parte di input output ma ho alcuni dubbi e vorrei chiedervi un aiuto. Ho capito che nel registro di dato vanno messe le variabili "oggetto" della traccia e in quello di stato tutti i segnali di ingresso e uscita tra la cpu e l' i/o box ma non ho capito come si determinano le lunghezze di questi registri...Perchè sono lunghi 8 o 32 bit ? possono essere anche di altre lunghezze o solo queste due? (credo solo queste due lunghezze ma domando x scrupolo...) e per scrivere il driver,ho capito che devo caricarmi in dei registri le mie variabili dato,leggere dall'area di memoria le configurazioni,caricarle in registro e usare o il polling o le interruzioni e vorrei sapere come usarle,mi spiego meglio :
ho un esercizio in cui mi dice che il segnale ready = start * disp . Allora nel driver io ho letto la configurazione di start (che avevo precedentemente salvato nel RS),ho letto ready e poi dovrei vedere di usare le interruzioni perchè così è richiesto,dunque io farei una tne $t1,$t2 e andrei avanti ( t1 = start ,t2 =ready) ...La mia domanda è : è sempre così che devo fare? Cioè,se mi dice nella traccia che ready è causa di interruzioni e dall'equazione logica vedo ke è legata a start allora su start e ready faccio la trap?
Un'altra domanda : suppongo che $s2 sia il puntatore all'area di memoria dove ho le mie configurazioni e che siano byte : allora devo fare la load byte per leggere start e dopo,per leggere ack devo fare un'altra load byte
es : lb $t2,0($s2)
lb $t3,1($s2)
perchè metto 1 ? E se avessi avuto i registri a 32 bit avrei dovuto fare una load word e come avrei indirizzato?
Chiedo scusa per il papiro,grazie a chi mi risponderà!



#2
Marco Bassi

Marco Bassi

    Advanced Member

  • Utente
  • StellaStellaStella
  • 575 Messaggi:
La lunghezza del registro dati la determini in base a quello che devi fare. Se devi trasferire 8 bit perchè dall'alltra parte hai 8 condizionatori da attivare/disattivare (per esempio), allora il registro dati sarà di un byte. Dipende dalla traccia.
Per supposizione tua (ad esempio) puoi decidere che 00000011 equivalga ad un ready perchè il bit meno significativo è relativo a disp e il secondo meno significativo a start. Ti metti questa stringa di bit in un registro e questo lo fai prima di scrivere il driver, supponi che già ci sia (ovviamente lo scrivi che a quel registro associ una qualche stringa). Quando devi vedere se ready è attivo leggi lo stato, se questo è uguale al registro contenente la stringa di ready allora vai in trap ( dualmente se è diversa puoi leggere di nuovo lo stato fino a che sia uguale: polling).
L'ultima domanda scrivila di nuovo che non si legge bene. Comunque se hai in s2 il puntatore al registro dati, con la prima istruzione che hai scritto recuperi il primo byte relativo a questo registro e con la seconda spiazzi di un byte rispetto a quello puntato da s2 (che ripeto è la prima cella di memoria del registro dati, inoltre ti ricordo che il mips indirizza a byte) e recuperi il secondo byte.




Leggono questa discussione 0 utenti

0 utenti, 0 ospiti, 0 utenti anonimi