Maskinorintrad Programmring 2010/2011 Skrivarportn, p Arbtsbok MC12, avsnitt 2 Ur innhåt: Vi ansutr n skrivar Assmbrprogrammring - skrivarportn 1 Skrivarport Arbtsbok, kap. 2 Konstruktion av n Printr-Port Synkronisringsprobm Vikorig / ovikorig övrföring Busy Wait och Poing Handskakningssignar k i Assmbrprogrammring - skrivarportn 2
MC12 adrssrum Bskrivand figur övr hur minnsmodur och IO-portar är pacrad i minnt FFFF 4000 3FFF 1000 0FFF 0400 03FF 0000 ROM, Innhår dt inbyggda dbuggrprogrammt DBG12. RWM, används för program och data. I dtta adrssintrva pacras gränssnitt mot xtrna nhtr HCS12 intrna rgistr Assmbrprogrammring - skrivarportn 3 Adrssavkodning d för skrivar-portn FFFF Adrss- avkodning CS CPU12 skrivar minn 4000 3FFF Md portdfinition PRINTER EQU $0800 och instruktionrna LDAA #$30 STAA PRINTER övrförs hxadcimaa värdt 30 ti skrivarn Dt ia fönstrt visar innhåt i datargistrt tokat som ASCII. skrivarportns datargistr 1000 0FFF 0800-0803 0400 03FF papprsyta, här visas utskriftn 0000 Assmbrprogrammring - skrivarportn 4
Förutsättningar Vår skrivar är från början n "dum" skrivar: Dn kan ndast arbta md tt tckn i tagt. (hämtar tt tckn - skriv ut - hämta nästa) Dt finns indningsvis inga handskaknings-signar Max utskriftshastight: 4 tckn pr skund. Assmbrprogrammring - skrivarportn 5 Första programxmpt * Printr V1_0 ORG $1000 LDX #Txt Pkar ti txtsträng -> X Loop LDAA 1,X+ Tckn -> A, pka på nästa STAA PRINTER Skriv ut ti port BRA Loop Fortsätt md nästa tckn ; så här kan du använda assmbrdirktiv för att ; skapa txtsträngn på adrsss 3000: ORG $3000 Txt FCS Hj Du Ka! Txt ($3000) H j D u K a! Assmbrprogrammring - skrivarportn 6
Inför spciatckn för strängsut Txt ($3000) H j D u K a! EOT PrintrV1_1 Init Läs nästa tckn Tckn= EOT? Övrför Data ti Skrivarn * Printr V1_1 PRINTER EQU $0800 EOT EQU 4 ORG $1000 LDX #Txt Loop: LDAA 1,X+ CMPA #EOT BEQ Stop STAA PRINTER BRA Loop Stop: NOP BRA Stop ORG $3000 N Txt: FCS "Hj Du Ka!" FCB EOT Stop Assmbrprogrammring - skrivarportn 7 Synkronisra arbtstaktrna t Skrivar Simuator STEP Simuator RUN Simuator RUN FAST Hårdvara Instruktionr/? 10 1000 1 000 000 skund Tckn/ 4? 2 200 200 000 skund Lösningn bir vikorig övrföring vikt krävr tt asynkront gränssnitt Assmbrprogrammring - skrivarportn 8
Vikorig i övrföring Mottagarn Rdo? N Mottagarn Rdo? N Statustst, krävr asynkront gränssnitt Sänd Data ti mottagarn Sänd Data ti mottagarn Busy Wait Poing Assmbrprogrammring - skrivarportn 9 Gä Gränssnitt, vrsion 2 PrintrV2_0 datorsystm Skrivarbuss -signan dfiniras nigt: Skrivar = 1 (Hög nivå) indikrar att skrivarn är kar att ta mot tt nytt tckn. = 0 (Låg nivå) indikrar att skrivarn ki är upptagn md att skriva ki ut tt tckn. Init Läs nästa tckn Tckn= EOT? N Läs Status Bit 7 2 Statusrgistrt t 1 0 =1? Övrför Data ti Skrivarn N PrintrV2_0 Assmbrprogrammring - skrivarportn 10
Programmrarns bid = 1 (Hög nivå): skrivarn är REDO = 0 (Låg nivå): skrivarn är UPPTAGEN Bit 7 Statusrgistr 2 1 0 * Printr V2_1 PRINTER EQU $0800 PSTATUS EQU $0801 EOT EQU 4 ORG $1000 LDX #Txt Loop: LDAA 1,X+ CMPA #EOT BEQ Exit LoopForRady: LDAB PSTATUS ANDB #4 BEQ LoopForRady STAA PRINTER LoopForNotRady: LDAB PSTATUS ANDB #4 BNEQ LoopForRady Exit: BRA NOP BRA Loop Exit ORG $3000 Txt: FCS "Hj Du Ka!" FCB EOT Assmbrprogrammring - skrivarportn 11 Rsutat t Karar nu situationn att cntranhtn arbtar snabbar än skrivarn. Fortfarand probm då cntranhtn är ångsammar än skrivarn. Fortfarand probm md att få skrivarn att stoppa då sista tcknt skrivits ut. Vi bhövr yttrigar handskakningssigna Tckn finns Assmbrprogrammring - skrivarportn 12
Gä Gränssnitt, vrsion 3 Datorsystm Skrivarbuss Skrivar = 1 (Hög nivå) indikrar för skrivarn att gitigt tckn finns att hämta på skrivarbussn. = 0 (Låg nivå) indikrar för skrivarn att skrivarbussn har tt ogitigt värd. Bit 7 1 0 Styrrgistr Assmbrprogrammring - skrivarportn 13 Händsr i Datorsystmt Inväntar =1 När =1 skrivs nästa tckn ti skrivarns datargistr. Sättr =1 Inväntar =0 När =0 nostäs som indikation på att dt int finns gitigt tckn på skrivarbussn Händsr i skrivarn Skrivarn är upptagn md att skriva ut tt tckn. =0. Skrivarnärrdoför nästa tckn och sättr =1 Inväntar =1 Sr att =1. Läsr nytt tckn från skrivarbussn. Signarar upptagn, =0. Skrivarn är upptagn md att skriva ut tt tckn. =0. * Printr V3 PRINTER EQU $0800 PSTATUS EQU $0801 PCONTROL EQU $0802 EOT EQU 4 ORG $1000 LDX #Txt Loop: LDAA 1,X+ CMPA #EOT BEQ Stop Rady: BRCLR PSTATUS,#4,Rady STAA PRINTER BSET PCONTROL,#2 NotRady: BRSET PSTATUS,#4, NotRady BCLR PCONTROL,#2 BRA Loop Stop: NOP BRA Stop ORG $3000 Txt: FCS "Hj Du Ka!" FCB EOT Assmbrprogrammring - skrivarportn 14
Rsutat t Karar nu situationn att cntranhtn arbtar snabbar än skrivarn. Karar nu situationn då cntranhtn är ångsammar än skrivarn. Karar nu situationn md att få skrivarn att stoppa då sista tcknt skrivits ut Lösningn är dock hoppöst inffktiv md tank på hur vi utnyttjar systmt Vrkigt "arbt" Procssorn väntar på ska gå hög μs 250 ms μs Assmbrprogrammring - skrivarportn 15 Introduktion ti Undantagshantring t Intrrupt RQust (IRQ), bgäran om avbrott Skrivarbuss Skrivar Datorsystm IRQ Datorsystm Skrivar buss Skrivar Huvudprogram Avbrottssigna IRQ Avbrottsrutinn utförs och tt tckn skickas ti skrivarn IRQ Avbrottsrutin som skrivr ut tt tckn Procssorn utför annat viktigt arbt s 100 ms s Assmbrprogrammring - skrivarportn 16
Avbrott Huvudprogram 1 Avbrott 2 5 6 Avbrottsrutin 3 Btjäna avbrottt RTI 4 1) Huvudprogram xkvras när tt avbrott aktivras 2) Hopp ti avbrottsrutin 3) Avbrottsrutin startar 4) Avbrottsrutin avsutas md n spci instruktion, rturn from intrrupt (RTI) 5) Åtrhopp ti huvudprogram 6) Huvudprogrammt fortsättr. Minn FFF2 FFF3 Avbrottsrutinns adrss avbrottsvktor Assmbrprogrammring - skrivarportn 17 EXEMPEL, Skrivarportn TxtP Txt A H A L H j FFF2 FFF3 Minn Printr_IRQ(H) Printr_ IRQ(L) avbrottsvktor D u K a! EOT * Avbrottsrutin Printr_ IRQ: LDX TxtP ;Läs pkar ti nästa LDAA 1,x+ ;Skriv nästa tckn STAA Printr STX TxtP ;Spara nya pkar RTI Assmbrprogrammring - skrivarportn 18