Programmering av inbyggda system



Relevanta dokument
Förutsättningar för skrivaranslutningen

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

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. Inför specialtecken för strängslut

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

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

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

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

Laborationsmoment 2 - En Borrautomat

Digital- och datorteknik

Laborationsmoment 2 - En Borrautomat

Programmering av inbyggda system

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

F8: Undantagshantering

Assemblerprogrammering del 3

Föreläsningsanteckningar 3. Mikroprogrammering II

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

Avbrottshantering. Övningsuppgifter

Digital- och datorteknik

EDA Digital och Datorteknik

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

Extrauppgifter för CPU12

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

Datorsystemteknik Föreläsning 7DAVA14

Programmering av inbyggda system 2013/2014

Laborationsmoment t 2 - En Borrautomat

Maskinorienterad programmering

Beskrivning av porthantering i mikroprocessorn SAM3U som används på vårt labkort SAM3U- EK.

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å

Laborationsmoment t 2 - En Borrautomat

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

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

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

Maskinorienterad programmering

3. Mikroprogrammering II

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

Assemblerprogrammering

Maskinorienterad programmering

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

Polling (cyklisk avfrågning) Avbrott

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

Maskinorienterad programmering

Digital- och datorteknik

Digital- och datorteknik

Maskinorienterad programmering

Svar till Övning3 Datorteknik, HH vt12 Avbrott och timers

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

Programexempel för FLEX

Maskinorienterad programmering

Tentamen med lösningsförslag

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

Övningsuppgifter i Mikrodatorteknik 4p/5p

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

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

A-del motsvarande KS1

Tentamen. Datorteknik Y, TSEA28

TENTAMEN (med svar och vissa lösningar)

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

Tentamen med lösningsförslag

Institutionen för elektro- och informationsteknologi, LTH

Reducerad INSTRUKTIONSLISTA för FLIS-processorn

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

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

Exempel på tentamen 1

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

Lösningar till tentamen i EIT070 Datorteknik

SVAR TILL TENTAMEN I DATORSYSTEM, VT2013

Digital- och datorteknik

Föreläsningsanteckningar 2. Mikroprogrammering I

EDA215 Digital- och datorteknik för Z

Digital- och datorteknik

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

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

Datakommunikation med IR-ljus.

System S. Datorarkitektur - en inledning. Organisation av datorsystem: olika abstraktionsnivåer. den mest abstrakta synen på systemet

Digital- och datorteknik. Mekatronik-, data- och elektroingenjör Åk 1/ lp 1o2. Lars-Eric Arebrink. Av institutionen utgiven. vid flera tillfällen

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

Datorsystem Laboration 2: Minnesmappade bussar

Övning1 Datorteknik, HH vt12 - Talsystem, logik, minne, instruktioner, assembler

Tentamen Datorteknik D del 2, TSEA49

Övningsuppgifterna i kapitel F avser FLIS-processorn, vars instruktioner och motsvarande koder definieras i INSTRUKTIONSLISTA FÖR FLISP.

Lösningsförslag till Tenta i Mikrodator

Programmering av inbyggda system 2014/2015

Digital- och datorteknik

Tentamen i EIT070 Datorteknik

Tentamen med lösningsförslag

I DAG Fo 4. Programutveckling i assemblerspråk. Programutveckling i assembler. PROGRAMSTRUKTUR Modul Subrutiner USE-direktivet

Tentamen. EDA432 Digital- och datorteknik, IT DIT790 Digital- och datorteknik, GU. Måndag 18 Oktober 2010, kl

Mål. Datorteknik. Repetition av avbrott. Innehåll. Mätning och styrning. Datorer för mätning och styrning. timer. Datorsystem A/D. Analog insignal D/A

Tentamen. DAT015 Maskinorienterad programmering IT DIT151 Maskinorienterad programmering GU. Tisdag 15 december 2009, kl

7) Beskriv tre sätt att överföra parametrar mellan huvudprogram och subrutin.

Tentamen med lösningsförslag

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

In- och Utenheter. Fö 3: In/Ut matning och kopplingsstruktur. Några exempel. Egenskaper. In- och Utenheter. Styrning.

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

Övning 7. Timer, serieport

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

Digital- och datorteknik

Transkript:

Programmering av inbyggda system Synkronisering och undantag 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 1

Förutsättningar för skrivaranslutningen Vår skrivare är från början mycket enkel: 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 PRINTER EQU $0800 och instruktionerna LDAA #$30 STAA PRINTER överförs hexadecimala värdet 30 till skrivaren Det lilla fönstret visar innehållet i dataregistret tolkat som ASCII. skrivarportens dataregister pappersyta, här visas utskriften 2

Första programexemplet * Printer V1_0 ORG $1000 LDX #Text ; Pekare till textsträng -> X Loop LDAB 1,X+ ; Tecken -> B, peka på nästa BEQ Exit STAB $800 ; Skriv ut till port BRA Loop ; Fortsätt med nästa tecken Exit: NOP BRA Exit ORG $3000 Text FCS Hej Du Kalle! FCB 0 Text ($3000) H e j D u K a l l e! 3

Synkronisera arbetstakterna Instruktioner/ sekund Tecken/ sekund Skrivare Simulator STEP Simulator RUN Simulator RUN FAST Hårdvara? 10 1000 1 000 000 4? 2 200 200 000 Lösningen blir villkorlig överföring vilket kräver någon form av så kallade handskakningssignaler. 4

Villkorlig överföring Mottagaren Redo? N Mottagaren Redo? N Statustest, kräver asynkront gränssnitt J J Sänd Data till mottagaren Sänd Data till mottagaren Busy Wait Polling 5

Gränssnitt, version 2 PrinterV2_0 READY datorsystem Skrivarbuss Skrivare READY = 1 (Hög nivå) indikerar att skrivaren är klar att ta emot ett nytt tecken. Init Läs nästa tecken READY = 0 (Låg nivå) indikerar att skrivaren är upptagen med att skriva ut ett tecken. J Tecken= EOT? N Läs Status Bit 7 Statusregister 2 READY 1 0 READY=1? J Överför Data till Skrivaren N PrinterV2_0 6

Programmerarens bild READY = 1 (Hög nivå): skrivaren är REDO READY = 0 (Låg nivå): skrivaren är UPPTAGEN Bit 7 Statusregister READY 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 2 1 0 * Printer V2_1 PRINTER EQU $0800 PSTATUS EQU $0801 EOT EQU 4 ORG $1000 LDX #Text Loop: LDAA 1,X+ CMPA #0 BEQ Exit LoopForReady: LDAB PSTATUS ANDB #4 BEQ LoopForReady STAA PRINTER LoopForNotReady: LDAB PSTATUS ANDB #4 BNE LoopForNotReady Exit: BRA NOP BRA Loop Exit ORG $3000 Text: FCS "Hej Du Kalle!" FCB 0 7

Speciella instruktioner... Branch if bit(s) is clear... test: LDAB $0801 ; läs status ANDB #4 ; testa bit 2 BEQ test ; om 0, fortsätt... test:... BRCLR... $801,#4,test... PSHB LDAB $0802 ORAB #2 STAB $802 PULB..... Set bit(s) in memory BSET $0802,#2 ; ettställ bit 1... 8

Gränssnitt, version 3 READY Datorsystem DAV Skrivarbuss Skrivare 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. Bit 7 1 DAV 0 Styrregister 9

Händelser i Datorsystemet Inväntar READY=1 När READY=1 skrivs nästa tecken till skrivarens dataregister. Sätter DAV=1 Inväntar READY=0 När READY=0 nollställs DAV som indikation på att det inte finns giltigt tecken på skrivarbussen Händelser i skrivaren Skrivaren är upptagen med att skriva ut ett tecken. READY=0. Skrivaren är redo för nästa tecken och sätter READY=1 Inväntar DAV=1 Ser att DAV=1. Läser nytt tecken från skrivarbussen. Signalerar upptagen, READY=0. Skrivaren är upptagen med att skriva ut ett tecken. READY=0. * Printer V3 PRINTER EQU $0800 PSTATUS EQU $0801 PCONTROL EQU $0802 ORG $1000 LDX #Text Loop: LDAA 1,X+ CMPA #0 BEQ Exit Ready: BRCLR PSTATUS,#4,Ready STAA PRINTER BSET PCONTROL,#2 NotReady: BRSET PSTATUS,#4,NotReady BCLR PCONTROL,#2 BRA Loop Exit: NOP BRA Stop ORG $3000 Text: FCS "Hej Du Kalle!" FCB 0 10

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 250 ms μs 11

Introduktion till Undantagshantering READY Interrupt ReQuest (IRQ), begäran om avbrott Datorsystem Datorsystem DAV Skrivarbuss Skrivare IRQ READY DAV Skrivare Skrivar buss Huvudprogram Avbrottssignal IRQ Avbrottsrutinen utförs och ett tecken skickas till skrivaren IRQ Avbrottsrutin som skriver ut ett tecken s Processorn utför annat viktigt arbete 100 ms s 12

Avbrottshantering Huvudprogram 1 Avbrott 2 5 6 Avbrottsrutin 3 Betjäna avbrottet 4 RTI 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. Minne FFF2 FFF3 Avbrottsrutinens adress avbrottsvektor 13

Skrivarport Version 5, med avbrott Datorsystem Datorsystem READY DAV Skrivarbuss Skrivare IRQ DAV READY Skrivare Skrivar buss IRQ "1" 1D Q R C1 Q Adress avkodning READY A 1 A 0 R/W Denna lösning genererar ALLTID avbrott då skrivarens teckenbuffert är tom. 14

Skrivarport, Version 6 I den sista versionen kan vi stänga av avbrotten från skrivaren. Disable Interrupt Lämnas som självverksamhet... 15

Avbrottsvippa Aktivera avbrott Deaktiverar avbrottsignalen 16

Kvittering av avbrott Interrupt Acknowledge EXEMPEL: ( jfr: laborationskort ML19) Aktivera avbrott Deaktivera ( kvittera ) avbrott Status hos avbrottskällor 17

EXEMPEL, Arbetsbok uppgift 67 ( Irq3.s12 ) ; Definitioner, initieringssekvens ; och avbrottsvektor Port1 EQU $0400 Port2 EQU $0401 IrqStat EQU $0D00 IrqRes1 EQU $0D02 IrqRes2 EQU $0D03 ORG $1000 ; Nollställ våra variabler CLR Var1 CLR Var2 CLR IrqRes1 CLR IrqRes2 ; Initiera avbrottsvektor IRQ LDX #IrgR STX $3FF2 ; Huvudprogram main_loop INC MOVB MOVB BRA ; Variabler Var1 RMB 1 Var2 RMB 1 Var1 Var1,Port1 Var2,Port2 main_loop ; Sätt om avbrottsmasken hos processorn CLI 18

uppgift 67, forts. * Avbrottsrutin IrqR: LDAA IrqStat BITA #2 ; Event 2? BEQ IrqR1 ; Om inte prova nästa CLR IrqRes2 INC Var2 ; Räkna upp IrqStat EQU $0D00 IrqRes1 EQU $0D02 IrqRes2 EQU $0D03 IrqR1: * Kontrollera även Event 1... BITA #1 BEQ IrqR2 CLR IrqRes1 CLR Var2 ; Nollställ IrqR2: RTI 19

Exekveringstillstånd Processorn befinner sig alltid i något av tillstånden: NORMAL, processorn hämtar och utför instruktioner, dvs. normal exekvering. EXCEPTION, något undantag har inträffat som gör att processorn inte kan (eller ska) fortsätta normal exekvering. EXEMPEL PÅ UNDANTAGSTYPER NORMAL EXCEPTION NORMAL EXCEPTION 20

Starta undantagshantering Spara registerinnehåll Atomär operation PUSH PC PUSH Y PUSH X PUSH D PUSH CCR minskande adress SP Programmering av inbyggda system Stackens utseende i avbrottsrutin CCR ACCB ACCA X H X L Avslut av undantagshantering ReTurn from Interrupt, RTI Atomär operation PULL PULL PULL PULL PULL CCR D X Y PC Innehåll i processorns register CCR vid avbrottet Innehåll i processorns register (Y,X och D) vid avbrottet ökande adress Y H Y L PC H PC L Innehåll i processorns programräknare vid avbrottet, dvs adressen till instruktion som ska utföras efter avbrottet 21

Undantagstyper EXCEPTION CPU12 RESET IRQ XIRQ RESET MPU INTERNA AVBROTT IOF SWI POR RESET COP CMON INTP IRQ XIRQ RESET MPU, händelser som alltid föranleder återstart (RESET) 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 (IRQ eller XIRQ) som aktiveras. INTERNA, händelser som uppträder under programexekvering, exempelvis att en otillåten instruktion avkodas (IOF) eller den speciella instruktionen SWI. 22

Fatala fel, kräver RESET av CPU POR, Power On Reset, vid spänningstillslag RESET, insignal till processorn aktiveras. COP, Computer Operating Properly, så kallad watchdog-funktion. CMON, Clock Monitor Reset, övervakar E-klockan, om frekvensen sjunker under 10 khz genereras RESET. POR RESET CPU RESET COP CMON Adress (hex) FFFE FFFC FFFA FFF8 FFF6 FFF4 FFF2 FF00-FFF0 Funktion RESET, Startvektor Clock Monitor Fail COP Watchdog Timeout Illegal Op Code SWI XIRQ IRQ Enhetsspecifika vektorer, skiljer sig något beroende på olika varianter 23

Interna undantag INTERNA 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 (SWI) fungerar på samma sätt, men har en annan vektor och en bestämd operationskod. Adress (hex) FFFE FFFC FFFA FFF8 FFF6 FFF4 FFF2 FF00-FFF0 IOF SWI Funktion RESET, Startvektor Clock Monitor Fail COP Watchdog Timeout Illegal Op Code SWI XIRQ IRQ Enhetsspecifika vektorer, skiljer sig något beroende på olika varianter 24

EXEMPEL, Hantera Software Interrupt, SWI ORG $1000 main LDAB #$11 LDAA #$22 LDX #$3333 LDY #$4444 NOP SWI NOP BRA main SWI_hantering: CLRA NOP RTI ORG FDB Adress (hex) FFFE FFFC FFFA FFF8 FFF6 FFF4 FFF2 FF00-FFF0 $3FF6 SWI_hantering Funktion RESET, Startvektor Clock Monitor Fail COP Watchdog Timeout Illegal Op Code SWI XIRQ IRQ Enhetsspecifika vektorer, skiljer sig något beroende på olika varianter 25

Internt genererade avbrott AVBROTT Programmering av inbyggda system INTP IRQ XIRQ Adress (hex) Funktion FFF0 Real Time Interrupt FFEE Enhanced Capture Timer channel FFEC Enhanced Capture Timer channel 1 FFEA Enhanced Capture Timer channel 2...... FF8E Port P Interrupt FF8C PWM Emergency Shutdown FF8A- Reserverade FF80 26

Externt genererade avbrott AVBROTT CPU12 RESET IRQ XIRQ RESET XIRQ IRQ CCR = 1101000 REGISTERS->[SP] REGISTERS->[SP] PC=[FFFE,FFFF] CCR[I]=1 CCR[I]=1 PC=[FFF4,FFF5] PC=[FFF2,FFF3] INTP IRQ XIRQ Adress (hex) FFFE FFFC FFFA FFF8 FFF6 FFF4 FFF2 FF00-FFF0 Funktion RESET, Startvektor Clock Monitor Fail COP Watchdog Timeout Illegal Op Code SWI XIRQ IRQ Enhetsspecifika vektorer, skiljer sig något beroende på olika varianter 27

Maskering av avbrott Maskera avbrott: SEI Alternativt ORCC #%00010000 Demaskera avbrott: CLI Alternativt ANDCC #%11101111 Demaskera X-avbrott: ANDCC #%10111111 OBS: Kan INTE maskeras ( Non Maskable Interrupt ) 28

Undantags prioriteter 1. RESET MPU och INTERNA, (alltid) 2. XIRQ, (om X i CCR är 0) 3. IRQ, (om I i CCR är noll) CPU12 RESET IRQ XIRQ EXCEPTION RESET MPU INTERNA POR RESET COP CMON AVBROTT IOF SWI INTP IRQ XIRQ 29

Multipla avbrottskällor Källa 1 Källa 2 Källa 3 CPU12 Avbrottshanterare IRQ 1 IRQ 2 IRQ 3 & IRQ Avbrottsingång aktiv låg IRQ från 1"? IRQ från 2"? JA JA Betjäna avbrott 1" Betjäna avbrott 2" Avbrottskällornas inbördes prioritet bestäms i avbrottshanteraren. Betjäna avbrott 3" RTI 30

Hårdvarubaserad avbrottsprioritering För avbrott från interna kretsar bestäms prioriteten av avbrottsvektorns adress. Ju 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 1 FFEA Enhanced Capture Timer channel 2 FFE8 Enhanced Capture Timer channel 3 FFE6 Enhanced Capture Timer channel 4 FFE4 Enhanced Capture Timer channel 5 FFE2 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 SCI1 FFD2 ATD0 FFD0 ATD1 FFCE Port J FFCC Port H FFCA Modulus Down Counter underflow FFC8 Pulse Accumulator B Overflow FFC6 PLL lock FFC4 CRG Self Clock Mode FFC2 Används ej (BDLC) FFC0 IIC Bus FFBE SPI1 FFBC Reserverad FFBA EEPROM I-Bit FFB8 FLASH I-Bit FFB6 CAN0 wake-up FFB4 CAN0 errors FFB2 CAN0 receive FFB0 CAN0 transmit FF96 CAN4 wake-up FF94 CAN4 errors FF92 CAN4 receive FF90 CAN4 transmit FF8E Port P Interrupt FF8C PWM Emergency Shutdown FF8A- Reserverade FF80 31

Skelett, undantagshantering i HCS12-system... ; Avbrottshanterare irq: RTI xirq: RTI ORG $FFF2 FDB irq (FFF2) FDB xirq (FFF4) FDB software_interrupt (FFF6) FDB illegal_opcode (FFF8) FDB cop (FFFA) FDB clock_monitor_fail (FFFC) FDB startup (FFFE) software_interrupt: RTI illegal_opcode: RTI cop: RTI clock_monitor_fail: RTI ; Systemprogram startup: LDS...... CLI JSR BRA #TopOfStack _main startup 32