Esercizio Semaforo

16
Esercizio Semaforo Un processore è interfacciato a due periferiche di input che indicano il numero di autovetture passate nelle due direzioni di un incrocio a X, al relativo semaforo e ad un TIMER. Normalmente il processore ogni minuto comanda il semaforo ad invertire l’abilitazione ai passaggi (da rosso a verde e viceversa). Prima di abilitare la commutazione del semaforo, il processore legge il numero di autovetture passate nella direzione con il verde, se il numero di auto passate in questa direzione è maggiore di 32 unità rispetto a quello dell’altra direzione (conteggiato nell’ultimo periodo), allora il processore ritarda la commutazione del semaforo di un altro minuto. Ogni volta che il processore legge i valori del numero di autovetture passate avverte il SCO delle periferiche di input di riazzerare il relativo contatore. Progettare l’interfaccia del TIMER, una delle

description

Esercizio Semaforo. - PowerPoint PPT Presentation

Transcript of Esercizio Semaforo

Page 1: Esercizio Semaforo

Esercizio Semaforo

Un processore è interfacciato a due periferiche di input che indicano il numero di autovetture passate nelle due direzioni di un incrocio a X, al relativo semaforo e ad un TIMER. Normalmente il processore ogni minuto comanda il semaforo ad invertire l’abilitazione ai passaggi (da rosso a verde e viceversa). Prima di abilitare la commutazione del semaforo, il processore legge il numero di autovetture passate nella direzione con il verde, se il numero di auto passate in questa direzione è maggiore di 32 unità rispetto a quello dell’altra direzione (conteggiato nell’ultimo periodo), allora il processore ritarda la commutazione del semaforo di un altro minuto.

Ogni volta che il processore legge i valori del numero di autovetture passate avverte il SCO delle periferiche di input di riazzerare il relativo contatore.

Progettare l’interfaccia del TIMER, una delle interfacce di input e l’interfaccia della periferica che gestisce il semaforo. Inoltre progettare il software per la gestione delle interruzioni provenienti dal TIMER.

Page 2: Esercizio Semaforo

I/O DBI/O CB

SELECT

Counter

I/O RD

CPU

I/O WR

RESET

I/O AB

sensore

inc

Interfaccia del Sensore / 1

Page 3: Esercizio Semaforo

I/O DBI/O CBCPU

I/O WR

I/O AB

SELECT S Q

R Q

STATUS

SELECT

Q=0 => ROSSO

Q=1 => VERDE

Interfaccia del Sensore / 2

Page 4: Esercizio Semaforo

I/O ABI/O DBI/O CB

Decoder

SELECT

START

STARTD O.C.

IRQ

SCO

R Q

S Q

STATUS

STARTDEV

COMPLETE

CLEAR

IVN

CPU

IACKIN

IACKOUT

IRQ

Interfaccia del Timer

Page 5: Esercizio Semaforo

org 400h ;INIZIO PROGRAMMA

timer equ 0h ; indirizzo timersemaforo equ 1h ; indiririzzo semaforocount1 equ 2h ; indiririzzo sensore1count2 equ 3h ; indiririzzo sensore2buffer equ 1500h ; indirizzo buffer di scambioflag equ 1504h ; flag=0 semaforo rosso, flag=1 semaforo verdenomore equ 1505h ; nomore=1 già ritardato, =0 è possibile ritardarelastmis dl 0 ; ultima misura dai sensori

codejsr initseti ; abilita PD32 ad accettare interruzioni; setim NB: questo non va incluso perchèell'interfaccia non abbiamo incluso un ff IM

main: ;...jmp main ; NB usato solo per la simulazione!

Page 6: Esercizio Semaforo

init:movl #0, buffermovl #0, flagmovl #0, nomore;setim timer solo simulatorestart timerret

;DRIVER TIMERdriver 0, 600h ; Il driver della periferica con IVN=2

; inizia dall'ind. 600hpush r0 ; salva contenuto di R0push r1push r2movl lastmis, r1 ; carico in r1 il numero di macchine misurato nell'ultimo intervallomovb flag,r0 ; carica flag in R0cmpb #1,r0 ; controlla se semaforo di riferimento è verdejz verde

; semaforo di riferimento attualmente rossoinl count1, r0 ; legge valore da sensore 1, abbinato al semaforo non di riferimentooutb #1, count1; resetta il contatore 1jmp continue

verde: inl count2, r0 ; legge valore da sensore 2, abbinato al semaforo di riferimentooutb #1, count2 ; resetta il contatore 2

Page 7: Esercizio Semaforo

continue:movl r0,lastmis ; e sovrascrivo in memoria lastmis. lastims<-ultima misuramovb nomore, r2cmpb #1,r2 ; verifica se lo switch è stato già ritardatojz switch ; in tal caso forza lo switchsubl r1, r0 ; r0<-differenza tra mis(t)-mis(t-1)cmpl #32,r0 ; r0>=32 <=> N == Vjv vsetjnn cont ; altrimenti v=0, e se n=0 --> r0>=32jmp switch ; r0 <32

vset: jn cont ; v=1, n=1 --> r0>=32 => no switchswitch: ; else switch

movb flag,r0 ; carica flag in R0notb flag,r0andb #00000001b, r0movb r0,flag ; inverte il valore del flag che memorizza lo stato del semaforomovb #0,nomore ; setta a 0 il flag nomore, inibendo ulteriori ritardi nello switch

outb r0,semaforo ; setto il sem.di riferimento a verdestart timer ; riavvia il timerpop r2pop r1pop r0rti

Page 8: Esercizio Semaforo

cont: movb #1, nomore ; setta a 1 il flag nomorestart timer ; riavvia il timerpop r2pop r1pop r0rti

end ; FINE PROGRAMMA

Page 9: Esercizio Semaforo

Esercizio esame DMAC

Page 10: Esercizio Semaforo

I/O ABI/O DBI/O CB

Dec

SELECT

START

IRQ

SCO

R Q

S Q

STATUS

STARTDEV

COMPLETE

CLEAR

IVN

CPU

IACKIN

IACKOUT

IRQ

IOWR

REG

COUNTERDEC

TC

R Q

S Q

IM

SETIM CLRIM

LD

LD

OR

Interfaccia del DEVICE (timer)

Page 11: Esercizio Semaforo

I/O DBI/O CB

SELECT

REG

I/O RD

CPU

I/O WR

RESET

I/O AB

Termometro

Interfaccia DEV_TEMP

Page 12: Esercizio Semaforo

Logica dell’interfaccia del DMAC per le interruzioni

I/O ABI/O DBI/O CB

Decoder

SELECT

START

STARTD O.C.

IRQ

SCO DMAC

R Q

S Q

STATUS

STARTDEV

COMPLETE

CLEAR

IVN

CPU

IACKIN

IACKOUT

IRQ

Page 13: Esercizio Semaforo

PD32 DBCB

I/O

DB

I/O

CBI/

O A

BMEMORIA

SE

LE

CT

I/O WR CAR

INC

WCI/O WR

SCODMAC

DECR

TC

MBRF/F

Q

O.C.

MBR

MBGSCO

VIDEO

DATO SCRITTONEXT DATO

REG VIDEOREG

MR

D

32 bit

32 bit

STATUSF/F

ABIR

Q

LD

Page 14: Esercizio Semaforo

Inizializzazione timer

; subroutine di inizializzazione parametrica, richiede il caricamento in R0 del numero;di millisecondi dell’intervallo

init: outb R0, DEVICEstart DEVICEret

Page 15: Esercizio Semaforo

Driver timerDRIVER 1,600h

PUSH R0INB DEVTEMP, R0CMPB R0,#40JN N_EQ_1

N_EQ_0:JNV NV_EQJMP NV_DIF

N_EQ_1:JV NV_EQJMP NV_DIF

NV_EQ: START DEVICEPOP R0RTI

NV_DIF: CLRIM DEVICEOUT #512, WCOUNTER ; inizializza il WCOUNTEROUT #BBBBh,CAR ; passa il valore al CARSTART DMAC ;avvia trasferimentoPOP R0RTI

Page 16: Esercizio Semaforo

Driver DMACDRIVER 2,700h

SETIM DEVICESTART DEVICECLEAR DMACRTI