Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;Due processori PD32 si scambiano messaggi di 2 long word tramite una interfaccia (PER_BUFFER), in cui ci sono 2 registri di 32 bit (buffer). L’interfaccia condivisa è vista da entrambi i processori come una periferica accessibile da due bus differenti. Un processore è produttore di messaggi, mentre l’altro è il consumatore di messaggi. Il produttore può inviare all’interfaccia un nuovo messaggio solo se il processore consumatore ha già letto le due long word precedenti. Il produttore una volta scritti i due registri genera un’interruzione al consumatore, il quale, a sua volta, una volta letti i due registri avverte il produttore che ha letto i registri tramite una interruzione.
- ;Progettare il SCA di PER_BUFFER con le relative interfacce verso i due processori. Inoltre si progetti il software del processore produttore per la scrittura dei dati in PER_BUFFER, si ipotizzi che i dati da scrivere nei due resgistri di PER_BUFFER siano memorizzati negli indirizzi di memoria AABBH e AABEH . Si supponga che in fase di accensione del sistema tutta la logica della periferica venga inizializzata opportunamente per indicare che i registri sono vuoti e che non si verifichino conflitti tra i processori nel primo accesso.
- org 400h
- perbuffer equ 0h ;Exchange buffer
- buffer1 equ 0AABBh ;First buffer register
- buffer2 equ 0AABEh ;Second buffer register
- code
- start perbuffer
- main: jmp main ;Loops until interrupt
- halt
- driver 0, 700h ;Exchange buffer driver
- ;CPU consuming data XORLs registers after finishing!
- push R0
- movl #buffer1, R0
- cmpl #0, R0 ;Checks if the first buffer contains data
- jz chk2nd ;If not, suspends driver until second peripheral interrupts and finishes
- inl perbuffer, R0 ;If so, transfers data from first buffer
- chk2nd: movl #buffer2, R0
- cmpl #0, R0 ;Checks if the second buffer contains data
- jz finish ;If not, returns from driver until second peripheral interrupts and finishes
- inl perbuffer, R0 ;If so, transfers data from second buffer
- finish: pop R0
- rti
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement