vuoi
o PayPal
tutte le volte che vuoi
Interruzioni e registri per l'interfaccia seriale
Interruzione su ENTER: linea 1, autovettore 25, mappata a $64, ISR a $8500
Interruzione su BUFFER FULL: linea 2, autovettore 26, mappata a $68, ISR a $8600
Al dispositivo USART sono associati due livelli di interruzione:
Interruzione su RxRDY: linea 3, autovettore 27, mappata a $6C, ISR a $8700
Interruzione su TxRDY: linea 4, autovettore 28, mappata a $70, ISR a $8800
*********************************************************************************
usart EQU $2004
Interfaccia seriale.
ter EQU $2000
Terminale video.
ORG $8200
Indirizzo di partenza del main program.
START MOVEA.W #usart,A0
Inizializza l'interfaccia seriale,
*********************************************************************************
PRIMO ACCESSO IN SCRITTURA ALLA SERIALE => REGISTRO MODE
INDIRIZZO DISPARI
MODE |0 |1 |0 |1 |1 |1 |0 |1 |
| | | | | | | |__Trasmissione Asincrona
| | | | |_ | |____Non utilizzato
| | | | |_______8 bit per dato
| | | |__________bit di parità
tipo di parità dispari | |
2 bit di stop | |
#bit di sync in trasmissione asincrona | |
MOVE.B #$5D,1(A0) trasmissione asincrona, 8 bit di informazione, bit di parità dispari e 2 bit di stop | |
SECONDO ACCESSO IN SCRITTURA ALLA SERIALE => REGISTRO CNTRL | |
INDIRIZZO DISPARI | CNTRL |
0 | 0 |
1 | 1 |
0 | 1 |
1 | 1 |
Abilita trasmettitore | |
Attiva DTR | |
Attiva ricevitore | |
Non utilizzato | |
Azzera bits di errore in STATUS | |
Attiva RTS | |
Non resetta la periferica | |
Non va in 'hunt' | |
MOVE.B #$37,1(A0) abilita trasmettitore e ricevitore, cancella |
flags* di errore e attiva i segnali di handshaking.
MOVEA.W #ter,A0 Inizializza il terminale video,
*********************************************************************************
INIZIALIZZAZIONE DEL TERMINALE:
** CNTRL |0 |0 |1 |1 |1 |1 |1 |1 |
* | | | | | | | |__Abilita interruzioni su Buffer full
* | | | | | | |____Abilita interruzioni su Enter
* | | | | | |______Pulisci schermo
* | | | | |________Pulisci buffer tastiera
* | | | |__________Abilita tastiera
* | | |____________Abilita echo
* | |______________Stato di buffer full
* |________________Stato di Enter inviato
********************************************************************************
MOVE.B #$3f,1(A0) abilita tastiera, eco, interruzioni enter e buffer
* full, cancella video e pulisce buffer di tastiera.
* ANDI #$F8FF,SR Azzera l'interrupt mask.
main NOP Processore è in attesa di qualche interruzione.
JMP
ISR DELL'INTERRUZIONE DI LIVELLO 1 ( pressione tasto enter )
ORG $8500 Interrupt vector.
MOVE.L A0,-(A7) Salva nel supervisor stack pointer i registri
MOVE.L A1,-(A7) usati dalla ISR.
MOVE.L D0,-(A7)
MOVEA.W #ter,A0 A0 e A1 puntano ai dispositivi TERMINAL e
MOVEA.W #usart,A1 USART rispettivamente.
ACCESSO IN LETTURA ALL'INDIRIZZO DISPARI DELLA SERIALE => REGISTRO STATUS
STATUS |1 |0 |0 |0 |0 |0 |0 |0 |
| | | | | | | |__b0 diviene alto quando DATA OUT
| | | | | | | viene copiato in TSHIFT REG., torna
| | | | | | | basso quando il processore copia
| | | | | | | un nuovo carattere in DATA OUT
| | | | | | |____b1 diviene alto quando RSHIFT
REG.** | | | | | | viene copiato in DATA IN, torna ** | | | | | | basso in seguito a lettura da DATAIN** | | | | | |______Underrun ** | | | | |________Errore di parità ** | | | |__________Errore di overrun ** | | |____________Errore di framing ** | |______________Rilevati bit di sincronismo ** |________________DSR attivo **********************************************************************************wait11 MOVE.B 1(A1),D0 Controlla se è attivato il segnale DSR dellaANDI.B #$80,D0 USART ed in caso affermativo trasmette,BEQ wait11 altrimenti attende.*wait12 MOVE.B 1(A1),D0 Se l'interfaccia seriale è pronta a trasmettereANDI.B #$01,D0 quindi continua altrimenti attende (controllo delbuffer in uscita).BEQ wait12* MOVE.B (A0),D0 Preleva uno alla volta i caratteri presenti nelMOVE.B D0,(A1) buffer di tastiera e li trasmette all'interfacciaCMPI.B #13,D0 seriale finchè non riconosce il tasto enter cheBNE wait12 ha causato l'interruzione.*end MOVE.B
#$3f,1(A0)
Riabilita la tastiera, cancella il video* e pulisce il buffer di tastiera.*
MOVE.L (A7)+,D0
Ripristino dei registri
MOVE.L (A7)+,A1
precedentemente salvati.
MOVE.L (A7)+,A0
RTE
Ritorno alla routine interrotta.