Förutsättningar för skrivaranslutningen. Första programexemplet. Inför specialtecken för strängslut

Relevanta dokument
Förutsättningar för skrivaranslutningen. Första programexemplet. strängslut. Maskinorienterad Programmering 2011/2012 Synkronisering och undantag

Förutsättningar för skrivaranslutningen. Första programexemplet. Synkronisera arbetstakterna

Programmering av inbyggda system

Förutsättningar för skrivaranslutningen

Undantagstyper. Maskinorienterad Programmering 2010/2011. MC68HC12, Stencil Assemblerprogrammering.pdf CPU12 Reference Guide

I DAG fo 4. Printerport v3 med READY o DAV. Avbrott. Hur bra blev det egentligen????

F8: Undantagshantering

Maskinorienterad Programmering 2010/2011. Maskinorienterad Programmering 2010/2011. Skrivarporten, p Arbetsbok MC12, avsnitt 2

Digital- och datorteknik

EDA480/EDA485 - Maskinorienterad programmering, tentamen 2006-xx-xx 1(7)

Assemblerprogrammering del 3

Maskinorienterad programmering

Digital- och datorteknik

Avbrottshantering. Övningsuppgifter

Avbrottshantering. Övningsuppgifter Lösningsförslag Uppgift (Reservation för diverse fel!)

Laborationsmoment 2 - En Borrautomat

Laborationsmoment 2 - En Borrautomat

Datorsystemteknik Föreläsning 7DAVA14

Avbrott - En enhet. I DAG fo 6 Mera avbrott. Avbrott - Fler enheter. Olika typer av avbrott DMA. Avbrott - Fler enheter -Avbrottshanterare

Maskinorienterad programmering

Arbetsbok för MC12, kapitel 4 Klocka. Genomgång av laborationer. New disc Här väljer du olika arbetsstycken

Maskinorienterad programmering

Extrauppgifter för CPU12

3. Mikroprogrammering II

EDA Digital och Datorteknik

Maskinorienterad programmering

F6: I/O hantering. Typer av I/O i ett datorsystem. Protokoll för synkronisering. Drivrutiner. Memory mapped Port mapped. Polling Timed Interrupt DMA

Maskinorienterad programmering

Digital och Datorteknik EDA /2010. EDA Digital och Datorteknik

Styrenheten 9/17/2011. Styrenheten - forts Arb s 120. LV4 Fo10. Aktivera Kursens mål: Kap 7 Blå

Polling (cyklisk avfrågning) Avbrott

Digital- och datorteknik

Maskinorienterad programmering. Mekatronikingenjör åk 2/ lp 3. Lars-Eric Arebrink. Av institutionen utgiven. Lars-Eric Arebrink

F2: Motorola Arkitektur. Assembler vs. Maskinkod Exekvering av instruktioner i Instruktionsformat MOVE instruktionen

Föreläsningsanteckningar 3. Mikroprogrammering II

Svar till Övning3 Datorteknik, HH vt12 Avbrott och timers

Datorteknik. Tomas Nordström. Föreläsning 6. För utveckling av verksamhet, produkter och livskvalitet.

Programmering av inbyggda system 2013/2014

Programmering av inbyggda system

Printerport. I DAG Fö 3. Adressavkodning för skrivarporten. Printerport - forts

Maskinorienterad programmering. Mekatronikingenjör åk 2/ lp 3. Lars-Eric Arebrink. Av institutionen utgiven. vid flera tillfällen.

Genomgång av laborationer. New disc: Här väljer du olika arbetsstycken. Control -sektion: Styrord till borrmaskinen

Laborationsmoment t 2 - En Borrautomat

Övningsuppgifter i Mikrodatorteknik 4p/5p

F6: I/O hantering. Typer av I/O i ett datorsystem. Memory mapped

Mål. Datorteknik. Introduktion. Innehåll. Verklig situation - pappaledighet. Introduktion (forts)

Institutionen för elektro- och informationsteknologi, LTH

Laborationsmoment t 2 - En Borrautomat

Lösningsförslag till Tenta i Mikrodator

Digital- och datorteknik

Assemblerprogrammering del 2

Lösningsförslag till Tenta i Mikrodator

Digital- och datorteknik

Programexempel för FLEX

Digital- och datorteknik

Maskinorienterad programmering

Dataöverföring på Parallell- och serieform MOP 11/12 1

Institutionen för elektro- och informationsteknologi, LTH

Datorteknik. Föreläsning 5. Realtidssystem och realtidsprogrammering. Institutionen för elektro- och informationsteknologi, LTH.

BDM12 Användarbeskrivning. Introduktion

TENTAMEN (med svar och vissa lösningar)

Datorteknik. Föreläsning 4. Polling och avbrott. Institutionen för elektro- och informationsteknologi, LTH. Mål

Tentamen med lösningsförslag

Minnet. Minne. Minns Man Minnet? Aktivera Kursens mål: LV3 Fo7. RAM-minnen: ROM PROM FLASH RWM. Primärminnen Sekundärminne Blockminne. Ext 15.

Programmering av inbyggda system 2014/2015

Fö 5+6 TSEA81. Real-time kernel + Real-time OS

Tentamen. EDA485 Maskinorienterad programmering Z DAT015 Maskinorienterad programmering IT. Tisdag xx yyyy 2006, kl

CPU. Carry/Borrow IX. Programräknare

TENTAMEN Datorteknik (DO2005) D1/E1/Mek1/Ö1

DBG identifierar därefter sig genom utskrift av namn och version. Se även "Disposition av adressrum" nedan. Följande kommandon accepteras av DBG

Tentamen med lösningsförslag

Programräknaren visar alltid på nästa instruktion som skall utföras. Så fort en instruktion har hämtats så visar programräknaren på nästa instruktion.

Övningsuppgifter STYRNING - i Mikrodatorteknik för U2 2010

0.1. INTRODUKTION Instruktionens opcode decodas till en språknivå som är förstålig för ALUn.

Reducerad INSTRUKTIONSLISTA för FLIS-processorn

F7: I/O hantering. Asynkron och synkron busscykel Bussfördelning. Periferikretsar

Programallokering. Programtyper. Att placera program i flashrespektive. Program i FLASH-minne. Program i RAM-minne

Datormodell. Datorns uppgifter -Utföra program (instruktioner) Göra beräkningar på data Flytta data Interagera med omvärlden

Tentamen i EIT070 Datorteknik

Föreläsningsanteckningar till Konstruktionsmetoder

Lösningsförslag tenta

DAT 015 Maskinorienterad programmering 2010/2011. Uppbyggnad_och_funktion.pdf

LV6 LV7. Aktivera Kursens mål:

Dataminne I/O Stack 0x005D 0x3D SP low byte 0x005E 0x3E SP high byte

Laboration 4: Knappstuds Drivrutiner för att eliminera störningar.

Exempel på tentamen 1

Provmoment: Ladokkod: Tentamen ges för: Tentamen TE111B El3. Namn: Personnummer: Tentamensdatum: Tid: 14:00-18:00.

Lösningar till tentamen i EIT070 Datorteknik

Adressrum, programmerarens bild

Digital- och datorteknik

Ext-13 (Ver ) Exempel på RTN-beskrivning av FLEX-instruktioner

Maskinorienterad Programmering 2011/2012. CPU12 Reference Guide Stencil: Assemblerprogrammering.pdf

Elektroteknik MF1016 föreläsning 9 MF1017 föreläsning 7 Mikrodatorteknik

Assemblerprogrammering

Konstruera en dator mha grindar och programmera denna Använda en modern microcontroller

Grundläggande datavetenskap, 4p

VELKOMMEN!!!! SYFTE o MÅL. till DAT015 / DIT151 Maskinorienterad Programmering. Kurslitteratur. önskar Jan o Rolf. Lektioner LP2 Vanlig vecka

Digital- och datorteknik

SVAR TILL TENTAMEN I DATORSYSTEM, VT2013

Transkript:

Maskinorienterad Programmering 0/0 Ur innehållet: Synkronisering: hur hanteras situationer när datorn ska kommunicera med en annan enhet med okänd arbetstakt? Vi ansluter en skrivare Undantag: Hur hanteras situationer då något oförutsett inträffar? Vi beskriver undantagshantering Vår skrivare är från början mycket enkel: Förutsättningar för skrivaranslutningen Den kan endast arbeta med ett tecken i taget. (hämtar ett tecken - skriv ut - hämta nästa) Det finns inledningsvis inga handskakningssignaler Max utskriftshastighet: 4 tecken per sekund. Med portdefinition PRITER EQU $0800 och instruktionerna LDAA #$0 STAA PRITER överförs hexadecimala värdet 0 till skrivaren Det lilla fönstret visar innehållet i dataregistret tolkat som ASCII. skrivarportens dataregister pappersyta, här visas utskriften Första programexemplet * Printer V_0 ORG $000 LDX #Text Pekare till textsträng -> X Loop LDAA,X+ Tecken -> A, peka på nästa STAA PRITER 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 000: ORG $000 Text FCS Hej Du Kalle! Text ($000) H e j D u K a l l e! Inför specialtecken för strängslut Text ($000) H e j D u K a l l e! EOT PrinterV_ Init Läs nästa tecken Tecken= EOT? Överför Data till n * Printer V_ PRITER EQU $0800 EOT EQU 4 ORG $000 LDX #Text Loop: LDAA,X+ CMPA #EOT BEQ Stop STAA PRITER BRA Loop Stop: OP BRA Stop ORG $000 Text: FCS "Hej Du Kalle!" FCB EOT Stop 4

Synkronisera arbetstakterna Villkorlig överföring Instruktioner/ sekund Tecken/ sekund Simulator STEP Simulator RU Simulator RU FAST Hårdvara? 0 000 000 000 4? 00 00 000 Mottagaren Redo? Mottagaren Redo? Statustest, kräver asynkront gränssnitt Lösningen blir villkorlig överföring vilket kräver ett asynkront gränssnitt Sänd Data till mottagaren Sänd Data till mottagaren Busy Wait Polling 5 6 Gränssnitt, version datorsystem Skrivarbuss = (Hög nivå) indikerar att skrivaren är klar att ta emot ett nytt tecken. = 0 (Låg nivå) indikerar att skrivaren är upptagen med att skriva ut ett tecken. Bit 7 Statusregister 0 PrinterV_0 Init Läs nästa tecken Tecken= EOT? Läs Status =? Överför Data till n PrinterV_0 Programmerarens bild = (Hög nivå): skrivaren är REDO = 0 (Låg nivå): skrivaren är UPPTAGE Bit 7 Statusregister 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 0 * Printer V_ PRITER EQU $0800 PSTATUS EQU $080 EOT EQU 4 ORG $000 LDX #Text Loop: LDAA,X+ CMPA #EOT BEQ Exit LoopForReady: LDAB PSTATUS ADB #4 BEQ LoopForReady STAA PRITER LoopForotReady: LDAB PSTATUS ADB #4 BE LoopForReady Exit: BRA OP BRA Loop Exit ORG $000 Text: FCS "Hej Du Kalle!" FCB EOT 7 8

Gränssnitt, version Skrivarbuss = (Hög nivå) indikerar för skrivaren att giltigt tecken finns att hämta på skrivarbussen. = 0 (Låg nivå) indikerar för skrivaren att skrivarbussen har ett ogiltigt värde. Bit 7 Styrregister 0 Händelser i et Inväntar = är = skrivs nästa tecken till skrivarens dataregister. Sätter = Inväntar =0 är =0 nollställs som indikation på att det inte finns giltigt tecken på skrivarbussen Händelser i skrivaren n är upptagen med att skriva ut ett tecken. =0. n är redo för nästa tecken och sätter = Inväntar = Ser att =. Läser nytt tecken från skrivarbussen. Signalerar upptagen, =0. n är upptagen med att skriva ut ett tecken. =0. * Printer V PRITER EQU $0800 PSTATUS EQU $080 PCOTROL EQU $080 EOT EQU 4 ORG $000 LDX #Text Loop: LDAA,X+ CMPA #EOT BEQ Stop Ready: BRCLR PSTATUS,#4,Ready STAA PRITER BSET PCOTROL,# otready: BRSET PSTATUS,#4, otready BCLR PCOTROL,# BRA Loop Stop: OP BRA Stop ORG $000 Text: FCS "Hej Du Kalle!" FCB EOT 9 0 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" Processorn väntar på skall gå hög Introduktion till Undantagshantering Avbrottssignal Skrivarbuss Huvudprogram Avbrottsrutin som skriver ut ett tecken Interrupt ReQuest (), begäran om avbrott s Skrivar buss Avbrottsrutinen utförs och ett tecken skickas till skrivaren Processorn utför annat viktigt arbete 00 ms s μs 50 ms μs

Avbrottshantering Skrivarport Version 5, med avbrott Huvudprogram Avbrott 5 6 Avbrottsrutin Betjäna avbrottet 4 RTI ) Huvudprogram exekveras när ett avbrott aktiveras ) Hopp till avbrottsrutin ) Avbrottsrutin startar 4) Avbrottsrutin avslutas med en speciell instruktion, return from interrupt (RTI) 5) Återhopp till huvudprogram 6) Huvudprogrammet fortsätter. Minne Skrivarbuss Adress avkodning Skrivar buss "" D C R Q Q FFF FFF Avbrottsrutinens adress avbrottsvektor A A 0 R/W Denna lösning genererar ALLTID avbrott då skrivarens teckenbuffert är tom. 4 Skrivarport, Version 6 Avbrottsvippa I vår sista lösning kan vi stänga av avbrotten från skrivaren. Disable Interrupt Aktivera avbrott Tryckknapp Puls vid nedtryckning av tryckknapp "" D C R Q Q Processor A 5 A 4 A A A A 0 R/W Write address Deaktiverar avbrottsignalen Puls då processorn skriver 5 6

Kvittering av avbrott Interrupt Acknowledge EXEMPEL, Arbetsbok uppgift 45 ( Irq4.s ) ; Definitioner, initieringssekvens ; och avbrottsvektor PARPORT EQU $0880 PARPORT EQU $088 EXEMPEL: ( jfr: laborationskort ML9) Aktivera avbrott IrqStat EQU $0D00 IrqRes EQU $0D0 IrqRes EQU $0D0 ORG $000 * ollställ våra variabler CLR Var CLR Var CLR IrqRes CLR IrqRes * Sätt om avbrottsmasken hos processorn CLI * Initiera avbrottsvektor ORG $FFF FDB IrqR ; Huvudprogram Loop LDAB Var ADDB # STAB Var STAB PARPORT * Variabler LDAB STAB BRA Var RMB Var RMB Var PARPORT Loop Deaktivera ( kvittera ) avbrott Status hos avbrottskällor 7 8 uppgift 45, forts. Exekveringstillstånd Processorn befinner sig alltid i något av tillstånden: EXEMPEL PÅ UDATAGSTYPER * Avbrottsrutin IrqR: LDAA IrqStat BITA # ; Event? BEQ IrqR ; Om inte prova nästa CLR IrqRes IC Var ; Räkna upp IrqR: * Kontrollera även Event... BITA # BEQ IrqR CLR IrqRes CLR Var ; ollställ IrqR: RTI IrqStat EQU $0D00 IrqRes EQU $0D0 IrqRes EQU $0D0 ORMAL, processorn hämtar och utför instruktioner, dvs. normal exekvering. EXCEPTIO, något undantag har inträffat som gör att processorn inte kan (eller ska) fortsätta normal exekvering. ORMAL EXCEPTIO ORMAL EXCEPTIO 9 0

Starta undantagshantering Spara registerinnehåll Atomär operation PUSH PC PUSH Y PUSH X PUSH D PUSH CCR minskande adress ökande adress SP Stackens utseende i avbrottsrutin CCR ACCB ACCA X H X L Y H Y L PC H PC L Avslut av undantagshantering ReTurn from Interrupt, RTI Atomär operation PULL CCR PULL D PULL X PULL Y PULL PC Innehåll i processorns register CCR vid avbrottet Innehåll i processorns register (Y,X och D) vid avbrottet Innehåll i processorns programräknare vid avbrottet, dvs adressen till instruktion som ska utföras efter avbrottet Undantagstyper POR MPU COP CMO EXCEPTIO AVBROTT IOF ITP X ITERA MPU, händelser som alltid föranleder återstart () av processorn. AVBROTT, externa händelser, dvs. utanför processorn, detta kan alltså vara enheter på samma krets som processorn (sammanbyggda periferienheter), det kan också vara en speciell insignal ( eller X) som aktiveras. ITERA, händelser som uppträder under programexekvering, exempelvis att en otillåten instruktion avkodas (IOF) eller den speciella instruktionen. CPU X Fatala fel, kräver av CPU POR, Power On Reset, vid spänningstillslag, insignal till processorn aktiveras. COP, Computer Operating Properly, så kallad watchdog-funktion. CMO, Clock Monitor Reset, övervakar E-klockan, om frekvensen sjunker under 0 khz genereras. Adress (hex) FFFE FFFC FFFA FFF8 FFF6 FFF4 FFF FF00-FFF0 POR CPU COP CMO Funktion, Startvektor Clock Monitor Fail COP Watchdog Timeout Illegal Op Code X Enhetsspecifika vektorer, skiljer sig något beroende på olika varianter Interna undantag Om processorn avkodar en otillåten operationskod kallas detta Illegal Opcode Fetch (IOF). Processorn avbryter då, sparar registerinnehåll på stacken, Läser vektorn för IOF och utför undantagshantering. Instruktionen SoftWare Interrupt () fungerar på samma sätt, men har en annan vektor och en bestämd operationskod. Adress (hex) FFFE FFFC FFFA FFF8 FFF6 FFF4 FFF FF00-FFF0 IOF ITERA Funktion, Startvektor Clock Monitor Fail COP Watchdog Timeout Illegal Op Code X Enhetsspecifika vektorer, skiljer sig något beroende på olika varianter 4

EXEMPEL, Hantera Software Interrupt, Internt genererade avbrott AVBROTT ORG $000 main LDAB #$ LDAA #$ LDX #$ LDY #$4444 OP OP BRA main _hantering: CLRA OP RTI ORG FDB $FFF6 _hantering Adress (hex) Funktion FFFE, Startvektor FFFC Clock Monitor Fail FFFA COP Watchdog Timeout FFF8 Illegal Op Code FFF6 FFF4 X FFF FF00-FFF0 Enhetsspecifika vektorer, skiljer sig något beroende på olika varianter ITP X Adress (hex) Funktion FFF0 Real Time Interrupt FFEE Enhanced Capture Timer channel FFEC Enhanced Capture Timer channel FFEA Enhanced Capture Timer channel...... FF8E Port P Interrupt FF8C PWM Emergency Shutdown FF8A- Reserverade FF80 5 6 Externt genererade avbrott CPU X X CCR = 0000 REGISTERS->[SP] REGISTERS->[SP] PC=[FFFE,FFFF] CCR[I]= CCR[I]= PC=[FFF4,FFF5] PC=[FFF,FFF] AVBROTT ITP X Adress (hex) FFFE FFFC FFFA FFF8 FFF6 FFF4 FFF FF00-FFF0 Funktion, Startvektor Clock Monitor Fail COP Watchdog Timeout Illegal Op Code X Enhetsspecifika vektorer, skiljer sig något beroende på olika varianter Maskering av avbrott Maskera avbrott: SEI Alternativt ORCC #%0000000 Demaskera avbrott: CLI Alternativt ADCC #%0 Demaskera X-avbrott: ADCC #%0 OBS: Kan ITE maskeras ( on Maskable Interrupt ) 7 8

Undantags prioriteter Multipla avbrottskällor. MPU och ITERA, (alltid). X, (om X i CCR är 0)., (om I i CCR är noll) EXCEPTIO CPU X Källa Källa Källa & CPU Avbrottsingång aktiv låg Avbrottshanterare A från "? A från "? Betjäna avbrott " Betjäna avbrott " MPU ITERA POR COP CMO AVBROTT IOF Avbrottskällornas inbördes prioritet bestäms i avbrottshanteraren. Betjäna avbrott " ITP X RTI 9 0 Hårdvarubaserad avbrottsprioritering För avbrott från interna kretsar bestäms prioriteten av avbrottsvektorns adress. u högre adress, desto högre prioritet. Högre prioritet Lägre prioritet Adress (hex) Funktion FFF0 Real Time Interrupt FFEE Enhanced Capture Timer channel FFEC Enhanced Capture Timer channel FFEA Enhanced Capture Timer channel FFE8 Enhanced Capture Timer channel FFE6 Enhanced Capture Timer channel 4 FFE4 Enhanced Capture Timer channel 5 FFE Enhanced Capture Timer channel 6 FFE0 Enhanced Capture Timer channel 7 FFDE Enhanced Capture Timer overflow FFDC Pulse accumulator A overflow FFDA Pulse accumulator input edge FFD8 SPI0 FFD6 SCI0 FFD4 SCI FFD ATD0 FFD0 ATD FFCE Port FFCC Port H FFCA Modulus Down Counter underflow FFC8 Pulse Accumulator B Overflow FFC6 PLL lock FFC4 CRG Self Clock Mode FFC Används ej (BDLC) FFC0 IIC Bus FFBE SPI FFBC Reserverad FFBA EEPROM I-Bit FFB8 FLASH I-Bit FFB6 CA0 wake-up FFB4 CA0 errors FFB CA0 receive FFB0 CA0 transmit FF96 CA4 wake-up FF94 CA4 errors FF9 CA4 receive FF90 CA4 transmit FF8E Port P Interrupt FF8C PWM Emergency Shutdown FF8A- Reserverade FF80 Vektoravbrott Processor 7 PC ITA 4 5 Databuss Adressbuss ITA Somliga periferikretsar konstrueras för att tillhandahålla avbrottsvektor (kan ej anslutas till HCS) Yttre enhet Vektor Reg Vektor q Minne Adress (Vektor q) avbrottsrutin p avbrottsrutin q avbrottsrutin r 6

Prioritet vid vektoravbrott (Daisy chain) ITA In S YE Out Vektor nr In Databuss S YE Out Vektor nr In S YE Out Vektor nr Vektor nr 0 (Adress i) Vektor nr (Adress i+p) Vektor nr max (Adress i+max) avbrottsrutin 0 avbrottsrutin avbrottsrutin max EXEMPEL, ColdFire (MC68x00) Adress Vektor (offset) nr (hex) Funktion 0 000 Initial stackpekare 004 Initial programräknare vektor 008 Access Error (ex: referens till adress där minne/periferikrets ej finns) 00C Adress Error (ex: referens till udda adress med word operand) 4 00 Illegal instruktion (icke-definierad operationskod) 5 04 Division med 0 6,7 08, 0C Reserverade 8 00 Privilege Violation, försök att utföra supervisor-instruktion i user mode 9 04 Trace, en-instruktions exekvering 0 08 Line 00, reserverad operationskod 0C Line, reserverad operationskod 00 on-pc breakpoint debug interrupt 04 PC breakpoint debug interrupt 4 08 Format error 5 0C Avbrott från enhet som ej tillhandahållit avbrottsnummer 6-040-05F Reserverade vektorer 4 060 Icke-identifierat avbrott 5 064 Autovektor avbrottsnivå 6 068 Autovektor avbrottsnivå 7 06C Autovektor avbrottsnivå 8 070 Autovektor avbrottsnivå 4 Autovektor 9 074 Autovektor avbrottsnivå 5 avbrott 0 078 Autovektor avbrottsnivå 6 07C Autovektor avbrottsnivå 7-47 080-0BF Trap vektor för instruktionen TRAP #<vektor_nummer> 48-6 0C0-0FF Undantag vid flyttalshantering, Reserverade vektorer 64-55 00-FF Användardefinierade vektorer Vektoravbrott Undantag genererade av program 4