TSEA28 Datorteknik Y (och U)

Relevanta dokument
TSEA28 Datorteknik Y (och U)

TSEA28 Datorteknik Y (och U)

TSEA28 Datorteknik Y (och U)

Tentamen. Datorteknik Y, TSEA28

Tentamen. Datorteknik Y, TSEA28

Tentamen. Datorteknik Y, TSEA28

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

3. Mikroprogrammering II

Tentamen. Datorteknik Y, TSEA28

Laboration Datorteknik TSIU02 2. I/O-programmering

F8: Undantagshantering

Datorsystemteknik Föreläsning 7DAVA14

Polling (cyklisk avfrågning) Avbrott

Tentamen Datorteknik Y, TSEA28 Datum

Tentamen. Datorteknik Y, TSEA28

Föreläsningsanteckningar 3. Mikroprogrammering II

Tentamen. Datorteknik Y, TSEA28

TSEA28 Datorteknik Y (och U)

TSEA28 Datorteknik Y (och U)

Tentamen. Datorteknik Y, TSEA28

Digital- och datorteknik

Tentamen. Datorteknik Y, TSEA28

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

TSEA28 Datorteknik Y (och U)

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

Institutionen för elektro- och informationsteknologi, LTH

TSEA28 Datorteknik Y (och U)

TSEA28 Datorteknik Y (och U)

Laboration Datorteknik D 1. IR-länk

Övning2 Datorteknik, HH vt12 - Programmering

Datorteknik 2 (AVR 2)

Tentamen Datorteknik Y, TSEA28 Datum TER2, TER4, TERE Tid 14-18

Övningsuppgifter i Mikrodatorteknik 4p/5p

TSEA28 Datorteknik Y (och U)

Lösningar till tentamen i EIT070 Datorteknik

TSEA28 Datorteknik Y (och U)

Tentamen. Datorteknik Y, TSEA28

TSEA28 Datorteknik Y (och U)

Tentamen Datorteknik Y, TSEA28 Datum

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

LABORATION DATORTEKNIK Y DATORTEKNIK D

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

Tentamen (Exempel) Datorteknik Y, TSEA28

Tentamen Datorteknik D del 2, TSEA49

Tentamen (Exempel) Datorteknik Y, TSEA28

Tentamen den 18 mars svar Datorteknik, EIT070

LEU240 Mikrodatorsystem

Datakommunikation med IR-ljus.

Datorsystem Laboration 2: Minnesmappade bussar

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

LABORATION. Datorteknik Y

Institutionen för elektro- och informationsteknologi, LTH

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

Laboration Datorteknik D 3. Digitalur

Svar till Övning3 Datorteknik, HH vt12 Avbrott och timers

Laboration 2 i Datorteknik- Assemblerprogrammering II

Tentamen. TSEA22 Digitalteknik 5 juni, 2015, kl

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

Föreläsning 2. Operativsystem och programmering

F4: Assemblerprogrammering

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

Programexempel för FLEX

Tentamen (Exempel) Datorteknik Y, TSEA28

Digital- och datorteknik

TSEA28 Datorteknik Y (och U)

Digital- och datorteknik

AVR 3 - datorteknik. Avbrott. Digitala system 15 hp. Förberedelser

TSEA28 Datorteknik Y (och U)

Lösningar till tentamen i EIT070 Datorteknik

TSEA28 Datorteknik Y (och U)

Assemblerprogrammering del 3

Lösningsförslag till Tenta i Mikrodator

Maskinorienterad programmering

TSEA28 Datorteknik Y (och U)

Avbrottshantering. Övningsuppgifter

Exempeltentamen Datorteknik, EIT070,

IS1500 Lösningar övning CE_O CE_O7. Programmerad in/utmatning. Serieport. Förberedelser till nios2io.

GPIO - General Purpose Input Output

Tentamen (Exempel) Datorteknik Y, TSEA28

CPU. Carry/Borrow IX. Programräknare

Digital- och datorteknik

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

Digital- och datorteknik

Laboration Datorteknik TSIU02/TSEA28 3. Digitalur

General Purpose registers ALU I T H S V N Z C SREG. Antag att vi behöver skriva in talet 25 till register R18

Tentamen den 14 januari 2015 Datorarkitekturer med operativsystem, EDT621, 7,5 poäng

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

En Von Neumann-arkitektur ( Von Neumann-principen i föreläsning 1) innebär:

CE_O3. Nios II. Inför lab nios2time

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

Lösningsförslag till Tenta i Mikrodator

Ansvarig lärare: Olof Andersson, Telefon (besöker skrivsalen)

Digital- och datorteknik

Laboration 5 TSEA57 Datorteknik I

F5: Högnivåprogrammering

TSEA28 Datorteknik Y (och U)

F5: Högnivåprogrammering

Generell säkerhet. Loggning - Hur mycket ska man logga? Inloggningsrutinerna i Unix. Loggning fortsättning

LABORATION. Datorteknik Y

Transkript:

TSEA28 Datorteknik Y (och U) Föreläsning 6 Kent Palmkvist, ISY TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2017-01-30 2 Dagens föreläsning Avbrot Princip Avbrot på 68000 Exempel Flera nivåers avbrot Avbrot på PIA

TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2017-01-30 3 Praktiska kommentarer, forts. Deadline anmälan till Lab1 del A idag 30/1 kl 23.30 Anmälan via Lisam Måste vara kursregistrerad (via studentportalen) Omregistrerade måste skicka mail till mig för access till lisam Hjälpinstruktion för felsökning av tutorprogram tillagd! Länk på laborationssidan, precis före laboration 1 TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2017-01-30 4 Praktiska kommentarer, forts. Se föregående föreläsningskopior Användning tutor, individuell förberedelseuppgif Mux2 tillgänglig för egen träning (start torsdag 2/2) Håll ordning! Ingen mat i labbet (inklusive i papperskorgarna) Koppla ned, rent och snyggt när ni lämnar labbplatsen Alla som tränar på egen hand ska vara ute ur labbet senast 15 minuter före labbstart (9.45, 12.45, 14.45)

TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2017-01-30 5 Repetition av bitposition och bitvikter Alla bitpositioner och byteadresser räknas med start på 0 Lägsta adress är 0 Minst signifikant bit är bit 0 Mest signifikant bit är bit 7 för byte, bit 15 för word, och bit 31 för long För at skapa en konstant med en 1:a i motsvarande bitposition använd talet 2^(bitpos) Bitposition 2 är 3:e biten från höger, motsvarar värdet 4 Alternativt: Skriv i binär, översät till hexadecimalt (0100 = $4) TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2017-01-30 6 PIA control register PIA:n har tre register per port Data, värde at skicka ut (PIAA respektive PIAB) Direction, om pinne är ut eller ingång (DDRA respektive DDRB) Control, styr en del olika funktioner (CRA respektive CRB) PIAA och DDRA placeras på samma adress Styr med bit 2 i CRA vilket register vi kommer åt CRA Bit 2 = 0 => DDRA registret kopplas in Skrivning sker bara till DDRA, PIAA påverkas inte CRA Bit 2 = 1 => PIAA registret kopplas Skrivning sker bara till PIAA, DDRA påverkas inte

TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2017-01-30 7 Problem med nuvarande datormodell I många fall behöver maskinen göra flera saker samtidigt Räkna tid och kontrollera sensorer Om beräkningar/andra aktiviteter samtidigt Hinner kanske inte med at kontrollera sensorer i tid Tillbringar för mycket tid at kontrollera sensorer Varierande tidsräkning beroende på sensoraktivitet Svårt at programmera Måste om och om igen anropa rutin som läser av sensorer TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2017-01-30 8 Exempel på aktiviteter som måste hanteras direkt Tangentbordstryck Kan trycka på ny tangent inom 50 ms Tecken som skickas över seriell kommunikationslänk 115200 bitar/s => ~11000 tecken/s => ca 100 us per tecken Datapaket skickade över WLAN Svar inom 16 us (eller snabbare) Olika applikationer har olika krav på max responstid

TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2017-01-30 9 Et försök at implementera samtidig kontroll Antag större beräkningsloop Antag problemet kan beskrivas som 512 små steg (implementerat i subrutinen calculate_small_part) move #512,d6 loop jsr calculate_small_part jsr check_keyboard jsr check_network sub #1,d6; bne loop Subrutinerna måste returnera snabbt, annat missar man tecken Nackdel: Alla program måste hålla ordning på vad som ska kontrolleras (göra rät anrop) Måste kunna delas upp i små korta avsnit TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2017-01-30 10 Analogi med riktiga världen Antag ni ska äta frukost, läsa tidningen och samtidigt väntar telefonsamtal Lösning et Lyf luren och kontrollera om någon ringer till er Om någon i andra änden: prata i telefonen, tills samtalet är över Ta två tuggor flingor, svälj Läs en artikel i tidningen Börja om Lösning två Ät två tuggor, läs en artikel i tidningen, börja om Telefonen ringer, ni slutar äta, lämnar tidningen öppen Svara i telefon, prata Återgå till at äta och läsa tidningen där ni var när telefonen ringde

TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2017-01-30 11 Skillnader mellan metoderna At kontinuerligt kontrollera/testa om något hänt är Ineffektivt (många onödiga instruktioner som görs) Speciellt om händelsen är sällsynt Långsamt (måste vänta på at aktuell aktivitet slut innan byter) At bli avbruten (motsvarande at telefonen ringer) kräver Möjlighet at mit i exekvering av et program hoppa till en annan rutin Extra hårdvara (motsvarande ringklockan i telefonen) Programmet som blir avbrutet ska inte märka at det hänt Inga register, flaggor eller liknande i processorn som huvudprogrammet använder får förändras TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2017-01-30 12 At avbryta datorns huvudprogram En I/O-enhet (t ex parallellport) skickar signal Kallas för en avbrotsbegäran Processorn avbryter nuvarande program Gamla värdet på PC och statusregister (Z,C,N flaggor mm) sparas på stacken Byt värde på PC till speciell avbrotsrutin Ta hand om orsaken till avbrotet Återställ statusregister och PC (hämta från stacken) Programmet fortsäter som innan avbrotet Avbrotshantering liknar subrutinanrop Skillnad: Även staturegister med flaggor sparas

TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2017-01-30 13 Fler exempel på användning av avbrot Signal från I/O-enhet Tangent nedtryckt (jfr strobe från tangentbord) Timeravbrot en viss tid har förflutit Systemanrop Exempel Trap #14 som i Tutor ger kommandoprompt Fel i programmet Division med 0, läsning av ord (16 bitar) på udda adress, läsning i ej existerande minne, och liknande Et datapaket har kommit in på nätverkskortet Datablock är inläst från hårddisk till minne TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2017-01-30 14 Exempel motivation till avbrot Antag vi har en I/O enhet som tar emot tecken i hög hastighet. Vi vill spara inkommande tecken i en buffert i minnet Subrutin för at spara värde i minneregister indatareg savechar btst #0,statusreg ; nyt tecken kommit? beq skipcopy ; inget nyt tecken, hoppa move.l A1,-(A7) ; spara gamla värdet i A1 move.l buffpos,a1 ; hämta nuvarande position move.b inputreg,(a1)+ ; spara tkn, öka pekaren move.l A1,buffpos ; spara nya bufferpekarvärdet move.l (A7)+,A1 ; återställ A1 skipcopy rts Om inputreg inte töms innan nästa tecken från I/O tappas et tecken bort buffert buffpos inputreg 'h' 'e' Tecken från yttre enhet (I/O) Exempel serieport eller datornät statusreg $68 $65 $6A $20 buffert+4 Bit 0 = 1 om nytt tecken 'j' ' '

TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2017-01-30 15 Exempel motivation till avbrot, forts. Vill samtidigt som tecken kommer kunna beräkna summa n+(n-1)+...+1. (se förra föreläsningen) Lägg till anrop till test om tecken tillgängligt move.l #66,D0 jsr.s nsum... nsum move.l D1,-(A7) move.l #0,D1 nexturn: add.l D0,D1 jsr savechar sub.l #1,D0 bne.s nexturn move.l D1,D0 move.l (A7)+,D1 rts Kan inte placera anrop var som helst savechar btst #0,statusreg beq skipcopy move.l A1,-(A7) move.l buffpos,a1 move.b inputreg,(a1)+ move.l A1,buffpos move.l (A7)+,A1 skipcopy rts Om mellan SUB och BNE kraschar programmet TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2017-01-30 16 Exempel på avbrot, fel sät del 1 För varje varv i loop (tidigare 3 instruktioner) som utförs 4 extra instruktioner för at testa om tecken behöver tas om hand Halva hastigheten mot tidigare Kan minska förslusten av beräkningshastighet genom t ex beräkna två steg i loop innan testar tecken Komplicerad kod, massa olika gränsfall MOVE.L #66,D0 JSR.S nsum... nsum MOVE.L D1,-(A7) MOVE.L #0,D1 nexturn: ADD.L D0,D1 JSR saveshar SUB.L #1,D0 BNE.S nexturn MOVE.L D1,D0 MOVE.L (A7)+,D1 RTS savechar btst #0,statusreg beq skipcopy move.l A1,-(A7) move.l buffpos,a1 move.b inputreg,(a1)+ move.l A1,buffpos move.l (A7)+,A1 skipcopy rts

TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2017-01-30 17 Exempel på avbrot, fel sät del 2 Lägg till speciell funtion i datorn Låt subrutinen savechar starta så fort et tecken kommit Speciell hårdvara sparar aktuellt värde i PC på stacken och placerar adressen savechar i PC När subrutinen är slut (rts utförs) fortsäter nsum som vanligt och nya avbrot tillåts Et problem: Vad händer om tecken kommer efer SUB.L instruktionen? savechar ändrar Z-flaggan! MOVE.L #66,D0 JSR.S nsum... nsum MOVE.L D1,-(A7) MOVE.L #0,D1 nexturn: ADD.L D0,D1 SUB.L #1,D0 BNE.S nexturn MOVE.L D1,D0 MOVE.L (A7)+,D1 RTS savechar btst #0,statusreg beq skipcopy move.l A1,-(A7) move.l buffpos,a1 move.b inputreg,(a1)+ move.l A1,buffpos move.l (A7)+,A1 skipcopy rts TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2017-01-30 18 Exempel på avbrot, rät sät Se till at även spara alla flaggor (Z,C,N,X etc.) dvs SR registret, när savechar startas Måste återställas när savechar är slut RTE istället för RTS (kommer återställa både PC och SR-register (flaggor)) Vill inte behöva bestämma i förväg exakt vilken adress rutinen startar på Fix minnesadress innehåller adress till rutin (PC läses från speciell minnesadress vid avbrotets start där adressen till savechar ligger lagrad) MOVE.L #66,D0 JSR.S nsum... nsum MOVE.L D1,-(A7) MOVE.L #0,D1 nexturn: ADD.L D0,D1 SUB.L #1,D0 BNE.S nexturn MOVE.L D1,D0 MOVE.L (A7)+,D1 RTS savechar btst #0,statusreg beq skipcopy move.l A1,-(A7) move.l buffpos,a1 move.b inputreg,(a1)+ move.l A1,buffpos move.l (A7)+,A1 skipcopy rte

savechar 2017-01-29 21:53 TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2017-01-30 19 Avbrot på 68000 $68 Avsnit 4.8 i Tutormanualen När avbrotssignal aktiveras Push PC på stack (A7-registret pekar på stack) (1a,1b) Push statusregister på stack (2a,2b) Läs fix minnexadress (t ex $68-$6B) som innehåller adress till avbrotrutin (3) Hantera avbrotet (t ex läs tangentbord) 2b A7 2a A7 1a 1b 3 Stäng av källan till avbrot Ladda statusregister från stack (2b,2a åt andra hållet) PC A7 Ladda PC från stack (1b,1a åt andra hållet) SR Z, C, N, X mm TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2017-01-30 20 Viktigt: osynlig avbrotshanterare Inga register (D0-D7, A0-A7) får ha ändrats när avbrotsrutin avslutas Programmet som avbrutits får inte märka at avbrot sket Använda register måste spara undan först Vanligt at spara register först, återställa register sist avbrotsrutin: move.l d0,-(a7) move.l d1,-(a7) move.l a0,-(a7)... ; aktivitet, tex läs tangent move.l (a7)+,a0 ; obs! Omvänd move.l (a7)+,d1 ; ordning! move.l (a7)+,d0 ;SR sparas automatiskt rte ; OBS RTE, inte rts

TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2017-01-30 21 Spara energi med hjälp av avbrot I studenträknarexemplet kontrollerades sensorerna hela tiden En loop som alltid läste nuvarande sensorläge, kollade värdet, och om inte aktivt provade igen Med avbrot kan processorn stanna Ställ in hårdvaran så avbrot fås när knapp trycks Inga instruktioner behöver avkodas innan sensorn skapar et avbrot Kan stoppa processorn (sleep mode) Speciell instruktion/hårdvara behövs för at det ska fungera Kan minska strömförbrukningen Inga minnesaccesser, ingen instruktionsavkodning TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2017-01-30 22 Flera avbrotsorsaker I exemplen tidigare kunde många saker ge avbrot Tangentryck på et tangentbord Paket till nätverkskort Enklast: Låt alla avbrotsorsaker köra igång samma avbrotsrutin Måste hita vilken/vilka enheter som orsakade avbrotet Avbrotsrutinen startar alltid med at kontrollera orsak till avbrot Dator avbrott 1 avbrotsrutin var det enhet 1? ja, hoppa till rutin för enhet 1 nej inte enhet 1. Var det enhet 2? ja, hoppa till rutin för enhet 2 : Avbrott enhet 0 Avbrott enhet 1 Avbrott enhet 2

TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2017-01-30 23 Flera källor till avbrot Avbrot behöver åtgärdas olika fort beroende på källa Mikrosekunder för WLAN Millisekunder för tangentbord Avbrotrutinen får inte vara för lång Nästa avbrot från en annan källa kan behöva tas om hand Avbrot som kräver snabb åtgärd kan behöva bryta rutiner som åtgärdar avbrot med lång tid på sig TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2017-01-30 24 Flera avbrotsnivåer 68000 har flera avbrotsnivåer Avbrotsnivå 0: Inget avbrot pågår Avbrotsnivå 1: Avbrot med lägst prioritet Avbrotsnivå 2: Avbrot med näst lägst prioritet : Avbrotsnivå 6: Avbrot med näst högst prioritet Avbrotsnivå 7: Avbrot med högst prioritet Avbrot med högre prioritet kan avbryta lägre prioriterat avbrot Specialfall: Avbrotsnivå 7 slår alltid igenom Kallas NMI (non maskable interrupt) (svarta knappen på tutorkortet)

TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2017-01-30 25 Avbrot kan avbryta pågående avbrot Vanlig användning av avbrot: kör kod med visst tidsintervall realtidsklocka i en dator Skicka ut ljud på högtalare Et avbrot med lägre priortet kan avbrytas Det nya avbrot av högre prioritet kommer spara adress, flaggor etc på stacken på samma sät som för avbrotet med låg prioritet När högre priortetsavbrotet avslutas så återställs flaggor etc, och avbrotet med låg prioritet fortsäter TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2017-01-30 26 68000 statusregister Flaggor C, V, Z, N, Z enligt tidigare beskrivningar T: Trace flagga. T=0 stoppa stegvis exekvering av instruktioner S: Supervisor mode. S=1 tillåter fler instruktioner I2,I1,I0: Aktuell avbrotsnivå Interrupt med lägre prioritetsnivå kan inte påverka Undantag avbrotsnivå 7 som alltid får effekt SR 15 13 10 9 8 4 3 2 1 0 T S I2 I1I0 X NZ VC I2 I1 I0 0 0 0 inget avbrott 0 0 1 avbrott nivå 1 0 1 0 avbrott nivå 2 : 1 1 0 avbrott nivå 6 1 1 1 avbrott nivå 7

TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2017-01-30 27 68000 statusregister, välja tillåtna avbrot För at förhindra avbrot (maska bort avbrot) Behövs t ex när hårdvarukretsar konfigureras Sät I2,I1,I0 = 1 hindrar avbrot på avbrotsnivå 1-6 Avaktivering av avbrot (maska bort) OR.W #$0700,SR Tillåt alla normala avbrot AND.W #$f8ff,sr SR 15 13 10 9 8 4 3 2 1 0 T S I2 I1I0 X NZ VC I2 I1 I0 0 0 0 inget avbrott 0 0 1 avbrott nivå 1 0 1 0 avbrott nivå 2 : 1 1 0 avbrott nivå 6 1 1 1 avbrott nivå 7 TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2017-01-30 28 Applikationsexempel Två aktiviteter Huvudprogram som utför långa beräkningar, där inmatning sker via tangentbord Tangentbordet liknar labbens tangentbord, det håller bara reda på aktuell nedtryckt tangent För at slippa tappa bort tangentryck medan huvudprogrammet räknar används en buffert Bufferten är några minnesplatser plus en pekare till nästa lediga plats Huvudprogrammet hämtar tecken i bufferten Avbrotsprogrammet sparar undan aktuellt tecken från tangentbordet i bufferten

TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2017-01-30 29 Exempel, behov maska bort avbrot bufferpekare Rutin som sparar tangentryck i buffert Tangent lagras i buffert (skifas när ny tangent tryckts). Avbrotsrutinen sparar senaste tecknet i en kö i buffert Exempel visar minne efer hej hopp matats in buffered_addkey: ; Lägger till ett tecken i buffer move.l a0,-(a7) move.l buffer_pekare,a0 cmp.l #buffer_end,a0 ; Sanity check beq buffer_full move.b $10082,(a0)+ ; läs tecken från PIA port B move.l a0,buffer_pekare buffer_full:move.l (a7)+,a0 rte buffer_pekare: dc.l buffer_start buffer_start: dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 buffer_end: buffer_start buffer_end $68 $65 $6A $20 $68 $6f $70 $70 TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2017-01-30 30 Exempel, behov maska bort avbrot, forts. Huvudprogrammet tar hand om tangenttryck från bufferten Returneras äldsta tecknet och tas bort i buffert (skifas bort) buffered_getkey: move.l buffer_pekare,a0 ; förstör a0 och d1 cmp.l #buffer_start,a0 beq tom ; Tom buffer! move.l #buffer_start,a0 move.b (a0),d0 ;Äldsta tangent till d0 move.b #15,d1 loop: move.b 1(a0),(a0)+ ; Här skiftar vi alla add.b #-1,d1 ; tecken i bufferten bne loop ; bakåt ett steg move.l buffer_pekare,a0 ; ett tecken färre i buffert add.l #-1,a0 move.l a0,buffer_pekare rts ; Returnerar tryckt knapp i d0.b tom: move.l #0,d0 ; Om tom buffer. Returnera 0 rts bufferpekare buffer_start buffer_end $68 $65 $6A $20 $68 $6f $70 $70

TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2017-01-30 31 Exempel, behov maska bort avbrot, forts. Om avbrot kommer när buffered_getkey kör ändras bufferpekare, men inte kopian i a0. När buffered_getkey avslutas tappas et tecken bort buffered_getkey: move.l buffer_pekare,a0 ; förstör a0 och d1 cmp.l #buffer_start,a0 beq tom ; Tom buffer! move.l #buffer_start,a0 move.b (a0),d0 ;Äldsta tangent till d0 move.b #15,d1 loop: move.b 1(a0),(a0)+ ; Här skiftar vi alla add.b #-1,d1 ; tecken i bufferten bne loop ; bakåt ett steg move.l buffer_pekare,a0 ; ett tecken färre i buffert add.l #-1,a0 move.l a0,buffer_pekare rts ; Returnerar tryckt knapp i d0.b tom: move.l #0,d0 ; Om tom buffer. Returnera 0 rts bufferpekare buffer_start buffer_end $68 $65 $6A $20 $68 $6f $70 $70 TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2017-01-30 32 Lösning på problemet buffered_getkey innehåller kritisk sektion som inte får avbrytas Löses genom at maska bort avbrot Glöm inte tillåta avbrot i båda fall av avslutning Tillåt inte avbrott Tillåt avbrott igen Tillåt avbrott igen buffered_getkey: or.w #$0700,SR move.l buffer_pekare,a0 ; förstör a0 och d1 cmp.l #buffer_start,a0 beq tom ; Tom buffer! move.l #buffer_start,a0 move.b (a0),d0 ;Äldsta tangent till d0 move.b #15,d1 loop: move.b 1(a0),(a0)+ ; Här skiftar vi alla add.b #-1,d1 ; tecken i bufferten bne loop ; bakåt ett steg move.l buffer_pekare,a0 add.l #-1,a0 move.l a0,buffer_pekare and.w #$f8ff,sr rts ; Returnerar tryckt knapp i d0.b tom: move.l #0,d0 ; Om tom buffer Returnera 0 and.w #$f8ff,sr rts

TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2017-01-30 33 Generella riktlinjer för avbrot Maska bort avbrot endast under mycket korta stunder Stor risk at tappa information om avstängt längre tid Se till at avbrotsrutiner går snabbt at köra (når RTE inom få instruktioner) Om möjligt skriv program så strömsparfunktioner kan användas Stänga av programmet, vänta på interrupt TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2017-01-30 34 Många fler anledningar till avbrot Varje orsak har en egen rutin Lägsta adresserna i minnet innehåller tabell med adresser Figur 8 i Tutor-manualen Exempel: Reset hämtar startadress och stackvärde från adress 0 Division med 0 Externa avbrot (level1 t.o.m. level 7) TRAP (speciell maskininstruktion som tvingar fram avbrot) Illegal instruktion Om instruktionen inte känns igen kan et litet program kanske utföra den istället Kan implementera nya instruktioner som inte fanns när processorn byggdes

TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2017-01-30 35 Avbrot med PIA-kretsen Parallellporten (PIA-kretsen) kan generera avbrot Kommer användas i lab2 Avbrotsprogrammering på M68008 Två ingångar/utgångar extra per port (CA1, CA2, CB1, CB2) Möjliggör 8-bitars överföring av data med handskakning Färdiga initieringsrutiner till labb2 för PIA Säter CA1, CA2, CB1, CB2 så avbrot fås när en av signalerna går från 0 till 1 (positiv flank) För at ta bort begäran om avbrot från kretsen behöver dataregistret läsas (för aktuell port) Använding: Skicka data med strobe (jfr tangentbord), låt strobe driva CAsignal, skicka data på portens databitar TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2017-01-30 36 Avbrot med PIA-kretsen PIA-kretsens kontrollregister (port A) Väljer om riktning på signalförändring (0->1 eller 1->0) för CA1 (bit 1) och CA2 (bit 4) Bit 6 och 7 säts automatiskt om CA0 respektive CA1 har en signalförändring som stämmer med sökt riktning Tillåter at avbrot skickas till CPU (bit 0 för CA1, bit 3 för CA2) CA2 kan även bli en utgång (om bit 5 = 1) Motsvarande bitar för PIA port B Lite annan funktion om man detaljstuderar databladet

TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2017-01-30 37 Avbrot med PIA-kretsen, forts. Port A ger avbrot på nivå 5 Hämtar adress till avbrotsrutin på adress $74 Port B ger avbrot på nivå 2 Hämtar adress till avbrotsrutin på adress $68 Om avbrotet inte rensas startar avbrotsrutinen om igen Läs dataport (PIAA respektive PIAB) Kan även läsa av aktuell avbrotsstatus i controlregistret Bit 7 och bit 6 www.liu.se