Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;Exercise on slide 12
- ;Sia DEV una periferica di output del processore PD32 che acquisisce dati a 32 bit tramite la tecnica delle interruzioni, e sia DMAC un DMA controller interfacciato con il PD32. Il processore programma DMAC per effettuare il trasferimento di 1024 long-word da un disco rigido non visibile al PD32 (ovvero non direttamente interfacciato al PD32) ad un buffer A ad indirizzo di memoria DDBBh. DMAC avverte il processore dell’avvenuto trasferimento tramite interruzione. All’atto dell’accettazione dell’interruzione di DMAC, il processore attiva DEV per effettuare su di essa l’output di tutto il contenuto del buffer A. Al termine della fase di output, DMAC viene riattivato per una nuova acquisizione di dati dal disco rigido.
- ;Progettare il software per attivare DMAC e DEV, e per gestirne le relative interruzioni. Nella soluzione si supponga che il servizio d’interruzione associato alla periferica DEV sia interrompibile. Inoltre, si ipotizzi di avere a disposizione un buffer di 6 byte ad indirizzo 00B0h e che nessun altro buffer di memoria sia disponibile per la gestione del sistema di periferiche.
- org 400h
- dev equ 0h ;Acquires 32-bit data via interrupt, is activated after DMAC transfer
- dmac equ 1h ;DMAC, transfers data from a device invisible to CPU to bufferA
- WC equ 2h ;DMAC's WC
- CAR equ 3h ;DMAC's CAR
- bufferA equ 0DDBBh ;Memory buffer
- workbuffer equ 00B0h ;Working buffer
- code
- jsr init
- seti
- main: jmp main ;Loops until interrupt
- halt
- init: push R0 ;Initializes data transfer
- movl #1024, R0
- outl WC, R0 ;Sets word counter to 1024
- movl #bufferA, R0
- outl CAR, R0 ;Sets current address to memory buffer
- start dmac
- pop R0
- ret
- driver 0, 700h ;Device driver
- push R0
- push R1
- movl #1024, R0 ;Sets counter to 1024
- movl #bufferA, R1 ;Sets memory buffer as first data location
- copy: outl dev, (R1)+ ;Copies data to device
- subl #1, R0
- jnz copy ;If counter strikes 0, proceeds
- jsr init
- pop R1
- pop R0
- rti
- driver 1, 900h ;DMAC driver
- start dev
- setim dev
- clear dmac
- rti
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement