290 likes | 451 Views
EDA 480 – Maskinorienterad Programmering 2009/2010 Adressavkodning , ”Uppbyggnad.pdf” ” Skrivarporten ”, Arbetsbok MC12, avsnitt 2 Ur innehållet: Repetition FLEX adressavkodning Fullständig/Ofullständig avkodning Minnesavbildad/Direkt avkodning Vi ansluter en skrivare.
E N D
EDA 480 – Maskinorienterad Programmering • 2009/2010 • Adressavkodning, ”Uppbyggnad.pdf” • ”Skrivarporten”, Arbetsbok MC12, avsnitt 2 • Ur innehållet: • Repetition FLEX adressavkodning • Fullständig/Ofullständig avkodning • Minnesavbildad/Direkt avkodning • Vi ansluter en skrivare Adressavkodning - Skrivarport
Adressavkodning FLEX Adressavkodning - Skrivarport
Adressavkodning FLEX Adressavkodning - Skrivarport
CPU avkodnings-logik EXEMPEL: Adressavkodning Varje minnesblock (kapsel) tilldelas sin unika del av adressrummet Adressavkodning - Skrivarport
D0 A0 D1 A1 D2 A2 D3 A3 D4 A4 D5 A5 D6 A6 D7 A7 A8 A9 A10 CE A11 D0 A0 D1 A1 D2 A2 D3 A3 D4 A4 D5 A5 D6 A6 D7 A7 A8 R/W A9 A10 CE A11 Minnet har 8-bitars ordbredd, precis som centralenheten Minnet innehåller 4 kBytes (212)bytes och har därmed 12 adress-ledningar Read/Write är en insignal till minneskapseln CE (Chip Enable) är en insignal till kapseln, denna måste aktiveras för åtkomst i detta minne D0 D1 D2 D3 D4 D5 D6 D7 CE D0 D1 D2 D3 D4 D5 D6 D7 CE CPU D0 A0 D1 A1 D2 A2 D3 A3 D4 A4 D5 A5 D6 A6 D7 A7 A8 A9 A10 A11 A12 A13 A14 A15 R/W Registren, med 8-bitars ordbredd och CE-ingång Databuss, 8 signaler, betecknas D0-D7 ut-port Adressbuss, 16 signaler, betecknas A0-A15 Styrsignal (Read/Write) del av styrbussen. Genereras av centralenheten Registren, med 8-bitars ordbredd och CE-ingång in-port ”Permanent” läs-minne, ROM ”Flyktigt” läs/skriv-minne, RWM 8-bitars ordbredd, 4 kBytes (212)bytes CE (Chip Enable) Adressavkodning - Skrivarport
Specifikation • RWM-minnet ska aktiveras om centralenheten genererar någon av adresserna 0-0FFF. • ROM-minnet ska aktiveras om centralenheten genererar någon av adresserna C000-CFFF. • Inporten ska aktiveras om centralenheten genererar adress A000. • Utporten ska aktiveras om centralenheten genererar adress 8000. Adressavkodning - Skrivarport
Realisering med NAND-logik Fullständig avkodning 0000-0FFF 1000-1FFF RWM: 0xxx ROM: Cxxx utport: 8000 inport: A000 & A15 2000-2FFF 3000-3FFF A14 CERWM 4000-4FFF A13 5000-5FFF A12 6000-6FFF 7000-7FFF 8000-8FFF & A15 9000-9FFF A14 A000-AFFF CEROM A13 B000-BFFF C000-CFFF A12 D000-DFFF E000-EFFF F000-FFFF Adressavkodning - Skrivarport
Ofullständig avkodning 0000-0FFF 1000-1FFF RWM: 0xxx utport: 8xxx inport: Axxx ROM: Cxxx & A15 2000-2FFF & A15 3000-3FFF A14 A14 CERWM 4000-4FFF CEUT A13 A13 5000-5FFF A12 6000-6FFF A12 7000-7FFF & 8000-8FFF A15 & A15 9000-9FFF A14 A14 A000-AFFF CEIN CEROM A13 A13 B000-BFFF C000-CFFF A12 A12 D000-DFFF E000-EFFF F000-FFFF Adressavkodning - Skrivarport
Minnesavbildad/Direkt avkodning • Vi har sett exempel på ”Minnesavbildad avkodning” där speciell avkodningslogik används då periferikretsar används. • Vid ”Direkt avkodning” används speciella instruktioner för att ange åtkomst i periferikrets. EXEMPEL: Intel 8086 IO-instruktioner: IN <16-bit konst> OUT <16-bit konst> Adressavkodning - Skrivarport
IN <16-bit konst> OUT <16-bit konst> Adressavkodning - Skrivarport
Arbetsbok, kap. 2 Skrivarport • Konstruktion av en Printer-Port • Synkroniseringsproblem • Villkorlig / ovillkorlig överföring ”Busy Wait” och ”Polling” • Handskakningssignaler Adressavkodning - Skrivarport
ROM, Innehåller det inbyggda debugger-programmet DBG12. RWM, används för program och data. I detta adressintervall placeras gränssnitt mot externa enheter HCS12 interna register MC12 adressrum FFFF Beskrivande figur över hur minnesmoduler och IO-portar är placerade i minnet 4000 3FFF 1000 0FFF 0400 03FF 0000 Adressavkodning - Skrivarport
Adress-avkodning CS CPU12 skrivare minne skrivarportens dataregister Det lilla fönstret visar innehållet i dataregistret tolkat som ASCII. ”pappersyta”, här visas utskriften Adressavkodning för skrivar-porten FFFF 4000 3FFF Med portdefinition PRINTER EQU $0800 och instruktionerna LDAA #$30 STAA PRINTER överförs hexadecimala värdet 30 till skrivaren 1000 0FFF 0800-0803 0400 03FF 0000 Adressavkodning - Skrivarport
Förutsättningar Vår skrivare är från början en "dum" skrivare: • Den kan endast arbeta med ett tecken i taget. (hämtar ett tecken - skriv ut - hämta nästa) • Det finns inledningsvis inga handskaknings-signaler • Max utskriftshastighet: 4 tecken per sekund. Adressavkodning - Skrivarport
Första programexemplet Text ($3000) H e j * Printer V1_0 ORG $1000 LDX #Text Pekare till textsträng -> X Loop LDAA 1,X+ Tecken -> A, peka på nästa STAA PRINTER Skriv ut till port BRA Loop Fortsätt med nästa tecken ; så här kan du använda assemblerdirektiv för att ; skapa textsträngen på adresss 3000: ORG $3000 Text FCS ”Hej Du Kalle!” D u K a l l e ! Adressavkodning - Skrivarport
Inför specialtecken för strängslut * Printer V1_1 PRINTER EQU $0800 EOT EQU 4 ORG $1000 LDX #Text Loop: LDAA 1,X+ CMPA #EOT BEQ Stop STAA PRINTER BRA Loop Stop: NOP BRA Stop ORG $3000 Text: FCS "Hej Du Kalle!" FCB EOT Text ($3000) H e j D u K a l l e ! EOT Adressavkodning - Skrivarport
Synkronisera arbetstakterna … Lösningen blir villkorlig överföring vilket kräver ett asynkront gränssnitt… Adressavkodning - Skrivarport
Busy Wait Polling Villkorlig överföring Statustest, kräver asynkront gränssnitt… Adressavkodning - Skrivarport
READY dator-system Skrivare Skrivarbuss Gränssnitt, version 2 • READY-signalen definieras enligt: • READY = 1 (Hög nivå) indikerar att skrivaren är klar att ta emot ett nytt • tecken. • READY = 0 (Låg nivå) indikerar att skrivaren är upptagen med att skriva ut ett tecken. Adressavkodning - Skrivarport
”Programmerarens bild” * Printer V2_1 PRINTER EQU $0800 PSTATUS EQU $0801 EOT EQU 4 ORG $1000 LDX #Text Loop: LDAA 1,X+ CMPA #EOT BEQ Exit LoopForReady: LDAB PSTATUS ANDB #4 BEQ LoopForReady STAA PRINTER LoopForNotReady: LDAB PSTATUS ANDB #4 BNEQ LoopForReady BRA Loop Exit: NOP BRA Exit ORG $3000 Text: FCS "Hej Du Kalle!" FCB EOT READY = 1 (Hög nivå): skrivaren är REDO READY = 0 (Låg nivå): skrivaren är UPPTAGEN Adressavkodning - Skrivarport
Resultat Klarar nu situationen att centralenheten arbetar snabbare än skrivaren. Fortfarande problem då centralenheten är långsammare än skrivaren. Fortfarande problem med att få skrivaren att stoppa då sista tecknet skrivits ut. Vi behöver ytterligare handskakningssignal ”Tecken finns”… Adressavkodning - Skrivarport
Dator-system READY Skrivare DAV Skrivarbuss Gränssnitt, version 3 DAV = 1 (Hög nivå) indikerar för skrivaren att giltigt tecken finns att hämta på skrivarbussen. DAV = 0 (Låg nivå) indikerar för skrivaren att skrivarbussen har ett ogiltigt värde. Adressavkodning - Skrivarport
* Printer V3 PRINTER EQU $0800 PSTATUS EQU $0801 PCONTROL EQU $0802 EOT EQU 4 ORG $1000 LDX #Text Loop: LDAA 1,X+ CMPA #EOT BEQ Stop Ready: BRCLR PSTATUS,#4,Ready STAA PRINTER BSET PCONTROL,#2 NotReady: BRSET PSTATUS,#4, NotReady BCLR PCONTROL,#2 BRA Loop Stop: NOP BRA Stop ORG $3000 Text: FCS "Hej Du Kalle!" FCB EOT Adressavkodning - Skrivarport
Resultat Klarar nu situationen att centralenheten arbetar snabbare än skrivaren. Klarar nu situationen då centralenheten är långsammare än skrivaren. Klarar nu situationen med att få skrivaren att stoppa då sista tecknet skrivits ut Lösningen är dock hopplöst ineffektiv med tanke på hur vi utnyttjar systemet… Verkligt "arbete" DAV Processorn väntar på DAV skall gå hög μs μs 250 ms Adressavkodning - Skrivarport
Avbrottsrutinen utförs och ett tecken skickas till skrivaren IRQ IRQ Processorn utför annat viktigt arbete m s 100 ms m s Dator-system READY Skrivare DAV Skrivarbuss Introduktion till ”Undantagshantering” Interrupt ReQuest (IRQ), begäran om avbrott… IRQ Dator-system READY Skrivare DAV Skrivar buss Huvud-program Avbrotts- signal Avbrotts-rutin som skriver ut ett tecken Adressavkodning - Skrivarport
Avbrott Minne 1) Huvudprogram exekveras när ett avbrott aktiveras 2) Hopp till avbrottsrutin 3) Avbrottsrutin startar 4) Avbrottsrutin avslutas med en speciell instruktion,return from interrupt (RTI) 5) Återhopp till huvudprogram 6) Huvudprogrammet fortsätter. FFF2 ”avbrottsvektor” FFF3 Avbrottsrutinens adress Adressavkodning - Skrivarport
EXEMPEL, Skrivarporten Minne ”TextP” AH AL ”Text” H Printer_IRQ(H) FFF2 ”avbrottsvektor” e Printer_IRQ(L) FFF3 j D * Avbrottsrutin Printer_IRQ: LDX TextP ;Läs pekare till nästa LDAA 1,x+ ;Skriv nästa tecken STAA Printer STX TextP ;Spara nya pekare RTI u K a l l e ! EOT Adressavkodning - Skrivarport