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