1 / 7

Esercizio Esame

Esercizio Esame.

astin
Télécharger la présentation

Esercizio Esame

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Esercizio Esame Un processore PD32 è interfacciato ad una periferica di input A, e ad un DMAC il quale puo’ gestire il trasferimento di dati da una periferica di input B verso la memoria. A e B lavorano a 8 bit. Il processore acquisisce 2048 dati da B tramite il DMAC il quale li memorizza in un buffer di 2048 byte ad indirizzo ABCDh. Al termine dell’acquisizione, il DMAC avverte il processore tramite una interruzione, il cui servizio e’ il seguente: il processore acquisisce 2048 dati da A tramite la tecnica delle interruzioni e verifica, per ciascuno di essi, l’uguaglianza con il corrispondente dato precedentemente acquisito da B. Se almeno uno dei dati non soddisfa l’uguaglianza, il processore deve porre ad 1 il valore di un byte ad indirizzo 0BBBh. Progettare l’interfaccia tra il DMAC ed il PD32. Progettare inoltre il software per attivare DMAC ed A, e per gestirne le interruzioni. Si ipotizzi che un buffer di 6 byte sia disponibile ad indirizzo 000Ah per la programmazione e la gestione dell’input dalla periferica A e che nessun altro buffer di memoria possa essere utilizzato. Si ipotizzi inoltre che i servizi di interruzione di DMAC ed A siano non interrompibili.

  2. R Q STATUS S Q Logica dell’interfaccia del DMAC per le interruzioni IRQ CPU I/O AB I/O DB I/O CB CLEAR START IACKIN IRQ IVN STARTD Decoder O.C. SELECT COMPLETE SCO DMAC STARTDEV IACKOUT

  3. AB PD32 DB MEMORIA CB 8 bit I/O WR INC CAR 8 bit LD REG REG SELECT DECR MWR I/O WR WC TC NEXT DATO Q MBR I/O AB SCO DMAC I/O DB SCO DEV_B IRQ MBR F/F O.C. DATO PRONTO MBG I/O CB STATUS F/F

  4. R Q STATUS S Q Interfaccia DEV_A IRQ CPU I/O AB I/O DB I/O CB START CLEAR I/ORD IRQ IACKIN IVN Dec SELECT OR REG COMPLETE SCA SCO STARTDEV IACKOUT

  5. org 400h ;INIZIO PROGRAMMA dev_a equ 0h ; indirizzo device A dev_b equ 1h ; indirizzo device B dmac equ 2h ; indirizzo dmac CAR equ 3h ; indirizzo dmac WC equ 4h ; indirizzo dmac risultato equ 0BBBh ; indirizzo byte riservato all’uscita buffer_lavoro equ 000Ah ; indirizzo 6 byte riservato alla logica del programma 4 byte per l’indirizzo del dato da controllare 2 byte per il contantore code jsr init seti ; abilita PD32 ad accettare interruzioni main: ;... jmp main init: outl #2048, WC outl #ABCDh, CAR start dmac ret

  6. ;DRIVER DMAC driver 0, 600h push r0 ; salva contenuto dei registri sporcati nella routine clear dmac ;elimino la causa dell’interruzione sul dmac movl #ABCDh, buffer_lavoro; salvo l’indirizzo base del buffer dati nei primi 4 byte del buffer di lavoro movl #buffer_lavoro, r0 addl #4, r0 ; calcolo l’indirizzo successivo ai primi 4 byte del buffer di lavoro movw #0, (r0) ; memorizzo il valore 0 all’indirizzo appena calcolato start dev_a pop r0 rti

  7. ;DRIVER dev_A driver 1, 700h push r0, r1, r2, r3 ; salva contenuto dei registri sporcati nella routine inb dev_A, r0 ; acquisisco il dato dalla periferica dev_A movl buffer_lavoro, r1 ;acquisisco l’indirizzo corrente (contenuto nei primi 4 byte del buffer di lavoro) per il controllo cmpb (r1), r0 ; r0 - valore corrispondente in memoria JNZ set_flag aggiorna: addl #1, r1 movl r1, buffer_lavoro ;aggiorno l’indirizzo che punterà al prossimo dato da controllare movl #buffer_lavoro, r2 addl # 4, r2 movw (r2), r3 ;sposto in r3 il valore del contatore addw #1,r3 ;aggiorno il contatore movw r3,(r2) cmpw #2048, r3 jz interrompi_esecuzione start dev_A jmp fine set_flag: movb #1, 0BBBh jmp aggiorna interrompi_esecuzione: clear dev_A fine: pop r3, r2, r1, r0 RTI

More Related