Advertisement
heavenriver

ExEsame2010feb22a.asm

Jun 17th, 2012
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ;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.
  2. ;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.
  3.  
  4. org 400h
  5. perbuffer equ 0h             ;Exchange buffer
  6. buffer1 equ 0AABBh           ;First buffer register
  7. buffer2 equ 0AABEh           ;Second buffer register
  8. code
  9. start perbuffer
  10. main: jmp main               ;Loops until interrupt
  11. halt
  12. driver 0, 700h               ;Exchange buffer driver
  13.                              ;CPU consuming data XORLs registers after finishing!
  14. push R0
  15. movl #buffer1, R0
  16. cmpl #0, R0                  ;Checks if the first buffer contains data
  17. jz chk2nd                    ;If not, suspends driver until second peripheral interrupts and finishes
  18. inl perbuffer, R0            ;If so, transfers data from first buffer
  19. chk2nd: movl #buffer2, R0
  20. cmpl #0, R0                  ;Checks if the second buffer contains data
  21. jz finish                    ;If not, returns from driver until second peripheral interrupts and finishes
  22. inl perbuffer, R0            ;If so, transfers data from second buffer
  23. finish: pop R0
  24. rti
  25. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement