slide1 n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
Esercizio Esame PowerPoint Presentation
Download Presentation
Esercizio Esame

Loading in 2 Seconds...

play fullscreen
1 / 7

Esercizio Esame - PowerPoint PPT Presentation


  • 77 Views
  • Uploaded on

Esercizio Esame.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Esercizio Esame' - lecea


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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
slide1

Esercizio Esame

Un processore PD32 è interfacciato a due periferiche di input A e B, e ad un DMAC il quale puo’ gestire trasferimento di dati da 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.

slide2

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

slide3

AB

PD32

DB

MEMORIA

CB

8 bit

I/O WR

INC

CAR

8 bit

LD

REG

REG

SELECT

DECR

MRD

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

slide4

R Q

STATUS

S Q

Interfaccia DEV_A

CPU

IRQ

I/O AB

I/O DB

I/O CB

IRQ

START

IORD

CLEAR

IACKIN

IVN

Dec

SELECT

OR

REG

COMPLETE

SCA

SCO

STARTDEV

IACKOUT

slide5

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

code

jsr init

seti ; abilita PD32 ad accettare interruzioni

main: ;...

jmp main

init:

outl #2048, WC

outl #ABCDh, CAR

start dmac

ret

slide6

;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

movl #buffer_lavoro, r0

addl #4, r0

movw #0, (r0)

start dev_a

pop r0

rti

slide7

;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 per il controllo

cmpb (r1), ro ;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

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