VELKOMMEN!!!! till EDA485/DIT151 Maskinorienterad Programmering önskar Jan o Rolf MOP OH LV1A 1 YFTE o MÅL Programmera i språk som ligger nära processorn (maskinen) Ge en helhetsbild av hur vi har nytta av kunskaper i området MOP ka kunna analysera, beskriva och konstruera enkla datorsystem mikroprocessor, minne, I/O, etc som använder - programmerad I/O - avbrottsstyrd I/O - maskinvarustyrd I/O Centrala begrepp i systemprogramvara, -hantering av processer, -delade objekt - ömsesidig uteslutning Ge grund för fortsatta studier inom det datatekniska området MOP OH LV1A 2 Ytterligare kurser kopplade till ingenjörskompetens och forskningsförberedelse Hardware Description and Verification Digital hardware (mer digitalteknik, programmerbarhet, VHDL) Moderna elektronikkonstruktionskurser Dator-systemteknik (Prestanda) stukturer komm Objektorienterad programmering (Java) Maskinorienterad programmering (I/O, assembler o C) Datorarkitekturkurser Operativsystem Parallellprogrammering Realtidssystem Digital- o datorteknik (digitalteknikens o processorns grunder) MOP OH LV1A 3 oftware Engineering Fundamentals Kurslitteratur Arbetsbok för MC12 Utgåva 3 Instruktionslista för CPU12 Vägen till C, Bilting / kansholm Div OH-material tenciler på resurssidan Labrelaterad material http://www.ce.chalmers.se/edu/year/2008/course/eda485/ MOP OH LV1A 4 1
8 10 13 15 Fö: im: Lektioner LP3 Vanlig vecka Föreläsningar / Demonstration Handledd självverksamhet Må Ti On To Fr Demo HC3 im gr CoD E62-63 CHARM LV4 (11/2) Fö HC3 Fö HC3 im gr AoB E61-62 Fö HC2 MOP OH LV1A 5 Laborationer i LP3 Under LP3 skall 6 st obligatoriska laborationspass utföras i tvåmannagrupper (3 assembler, 2 C och en kombinerad C och assembler) tart onsdag i LV1 med gr C 8-12 13-17 17-21 Må Ti On To Fr Gr A Gr B Gr C Gr D Gr C CHARM I LV4 (11/2) flyttas till tors kväll MOP OH LV1A 6 Fö: im: 8 10 13 15 Lektioner LP3 Vecka 1 Föreläsningar / Demonstration Handledd självverksamhet Må Ti On To Fr Fö HB4 Fö HC3 Fö HC3 Lab Gr C Lab Gr D Fö HC3 im gr AB E61-62 Fö HC2 I DAG Intro Kap 4 REP AEMBLER OH LV6 i DoD-kursen Borrmaskinlabbet Inledning till lab 1 o 2 MOP OH LV1A 7 MOP OH LV1A 8 2
CPU12 / HC12 / MC12 CPU12 / HC12 / MC12 Processorn CP CPU12 essbuss buss Microcontroller HC12 tar-tolvan (MC912xxx) Klockkristall HC12 Eclk Gemensam address och data-buss Micro-datorn MC12 essbuss - Buss E (Eclk) MOP OH LV1A 9 MOP OH LV1A 10 Programmerarens bild CPU12 CPU12 tyrenhet Instruktionsregister, IR Inst s 0-1 CPU12 - En Ackumulatormaskin i minnet Operand P Operand Q 8/16 bitars del IR1 (8) ALU (8/16) IR2 (8) IR3 (8) Flaggregister CC (8) buss (8/16) Någon operation i ALU:n Ackumulator A (8) D (16) Ackumulator B (8) Resultat R Indexregister X (16) essbuss (16) Accumulator A 16 bitars del Indexregister Y (16) tackpekare P (16) Programräknare PC (16) Flaggregister CC Accumulator K OP Minne Accumulator K 7 6 5 4 3 2 1 0 X H I N Z V C MOP OH LV1A 11 MOP OH LV1A 12 3
org $1000 ldaa $600 Läs Inporten jsr $2100 Multiplicera med fyra staa $400 kriv till utporten bra $1000 InPort EQU $0600 Def Inport OutPort EQU $0400 Def Utport org $1000 Loop ldaa InPort jsr Mul4 staa OutPort bra Loop Ett assemblerprogram MOP OH LV1A 13 Instruktionsformat CPU12 OP OP OP 7-0 15-8 7-0 18 03 OP OP L H L 12 34 OP PB AB OP PB L CD OP PB H L OP OP H L H L MOP OH LV1A 14 OP OP H L H L esseringsmoder CPU12 Inherent INH Immediate IMM (Direct (Page) DIR) Extended EXT (= Absolut FLEX) Relative Indexed REL IDX/IDX1/IDX2 Inst s 4 Eterm Emulera terminal MC12 Utvecklingsmiljö Målsystem COMport MOP OH LV1A 15 MC12 o dbg12 MOP OH LV1A 16 4
MC12 Utvecklingsmiljö COMport Eterm Emulera terminal Målsystem MC12 o dbg12 MOP OH LV1A 17 MOP OH LV1A 18 Borrmaskinlabbet Lab 1,2, 3 och 6- En Robot - I/O och avbrott och två processer Assembler och C olenoid med vridarm för sänkning av borr Borrmaskin-Robot Borrmotor med ON/OFF knapp 48 Tangentbord för borrkommando Operatör ensor för borr i bottenläge ensor för detektering av referensmärke på arbetsstycke Mikrodator Anpassningselektronik Klocka Borrmaskin MOP OH LV1A 19 Tryckfjäder för höjning av borr Basplatta Arbetsstycke tegmotor för rotering av arbetsstycke Kretskort med effektelektronik och anslutning mot styrkort för MOP OH LV1A 20 borrmaskin 5
imulatorn för borrmaskinen 49 pecifikation 48 New disc: Här väljer du olika arbetsstycken Control-fönster: tyrord till borrmaskinen tatus-fönster: tatussignaler från borrmaskinen Indikator för Motor On Indikator för Alarm Arbetsstycke Borrade hål märks ut tart Operation vald Ja Utför operation Nej starta borrmotorn stoppa borrmotorn sänk borret höj borret vrid (stega) arbetsstycket ett steg vrid (stega) arbetsstycket till referenspositionen borra ett hål borra hål längs cirkeln enligt ett bestämt mönster. MOP OH LV1A 21 MOP OH LV1A 22 A=0 UB0 (TART) TART Init KEYB1 COMMAND A=1 UB1 (TOP) A=2 UB2 (DOWN) Borrmaskinen UB3 (UP) COMMAND para registerinnehåll på stacken A=3 Avkoda (A) UB4 (TEP) Återställ registerinnehåll från stacken A=4 A=5 A=6 A=7 UB5 (DRILL) Inparameter: Kommandonummer i register A UB6 (REFPO) UB7 (AUTO) 57 MOP RTOH LV1A 23 A>7 tyrord till borrmaskinen 50 Utport: Drill Control 7 6 5 4 3 2 1 tatusord från borrmaskinen Inport: Drill tatus 7 6 5 4 3 2 1 0 0 Etta : Aktiv styrsignal Nolla : Passiv styrsignal stegpuls fram/back borrmotor solenoid larmsummer Nolla: Passiv statussignal Etta: Aktiv statussignal referensposition borr uppe borr nere MOP OH LV1A 24 6
Testförfarande DInput equ $600 Dip witch Input DCtrl equ $0F00 Drill Control Output Dtatus equ $0F01 Drill atus Input Loop LDAA DInput Läs strömbrytare TAA DCtrl Ge styrord LDAB Dtatus Läs status BRA Loop 62 MOP OH LV1A 25 Användning av UE-direktivet * Filen DRILLDEF.s12 Inport EQU $600 Dip witch Input DCtrl EQU $F00 Drill Control Output Dtatus EQU $F01 Drill taus Input Outport EQU $400 Lysdioderna * Filen DTET1.s12 UE DRILLDEF.s12 ORG $1000 Loop ldaa Inport Läs strömbrytarna staa DCtrl kriv till borrmaskinen ldab Dtatus Läs statusregistret stab Outport Visa statusregistret bra Loop MOP OH LV1A 26 49 TART RefPos Övergripande specifikation av inledande borrmaskinuppgift: 51 Att vrida arbetsstycket 51 Vrid3 Borra Vrid3 Borra Vrid1 a) Arbetsstycket vrids till referensposition b) Ett hål borras c) Arbetsstycket vrids medurs tre steg d) Ett hål borras e) Arbetsstycket vrids medurs ett steg f) En larmsignal ges som indikation på att uppgiften är klar. Vrid1 Ange riktning Ge puls RT Utport: Drill Control 7 6 5 4 3 2 1 0 stegpuls fram/back Bit 0 = 0 1 (Pos puls): Arbetsstycket vrids Bit 1 = 0: Medurs vridningsriktning Bit 1 = 1: Moturs vridningsriktning Etta: Aktiv styrsignal Nolla: Passiv styrsignal Vrid1 Vrid1 Vrid1 RT Larm TOP MOP OH LV1A 27 MOP OH LV1A 28 7
Borra Att borra ett hål 52 Att vrida arbetsstycket till ref-pos 52 tarta motor änk borr Utport: Drill Control 7 6 5 4 3 2 1 0 Etta: Aktiv styrsignal Nolla: Passiv styrsignal RefPos N Läs tatus Borr Nere? J Höj borr Inport: Drill tatus 7 6 5 4 3 2 1 0 borrmotor solenoid Nolla: Passiv statussignal Etta: Aktiv statussignal Inport: Drill tatus 7 6 5 4 3 2 1 0 Nolla: Passiv statussignal Etta: Aktiv statussignal referensposition Bit 0 = 0: Arbetsstycket är inte i referensposition Bit 0 = 1: Arbetsstycket är i referensposition Läs tatus Ref Pos? N Vrid1 J borr nere tanna motor RT MOP OH LV1A 29 RT MOP OH LV1A 30 Kopia av styrordet 53 Realtid - Fördröjningar 54 * Ge tyrord till borrmaskinen LDAA #tyrord TAA DCtrl LDAA DCCopy Läs kopian av styrordet ANDA #Bitmönster Nolla en styrbit TAA DCtrl Ge nytt styrord TAA DCCopy para nya kopian 3 sätt att köra simulatorn tep Run (10 instruktioner/s) Run Fast (1000 instruktioner/s) (Verkligt system 200 000 instruktioner/s) DCCopy RMB 1 Drill Control Copy MOP OH LV1A 31 MOP OH LV1A 32 8
Realtid Fördröjningar forts 54 tarta borrmotorn (vänta tills den är uppe i varv) Vrid arbetsstycket ett steg (vänta tills det har vridits till rätt position) Lyft borret (vänta tills borret har kommit ovanför arbetsstycket) etc Realtid Fördröjningar forts 55 ********************************************** *UBRUTIN DELAY * Beskrivning: kapar en fördröjning om * ANTAL x 500 ms. * Anrop: LDA #6 Fördröj 6*500ms = 3s * JR DELAY * Indata: Antal intervall,om 500 ms i A * * Utdata: Inga * Register-påverkan:Ingen * Anropad subrutin: Ingen. ********************************************** MOP OH LV1A 33 MOP OH LV1A 34 *************************************** * UBRUTIN DELAY * Beskrivning: kapar en fördröjning om ANTAL x 500 ms. * * Anrop: LDAA #6 Fördröj 6*500ms= 3s * JR DELAY * * Indata: Antal intervall,om 500 ms i A * * Utdata: Inga * Register-påverkan: Ingen * Anropad subrutin: Ingen. ************************************** DELAY PHA PHX TTA BEQ DExit Fördröjningsvärde noll * Konstanten 'Konst' måste bestämmas... ALOOP LDX #Konst 55 Realtid Fördröjningar forts XLOOP LEAX -1,X 2 cykler NOP 1 cykel CPX #0 2 cykler BNE XLOOP 3 cykler DECA BNE ALOOP * Ytterligare fördröjning DExit PULX PULA MOP OH LV1A 35 RT Villkorlig assemblering #ifdef RUNFAT * Konstant vid Run Fast Konst EQU???? #else * Konstant vid Run Konst EQU???? #endif E ID 42 55 MOP OH LV1A 36 9
Tangentbord o Borrmaskin 56 Tangentbord o Borrmaskin 56 KEYB1 TART Läs tangentbord 7 DAV 6 0 5 0 4 0 3 B3 2 B2 1 B1 0 B0 Init N Tangent nere J Bit 7, DAV: Valid; tatusbit som anger nedtryckt tangent b 7 =1: Ingen tangent är för tillfället aktiverad på tangentbordet. b 7 =0: En tangent är aktiverad Bit 6-4, 0: Används ej. Bit 3-0, B3-B0: Tangentnummer; Anger aktuell tangentnedtryckning. MOP OH LV1A 37 KEYB1 COMMAND Läs tangentbord N Tangent uppe J RT MOP OH LV1A 38 Borrmaskinrobot TART Rutinen COMMAND 57 Init Tangent nr Operation subrutin 0 starta borrmotorn TART KEYB1 1 stoppa borrmotorn TOP 2 sänk borret DOWN 3 höj borret UP 4 rotera arbetsstycket medurs ett steg TEP 5 borra ett hål DRILL 6 stega arbetsstycket till referensposition REFPO 7 borra hål längs cirkeln enligt mönster AUTO UB0 (TART) COMMAND A=0 A=1 UB1 (TOP) A=2 UB2 (DOWN) UB3 (UP) COMMAND para registerinnehåll på stacken A=3 Avkoda (A) UB4 (TEP) A=4 A=5 A=6 A=7 UB5 (DRILL) Inparameter: Kommandonummer i register A UB6 (REFPO) UB7 (AUTO) A>7 Återställ registerinnehåll från stacken MOP OH LV1A 39 MOP RTOH LV1A 40 10
Rutinen COMMAND 57 ************************************************** *UBRUTIN COMMAND *Beskrivning: Rutinen avgör vilken *kommandosubrutin som skall anropas och anropar *denna. *Anrop: JR COMMAND *Indata: Kommandonummer i reg A *Utdata: Inga *Reg-påverkan: Ingen *Anrop subr: UB0 - UB7 ************************************************** MOP OH LV1A 41 COMMAND MAX EQU 7 COMMAND PHA PHX CMPA #MAX giltigt värde? BHI COMEX LDX #JUMPTAB hopptabellens basadress ALA offset är 2 bytes per adress LDX A,X hämta subrutinens startadress JR,X utför subrutin COMEX PULX återvänd från kommandorutin PULA RT ********************************** * Tabell med subrutinadresser JUMPTAB FDB UB0,UB1,UB2,UB3,UB4,UB5,UB6,UB7 ********************************** * subrutiner för test, byts senare ut mot TART, TOP, DOWN etc UB0 MOVB #0,ParOut RT UB1 MOVB #1,ParOut RT UB2 MOVB #2,ParOut RT Dummy-subrutiner UB3 MOVB #3,ParOut UB4 RT MOVB etc MOP OH LV1A 42 57 TRUKTUR: Filen MAIN1.s12 58 1. Inkludera definitionsfil 2. Initiera systemet 3. Huvudprogram 4. ubrutinen COMMAND 5. Inkludera fil (filer) med ytterligare subrutiner. 6. Plats för variabler MOP OH LV1A 43 1 2 3 4 5 6 * Definitioner UE IODEF.12 ORG tart --- Initiera mikrodatorsystem --- Initiera borrsimulator ************************************ * Huvudprogram * Invänta vald operation Loop: MAIN1.s12 58 JR KEYB1 NOP * Utför vald operation JR COMMAND BRA Loop ************************************ COMMAND--- Här följer rutinen COMMAND ---... och hopptabell ---... och Dummysubrutiner UE KeyML15.12 Lägg till KEYB1 * Placera alla variabler här DCCopy RMB Kopia av styrord MOP OH LV1A 44 11
MOP OH LV1A 45 59 *ubrutin TOP. ubrutinen stoppar borrmotorn. *Borrmotorn stoppas genom att subrutinen OUTZERO *först matar ut värdet 0" på bit 2 av utporten *DCTRL och sedan uppdaterar kopian av styrordet, *DCCOPY. Endast bit 2 på utporten och DCCOPY *påverkas. * *Anrop: JR TOP *Indata: Inga *Utdata: Inga *Registerpåverkan: Ingen *Anropade subrut: OUTZERO * ubrutin OUTZERO. Läser kopian av * borrmaskinens styrord på adress DCCopy. * Nollställer en av bitarna och skriver det * nya styrordet till utporten DCTRL samt * tillbaka till kopian DCCopy. * Biten som nollställs ges av innehållet i * B-registret (0-7) vid anrop. * Om (B) 7 utförs ingenting. * * Anrop: LDAB #bitnummer * JR OUTZERO * * Bitnumrering framgår av följande figur. 7 6 5 4 3 2 1 0 * Utdata: Inga * Registerpåverkan: Ingen * Anropade subrutiner: Inga OUTZERO.s12 MOP OH LV1A 46 53 Att testa filen MAIN1.s09 pecifikation tart TART Operation vald Nej Init Ja Utför operation KEYB1 COMMAND DInput EQU $0c00 Dip witch Input DCtrl EQU $0400 Drill Control Output Dtatus EQU $0600 Drill taus Input MOP OH LV1A 47 Loop ldaa DInput Läs strömbrytarna staa DCtrl kriv till borrmaskinen ldaa Dtatus Läs statusregistret BRA Loop MOP OH LV1A 48 12
TART Att testa nya funktioner i MAINxx Borrmaskinlabbet Lab 1,2,3 och 6 - En Robot - I/O och avbrott och två processer Assembler och C Init KEYB1 Tangentbord för borrkommando Operatör COMMAND Mikrodator Anpassningselektronik Borrmaskin Klocka MOP OH LV1A 49 MOP OH LV1A 50 LAB 1 Klockan (Uppgift 62-73) Reg Y LDAB 1,Y+ ess Kommentar Clock 02 Timmar 04 Tiominuter 00 Minuter 01 Tiosekunder 09 ekunder 06 Tiondelar Clock fcb 2,4,0,1,9,6 ML5_PO tyr vilken sifferindikator som skall tändas ML5_EG tyr vilka segment som skall tändas på 8. 8. 8. 8. 8. 8. sifferindikatorerna 2.40.19.6 Reg X LDAB B,X ess egmentkod för egtab 77 Noll 24 Ett 5D Två 6D Tre 2E Fyra etc egtab fcb $77,$24,$5D,etc MOP OH LV1A 51 Fö 2: essavkodning Minnen Bussar generellt Processorns anslutningar Timing essavkodning Fullständig Avk Ofullständig Avk Processorns adressrum VMA Valid Memory ess Processor - Bussar Minne krivare Mus etc MOP OH LV1A 52 13
Lite om Minnen Multiplexad Buss RAM RWM RAM Random Access Memory Read Write Memory tatiskt RAM Processor A/D ess och databuss DRAM Dynamiskt ROM Read Only Memory Klocka PROM EPROM EEPROM Programmable ROM Erasable PROM Electrically EPROM A/D Buss FLAH Busscykel Busscykel Busscykel MOP OH LV1A 53 MOP OH LV1A 54 Icke Multiplexad Buss CPU12 / HC12 / MC12 Processor essbuss buss Processorn CP CPU12 essbuss buss Klocka. buss buss Microcontroller HC12 tar-tolvan (MC912xxx) Busscykel Busscykel Busscykel Klockkristall HC12 Eclk Micro-datorn Gemensam address och data-buss MC12 essbuss - Buss E (Eclk) MOP OH LV1A 55 MOP OH LV1A 56 14
trobe Här är adressen Asynkront Bussprotokoll Klocka ynkront Bussprotokoll Processor essbuss buss Minne essbuss Processor buss Minne ACK Här är data Klocka Klocka. buss. buss trobe buss ACK MOP OH LV1A 57 buss En busscykel MOP OH LV1A 58 Bussarnas tillstånd Bussarnas tillstånd Processorns adressrum Processor MA Reg A $67 PC Buss Buss klocka E kriv/läs R/W Buss $1234 $1235 $1236 $1237 $C5A0 $B7 $C5 $A0 $?? MINNE OP-kod sta-extended Operand ( HI) Operand ( LO) Next OP UT port Klock- ess- - R/W Kommentar Cykel buss buss 1 1234 B7 R Läs OP-kod 2 1235 C5 R Läs -Operand Hög byte 3 1236 A0 R Läs -Operand Låg byte 4 FFFF?? R 5 C5A0 67 W kriv A till minnet MOP OH LV1A 59 MOP OH LV1A 60 15
MC12: anslutningar MC12 s-timing Maskincykel +5V Eclk essbuss (16) tyrsignaler REET Mikrodator MC12 Klockkristall buss (8) tyrsignaler ess bussen buss Processorn lägger ut giltig adress Minnet lägger ut data på bussen Här laddas (latchas) data in till processorn 0 250 500 t (ns) GND MOP OH LV1A 61 VALID MEMORY ADRE; VMA MOP OH LV1A 62 essavkodning essavkodning Processor (CPU) essavkodning Inenhet Utenhet TAA $C5A0 TAA UTPORTADRE C Minne LD CP buss (8) Utport $C5A0 Register (8) Till omgivningen (8) MOP OH LV1A 63 C Om vi behöver flera I/O-portar Ut0 Ut1 Ut2 Ut3 In0 In1 In2 In3 på adress $C5A0 på adress $C5A1 på adress $C5A2 på adress $C5A3 på adress $C5A4 på adress $C5A5 på adress $C5A6 på adress $C5A7 Fixas med 8 st NAND-grindar eller??? MOP OH LV1A 64 16
essavkodning essavkodning Om vi behöver flera I/O-portar A 15 A 14 A 13 CIO A 2 A 1 C_Out0 CIO A 2 A 1 C_Out1 Ut0 Ut1 Ut2 Ut3 In0 In1 In2 In3 på adress $C5A0 på adress $C5A1 på adress $C5A2 på adress $C5A3 på adress $C5A4 på adress $C5A5 på adress $C5A6 på adress $C5A7 CIO A 2 A 1 DATA I/O-modul Intern adressavkodning 8 I/O-portar Out0 (8 bit) Out1 (8 bit) In 2 (8 bit) In 3 (8 bit) A 12 A 11 A 10 A 9 A 8 A 7 A 6 A 5 A 4 A 3 E CIO CIO A 2 A 1 C_In0 CIO A 2 A 1 C_In3 MOP OH LV1A 65 MOP OH LV1A 66 En minnesmodul 2 Kbyte RWM-modul Att ansluta en 2-kbyte RWM- modul med startadress $4000 A 1 A 2 A 10 C C 0 C 1 C 2 C 2047 Read Write C 0 Write C 2047 Write C 0 Read C 2047 Read C Register (8) 1 C Register (8) 1 OE 0 OE 2047 D 7 -D 0 2kByte RWMmodul C essbuss A 10 - buss D 7 -D 0 2kByte RWMmodul C essbuss A 10 - buss D 7 -D 0 Arbetsgång: Tolka beskrivningen av minnesmodulen Rita tabell Ange modulens första adress Ange modulens sista adress Märk ut konstanta resp varierande adressledningar Rita adressavkodningslogiken buss utanför minnesmodulen, ansluts till processorns databuss MOP OH LV1A 67 MOP OH LV1A 68 17
Att ansluta en 2-kbyte RWM- modul Att ansluta en 2-kbyte RWM-modul essbuss A 15 - A 15 A 14 A 15 -A 11 A10 - E/EClk MC12 C-logik för 2kByte RWM CRWM 2kByte RWMmodul C A 13 A 12 A 11 E CRWM buss D 7 -D 0 MOP OH LV1A 69 MOP OH LV1A 70 Att ansluta en 8-kbyte ROM- modul till ett befintligt system essbuss A 15 - Att ansluta en 8-kbyte ROM-modul essbuss A 12 - A 12 - E/EClk MC12 A 15 -A 11 A10 - C-logik för RWM Och ROM CRWM CROM 2kByte RWMmodul C C 8kByte ROMmodul C 8kByte ROMmodul buss D 7 -D 0 kall placeras på de högsta adresserna ($FFFF) D 7 -D 0 buss D 7 -D 0 MOP OH LV1A 71 MOP OH LV1A 72 18
Att ansluta en 8-kbyte ROM-modul A 15 A 14 A 13 E CRWM Processorns adressrum Beskrivande figur över hur minnesmoduler och IO-portar är placerade i minnet 0000 4000 4800 C5A0 E000 Tomt RWM Tomt Tomt IO-port WRITE: = 0 READ: =1 ROM MOP OH LV1A 73 MOP OH LV1AFFFF 74 Fullständig resp Ofullständig essavkodning Uppgift Konstruera adressavkodningen för följande: 4 kbyte RWM från adress 0 8 kbyte ROM på de högsta adresserna En I/O-area på 256 Byte med start på adress $6000 Du har tillgång till 8 kbyte ROM-modul 4 kbyte RWM-modul Använd fullständig adressavkodning MOP OH LV1A 75 MOP OH LV1A 76 19
Uppgift Uppgift om förra... men använd ofullständig adressavkodning! Konstruera adressavkodningen för följande: 4 kbyte RWM från adress 0 8 kbyte ROM på de högsta adresserna En I/O-area på 256 Byte med start på adress $6000 Du har tillgång till 8 kbyte ROM-modul 4 kbyte RWM-modul Konstruera adressavkodningen för följande: En I/O-area på 512 Byte med start på adress $0000 RWM från I/O-areans slut till adress $1FFF ROM från adress $2000-$FFFF Du har tillgång till 64 kbyte ROM-modul 8 kbyte RWM-modul MOP OH LV1A 77 MOP OH LV1A 78 Att ansluta en Xk Byte Minnes- modul med startadress $zzzz Klocka Multiplexad Buss Eclk C essbuss A yy - buss D 7 -D 0 Arbetsgång: Tolka beskrivningen av minnesmodulen Rita tabell Ange modulens första adress Ange modulens sista adress Märk ut konstanta resp varierande adressledningar Rita adressavkodningslogiken MOP OH LV1A 79 Buss Busscykel HC12 Eclk Busscykel ess och databuss Busscykel Klocka. buss buss Busscykel Busscykel Busscykel Xk Byte RWMmodul Icke Multiplexad Buss MC12 eller någon processor essbuss buss MOP OH LV1A 80 20
Klocka. buss trobe buss ACK trobe Här är adressen essbuss Processor buss ACK Här är data Minne ynkront Bussprotokoll Klocka. buss buss Asynkront Bussprotokoll Klocka essbuss Processor buss Minne En busscykel MOP OH LV1A 81 A 15 A 14 A 13 A 12 A 11 A 10 A 9 A 8 A 7 A 6 A 5 A 4 A 3 E CIO CIO A 2 A 1 CIO A 2 A 1 VMA = E (Valid Memory Address) essavkodning C_Out0 C_In0 CIO A 2 A 1 (kilja på ut och inportar) CIO A 2 A 1 MOP OH LV1A 82 C_Out1 C_In3 I DAG Fö 3 tudera HDW/W för en yttre enhet som ansluts till systemet (yfte med avsnitt 2) tart Befintligt system essbuss A 15 - Vi konstruerar en Printer-Port för att studera: ynkroniseringsproblem och överföringsmekanismer (HDW/W) Villkorlig / ovillkorlig överföring Busy Wait och Polling Handskakningssignaler Avbrott Kvartskristall 8MHz MC12 Timingsignal E R/W (Läs/kriv) buss D 7 - D 0 Förutsättningar för MC12-systemet: Befintlig Chip elect-signal som vi kan utnyttja i expansionssammanhang essrum M MOP OH LV1A 83 MOP OH LV1A 84 21
essavkodning för skrivarporten $0000 23 Printerport - forts s Vi måste ge vissa förutsättningar för skrivaren. $0800 $0803 I/O Vår skrivare är från början en "dum" skrivare: Den kan endast arbeta med ett tecken i taget. Block 1 (i MC12- systemet) IOEL Block 2 $FFFF CHIP ELECT (till skrivar-porten) (hämtar ett tecken - skriv ut - hämta nästa) Det finns inledningsvis inga handskaknings-signaler Max utskriftshastighet: 4 tecken per sekund. BA-adressen MOP OH LV1A 85 MOP OH LV1A 86 Printerport v1.0 s23 Printerport v1.0 s24 C_Printer R/W Processorns databuss Anslutning mot MC12- systemet ess avkodning C_Pri CP Regiser (8) C krivarbuss Anslutning mot skrivaren org $2000 ldx #Text Pekare till textsträng Loop ldaa 1,x+ Läs tecken o peka på staa PRINTER kriv ut bra Loop Text fcs "Hej Du Kalle!" Textsträng : Text H e j D u K a l l e! ACIIkoder för text- sträng MOP OH LV1A 87 MOP OH LV1A 88 22
Printerport v1.0 s23 Printerport v1.0 PrinterV1_1 s24 : Text H e j D u K a l l e! EOT ACIIkoder för text- sträng J Init Läs nästa tecken Tecken= EOT? N Överför till krivaren MOP OH LV1A 89 MOP OH LV1A top 90 * Printer V1.1 PRINTER EQU $0800 EOT EQU 04 ORG $2000 LDX #Text Pekare till textsträng Loop LDAA 1,X+ Läs tecken o peka på nästa CMPA #EOT BEQ top TAA PRINTER kriv ut BRA Loop top NOP BRA top Printerport v1.1 Text: FC "Hej Du Kalle!" FCB EOT lutmarkering 24 MOP OH LV1A 91 MC12- system Printerport v1.1 Loop LDAA 1,X+ Läs tecken o peka på nästa CMPA #EOT BEQ top TAA PRINTER kriv ut BRA Loop MOP OH LV1A 92 s krivare 23
Printerport v1.2 Villkorlig överföring 25 MC12- system krivare s Mottagaren Redo? N Mottagaren Redo? N J J Loop ldaa 1,x+ Läs tecken cmpa #EOT ista? beq top staa Printer.. nej skriv ut jsr Delay250ms Vänta 250 ms bra Loop MOP OH LV1A 93 änd till mottagaren Busy Wait änd till mottagaren Polling MOP OH LV1A 94 Printerport v2 - med register och READY-signal Villkorlig överföring s26 Printerport v2.0 READY s26 Läs tatus READY MC12-system krivarbuss krivare Är skrivaren upptagen? Nej Överför data Ja MC12- system krivar buss MOP OH LV1A 95 krivare Bit 7 tatusregister READY = 1 (Hög nivå): skrivaren är REDO READY = 0 (Låg nivå): skrivaren är UPPTAGEN 2 READY MOP OH LV1A 96 1 0 24
Printerport v2.0 s26 Printerport v2.0 s C ess avkodning C_tat READY R/W Anslutning mot Processorns bussar Processorns databuss C_Pri CP 1 b 2 Register (8) C Anslutning mot skrivaren C C_Pri C C_tat krivarbuss Printer gränssnitt V2 register = basadress tatusregister = basadress+1 MOP OH LV1A 97 MOP OH LV1A 98 Printerport v2.0 * Printer V2.0 Printer equ $800 Printer Ptatus equ $801 Printer tatus PrinterV2_0 Init s26 Printerport v2 26 org $2000 Läs nästa tecken ldx #Text Pekare Loop ldaa 1,x+ Läs tecken cmpa #EOT ista? beq top NotRDY ldab Ptatus Läs tatus bitb #Ready. och invänta beq NotRDY.. redo skrivare staa Printer kriv ut bra Loop J Tecken= EOT? N Läs tatus READY=1? J Överför till krivaren N top bra top MOP OH LV1A top 99 MOP OH LV1A 100 25
Printerport v2.1 s27 ldx #Text Pekare till textsträng Loop ldaa 1,x+ Läs tecken cmpa #EOT ista? beq top NotRDY ldab Ptatus Läs tatus bitb #Ready. och invänta beq NotRDY.. redo skrivare staa Printer kriv ut RDY ldab Ptatus Läs tatus bitb #Ready. och invänta bne RDY.. upptagen skrivare bra Loop top bra top MOP OH LV1A 101 Printerport v2.1 * Utnyttja definitionsfilen use PrinterDefs.asm ldx #Text Pekare till textsträng Loop ldaa 1,x+ Läs tecken cmpa #EOT ista? beq top NotRDY ldab Ptatus Läs tatus bitb #Ready. och invänta beq NotRDY.. redo skrivare staa Printer kriv ut RDY ldab Ptatus Läs tatus bitb #Ready. och invänta bne RDY.. upptagen skrivare MOP OH LV1A 102 s Printerport v3 med READY o DAV 28 Printerport v3 adressavkodning s READY Datorsystem DAV krivarbuss krivare register = basadress tatusregister = basadress+1 tyrregister = basadress+2 Bit 7 1 DAV 0 tyrregister 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. C A 1 C_Pri C A 1 C A 1 C_tat C_Ctrl MOP OH LV1A 103 MOP OH LV1A 104 26
Printerport v3 s29 Printerport v3 s28 C A 1 R/W Anslutning mot MC12 ess avkodning C_Ctrl CP Processorns databuss b 1 Register (1) C C_tat C_Pri CP 1 b 2 Register (8) C READY krivarbuss DAV Anslutning mot skrivaren Printer gränssnitt V3 MOP OH LV1A 105 MOP OH LV1A 106 Printerport v4 s29 Villkorlig överföring BUY WAIT s Läs tatus READY Är skrivaren upptagen? Ja MC12- system DAV krivar buss krivare Nej MOP OH LV1A 107 Överför data POLLING MOP OH LV1A 108 27
Hur bra blev det egentligen???? * HUVUDPROGRAM... Olika initieringar... Loop... Annat arbete som... processorn utför... jsr Print kriv ut en fil... bra Loop Verkligt "arbete" 30 Polling Pågår utskrift? Är skrivaren Redo? kriv nästa tecken Nej Nej * HUVUDPROGRAM... Olika initieringar Loop...... Annat arbete som... processorn utför tst PFlag Pågår utskriftsrutin? beq NoPrint.. hoppa om NEJ brclr Ptatus,#Ready,NoPrint Läs tatus jsr Print1char kriv ut ett tecken DAV Processorn väntar på DAV skall gå hög MOP OH LV1A 109 s 100 ms s NoPrint... BRA Loop Pflag rmb 1 Flagga:Pågår utskrift? MOP OH LV1A 110 Avbrott s30 Avbrott - forts s DAV Verkligt "arbete" HITILL: Programmeraren (DU) bestämmer när: JR Print1char kriv ett tecken s Processorn väntar på DAV skall gå hög 250 ms s VID AVBROTT: krivaren bestämmer när: Print1char kriv ett tecken Processor Datorsystem Avbrott (Redo) Här är data Yttre enhet MOP OH LV1A 111 VAD KRÄV? spara undan sin PC starta en rutin som skriver ut ett tecken till skrivaren för att sedan återstarta huvudprogrammet MOP OH LV1A 112 28
Huvudprogram Avbrott - forts s Avbrott - forts s IRQ MC12- system Avbrottsrutin som skriver ut ett tecken READY DAV krivarbuss krivare : TextP A H Pekare till A L nästa tecken Text H e j Avbrottssignal D u ACIIkoder K för texta sträng l l e! EOT lutmarkeing MOP OH LV1A 113 : TextP A H Pekare till A L nästa tecken Text H * Avbrottsrutin e j IRQ ldx ldaa TextP 1,x+ Läs pekare till nästa kriv nästa tecken D u ACIIkoder K för texta sträng l l e! EOT lutmarkeing sta Printer stx TextP para nya pekare rti MOP OH LV1A 114 Avbrott - forts s Huvudprogram Avbrott - forts s31 IRQ s Avbrottsrutinen utförs och ett tecken skickas till skrivaren Processorn utför annat viktigt arbete IRQ 100 ms s 1 Avbrottsrutin 3 Avbrott 2 Betjäna avbrottet 5 6 4 RTI Minnet ess $FFF2 tartadress för $FFF3 avbrottsrutin 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. MOP OH LV1A 115 MOP OH LV1A 116 29
Villkorlig överföring 25 Printerport v3 med READY o DAV 28 READY Mottagaren Redo? J N Mottagaren Redo? J N Datorsystem Bit 7 DAV krivarbuss 1 0 krivare änd till mottagaren änd till mottagaren tyrregister DAV Busy Wait Polling MOP OH LV1A 117 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. MOP OH LV1A 118 Avbrott s30 Verkligt "arbete" DAV Processorn väntar på DAV skall gå hög s 250 ms s Processor Datorsystem Avbrott (Redo) Här är data Yttre enhet MOP OH LV1A 119 30