1 / 16

Esercizio Semaforo

Esercizio Semaforo.

bell
Télécharger la présentation

Esercizio Semaforo

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 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.

  2. Interfaccia del Sensore / 1 I/O AB CPU I/O DB I/O CB I/O RD I/O WR SELECT inc RESET Counter sensore

  3. S Q STATUS R Q Interfaccia del Sensore / 2 I/O AB CPU I/O DB I/O CB SEM. DI RIFERIMENTO I/O WR Q=0 => ROSSO Q=1 => VERDE SELECT SELECT SEM. NON DI RIFERIMENTO

  4. R Q STATUS S Q Interfaccia del Timer IRQ CPU I/O AB I/O DB I/O CB CLEAR START IACKIN IRQ IVN STARTD Decoder O.C. SELECT COMPLETE SCO STARTDEV IACKOUT

  5. org 400h ;INIZIO PROGRAMMA timer equ 0h ; indirizzo timer semaforo equ 1h ; indiririzzo semaforo count1 equ 2h ; indiririzzo sensore1 count2 equ 3h ; indiririzzo sensore2 flag equ 1504h ; flag=0 semaforo rosso, flag=1 semaforo verde nomore equ 1505h ; nomore=1 già ritardato, =0 è possibile ritardare lastmis dl 0 ; ultima misura dai sensori code jsr init seti ; 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!

  6. init: movl #0, flag movl #0, nomore ;setim timer solo simulatore start timer ret ;DRIVER TIMER driver 0, 600h ; Il driver della periferica con IVN=2 ; inizia dall'ind. 600h push r0 ; salva contenuto di R0 push r1 push r2 movl lastmis, r1 ; carico in r1 il numero di macchine misurato nell'ultimo intervallo movb flag,r0 ; carica flag in R0 cmpb #1,r0 ; controlla se semaforo di riferimento è verde jz verde ; semaforo di riferimento attualmente rosso inl count1, r0 ; legge valore da sensore 1, abbinato al semaforo non di riferimento outb #1, count1; resetta il contatore 1 jmp continue verde: inl count2, r0 ; legge valore da sensore 2, abbinato al semaforo di riferimento outb #1, count2 ; resetta il contatore 2

  7. continue: movl r0,lastmis ; e sovrascrivo in memoria lastmis. lastims<-ultima misura movb nomore, r2 cmpb #1,r2 ; verifica se lo switch è stato già ritardato jz switch ; in tal caso forza lo switch subl r1, r0 ; r0< - differenza tra mis(t)-mis(t-1) cmpl #32,r0 ; r0 – 32 jnc cont switch: movb flag,r0 ; carica flag in R0 notb r0 andb #00000001b, r0 movb r0,flag ; inverte il valore del flag che memorizza lo stato del semaforo movb #0,nomore ; setta a 0 il flag nomore, inibendo ulteriori ritardi nello switch outb r0,semaforo ; setto il sem.di riferimento al nuovo stato start timer ; riavvia il timer pop r2 pop r1 pop r0 rti

  8. cont: movb #1, nomore ; setta a 1 il flag nomore start timer ; riavvia il timer pop r2 pop r1 pop r0 rti end ; FINE PROGRAMMA

  9. Esercizio esame DMAC

  10. R Q R Q STATUS IM S Q S Q Interfaccia del DEVICE (timer) CPU IRQ I/O AB I/O DB I/O CB IRQ START SETIM CLRIM IOWR CLEAR IACKIN REG IVN LD Dec SELECT OR COMPLETE SCO STARTDEV IACKOUT DEC LD TC COUNTER

  11. Interfaccia DEV_TEMP I/O AB CPU I/O DB I/O CB I/O RD I/O WR SELECT RESET REG Termometro

  12. 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

  13. AB PD32 DB MEMORIA CB 32 bit I/O WR INC CAR 32 bit LD REG REG VIDEO SELECT DECR MRD I/O WR WC TC DATO SCRITTO Q MBR SCO DMAC SCO VIDEO NEXT DATO MBR F/F IRQ O.C. I/O AB MBG I/O DB I/O CB STATUS F/F

  14. Inizializzazione timer ; subroutine di inizializzazione parametrica, richiede il caricamento in R0 del numero ;di millisecondi dell’intervallo init: outb R0, DEVICE start DEVICE ret

  15. Driver timer DRIVER 1,600h PUSH R0 INB DEVTEMP, R0 CMPB R0,#40 JN N_EQ_1 N_EQ_0:JNV NV_EQ JMP NV_DIF N_EQ_1:JV NV_EQ JMP NV_DIF NV_EQ: START DEVICE POP R0 RTI NV_DIF: CLRIM DEVICE OUT #512, WCOUNTER ; inizializza il WCOUNTER OUT #BBBBh,CAR ; passa il valore al CAR START DMAC ;avvia trasferimento POP R0 RTI

  16. Driver DMAC • DRIVER 2,700h • SETIM DEVICE • START DEVICE • CLEAR DMAC • RTI

More Related