TSEA28 Datorteknik Y (och U)

Relevanta dokument
TSEA28 Datorteknik Y (och U)

TSEA28 Datorteknik Y (och U)

TSEA28 Datorteknik Y (och U)

TSEA28 Datorteknik Y (och U)

TSEA28 Datorteknik Y (och U)

Svar till Övning3 Datorteknik, HH vt12 Avbrott och timers

TSEA28 Datorteknik Y (och U)

Övning2 Datorteknik, HH vt12 - Programmering

3. Mikroprogrammering II

TSEA28 Datorteknik Y (och U)

TSEA28 Datorteknik Y (och U)

TSEA28 Datorteknik Y (och U)

TSEA28 Datorteknik Y (och U)

Maskinorienterad programmering

Datorsystemteknik Föreläsning 7DAVA14

Digital- och datorteknik

Polling (cyklisk avfrågning) Avbrott

Tentamen (Exempel) Datorteknik Y, TSEA28

Föreläsningsanteckningar 3. Mikroprogrammering II

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

Laboration 2 i Datorteknik- Assemblerprogrammering II

Tentamen (Exempel) Datorteknik Y, TSEA28

LABORATION. Datorteknik Y

Maskinorienterad programmering

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

Tentamen. Datorteknik Y, TSEA28

F8: Undantagshantering

Maskinorienterad programmering

TSEA28 Datorteknik Y (och U)

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

Institutionen för elektro- och informationsteknologi, LTH

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

Tentamen. Datorteknik Y, TSEA28

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

Lösningar till tentamen i EIT070 Datorteknik

Tentamen. Datorteknik Y, TSEA28

Institutionen för elektro- och informationsteknologi, LTH

Tentamen. Datorteknik Y, TSEA28

LABORATION. Datorteknik Y

GPIO - General Purpose Input Output

Tentamen (Exempel) Datorteknik Y, TSEA28

Digital- och datorteknik

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

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

Tentamen (Exempel) Datorteknik Y, TSEA28

Lista på registeruppsättningen i PIC16F877A Datablad TTL-kretsar 74-serien

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

TSEA28 Datorteknik Y (och U)

Tentamen. Datorteknik Y, TSEA28

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

Tentamen den 18 mars svar Datorteknik, EIT070

Digital- och datorteknik

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

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. Datorteknik Y, TSEA28

Assemblerprogrammering, ARM-Cortex M4 del 3

Föreläsningsanteckningar till Konstruktionsmetoder

Datakommunikation med IR-ljus.

LABORATION. Datorteknik Y

Övningsuppgifter STYRNING - i Mikrodatorteknik för U2 2010

Datorteknik 2 (AVR 2)

TSEA28 Datorteknik Y (och U)

F4: Assemblerprogrammering

Digital- och datorteknik

Tentamen. Datorteknik Y, TSEA28

Assemblerprogrammering för ARM del 2

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

Datorsystem Laboration 2: Minnesmappade bussar

TENTAMEN. Datorteknik. D1/E1/Mek1/Ö Hjälpmedel: Häfte "ARM-instruktioner", A4-format, 17 sidor. Maxpoäng:

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

TSEA28 Datorteknik Y (och U)

Tentamen Datorteknik D del 2, TSEA49

Läsminne Read Only Memory ROM

GPIO - General Purpose Input Output

TSEA28 Datorteknik Y (och U)

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

Digital- och datorteknik

Svar till tentamen den 16 december 2013 Datorarkitekturer med operativsystem, EDT621, 7,5 poäng

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.

TSEA28 Datorteknik Y (och U)

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. Datorteknik Y, TSEA28

A-del motsvarande KS1

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

Laboration Datorteknik TSIU02/TSEA28 3. Digitalur

Tentamen PC-teknik 5 p Lösningar och kommentarer

Digital- och datorteknik

Digital- och datorteknik

Programexempel för FLEX

Föreläsning 2. Operativsystem och programmering

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

Assemblerprogrammering - fördjupning

Lösningar till tentamen i EIT070 Datorteknik

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

TENTAMEN. Datorteknik. D1/E1/Mek1/Ö Hjälpmedel: Häfte" ARM-instruktioner", A4-format, 17 sidor. Maxpoäng: 60p

Kontrollskrivning Mikrodatorteknik CDT S2-704

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

Tentamen. Datorteknik Y, TSEA28

Digital- och datorteknik

Transkript:

TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2018-01-29 3 Praktiska kommentarer, forts. TSEA28 Datorteknik Y (och U) Föreläsning 6 Kent Palmkvist, ISY Deadline anmälan till Lab1 del A idag 29/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 Labanvisningar Lab1 uppdaterad så kod för printchar stämmer med lab1.asm TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2018-01-29 2 TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2018-01-29 4 Dagens föreläsning Avbrot Princip Avbrot på ARM Avbrot på Darma Exempel Flera nivåers avbrot Avbrot på labbsystemet Praktiska kommentarer, forts. Mux1 tillgänglig för egen träning (start torsdag 1/2) Endast på ej schemalagd tid 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, 16.45)

TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2018-01-29 5 TSEA28 Datorteknik Y (och U), föreläsning 5, Kent Palmkvist 2018-01-29 7 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 halvord, och bit 31 för ord 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) In och utmatning, generellt Alla datorer behöver kommunicera med omvärden (se studenträknarexemplet) Skicka ut en bit via et register på en speciell adress Läs av en insignal via en speciell adress Problem med den enkla uppsätningen Måste veta i förväg hur många in och utsignaler som ska finnas Kan bara skicka ut alternativt ta emot signal Varje pinne på kretsen kostar extra, vill utnytja dom maximalt Vissa funktioner är enkla at bygga hårdvara för men dyra at lösa programmeringsmässigt Vissa funktioner har för hög hastighet för at processorn ska hinna med TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2018-01-29 6 TSEA28 Datorteknik Y (och U), föreläsning 5, Kent Palmkvist 2018-01-29 8 Repetition datorsystemet Minne 32-bitars ordbredd (läs/skriv 4 byte varje gång) Kan läsa enskilda byte med LDRB respektive skriva med STRB Adress pekar på varje enskild byte (8-bit) Måste läsa 32-bitars tal på en adress jämnt delbar med 4 Uppdelat i programminne, dataminne och I/O-enheter Processor 16 register (13 generella + SP, LR, PC) + statusregister med flaggor Instruktioner och konstanter läses från programminnet Data till/från register kommer från/till dataminne och I/O enheter Alla beräkningar måste ske i register In och utmatning, Parallellport (GPIO) Vanlig funktion är parallellporten Skicka ut en byte per gång Läs av en byte per gång At styra utsignaler Värdet som lagras i utporten finns tillgänglig på datorns utsida Varje gång nyt värde skrivs ändras utsignalerna på en gång I vissa datorer kan man även läsa ut utportens värde Är det datat man skrivit till porten som läses, eller är det värdet på pinnen? Ibland kan båda möjligheterna finnas (två olika adresser)

TSEA28 Datorteknik Y (och U), föreläsning 5, Kent Palmkvist 2018-01-29 9 TSEA28 Datorteknik Y (och U), föreläsning 5, Kent Palmkvist 2018-01-29 11 In och utmatning, Parallellport, forts. At läsa av en port är enkelt Välj portens pinnar istället för minnet för någon specifik adress In och utgångar kan kombineras ihop Möjliggör anpassning till aktuellt behov Tillåter dubbelriktad kommunikation (databuss) Måste kunna styra om en pinne ska fungera som ut eller ingång Extra värden används (riktningsinformation) för varje bit Andra specialfunktioner Drivning Pull up/pull down tristate Exempel BCM2835 (raspberry pi) Liknar Atmel-kretsen Kan även välja 0 som förvalt värde om inte ansluten pinne Kan styrka på utsignalen (max ström) Flera olika I/O-enheter kan anslutas till en pinne Välj vilken funktion som ansluts via yterligare et register Gäller faktist även Atmel-kretsen http://www.mosaic-industries.com/embeddedsystems/_media/microcontroller-projects/raspberrypi/raspberry-pi-circuit-gpio-input-pins.png TSEA28 Datorteknik Y (och U), föreläsning 5, Kent Palmkvist 2018-01-29 10 TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2018-01-29 12 Exempel Parallellportsstyrning, Atmel Exempel från Atmel SAM3X (aurdino due) Förenklad vy, total 16 register Varje pinne styrs av flera bitar Välj om pinnen ska kunna skicka ut et värde (tristate) Välj om pinnen ska kunna skicka ut 0 och 1 eller bara 0 (open collector) Värde som ska skickas ut Välj om värdet alltid blir 1 om pinnen inte ansluten (pull-up) Open collector tristate utvärde logik dator pullup 3.3V Avläst värde omgivning Pinne GPIO kontrollregister, Darma Varje port har 36 register 13 register styr funktion (in/ut, strömbegränsningar, funktionsval) GPIODATA, värde at skicka ut och värde at läsa av GPIODIR, om pinne är ut eller ingång 0 = ingång, 1 = utgång

TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2018-01-29 13 TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2018-01-29 15 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 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) mov r5,#512 loop bl calculate_small_part bl check_keyboard bl check_network subs r5,r5,#1 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 2018-01-29 14 TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2018-01-29 16 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 Analogi med riktiga världen Antag ni ska äta frukost, läsa tidningen och samtidigt väntar telefonsamtal Lösning et Lyft 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 2018-01-29 17 TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2018-01-29 19 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) Känt som programmed IO eller busy wait I/O) 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 Känt som avbrotsstyrd I/O 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 Applikationsprogram anropar et operativsystem för at utföra en speciell funktion Fel i programmet Division med 0, läsning av ord (16 eller 32 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 2018-01-29 18 TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2018-01-29 20 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 Exempel motivation till avbrot Antag vi har en I/O enhet som tar emot tecken i hög hastighet. Om UART0_DR inte töms innan nästa tecken från I/O tappas tecken bort Spara inkommande tecken i en buffert i minnet Subrutin för at spara värde i buffert savechar push {r0,r1,r2} ; Kommer använda registren ldr r1,uart0_fr ; Adress till statusregister ldr r2,[r1] ; Hämta status ands r2,r2,#0x10 ; Finns tecken? bne skipcopy ; nej (bit 4= 1), hoppa ur ldr r1,uart0_uartdr ; konstant: UART0_DR adress ldr r2,[r1] ; läs tecken ldr r1,buffposaddr ; konstant: buffpos adress ldr r0,[r1] ; hämta värdet i buffpos str r2,[r0],#1 ; spara tecken i buffert, öka r0 str r0,[r1] ; öka adress i buffpos skipcopy pop {r0, r1, r2} ; återställ register buffert buffpos UART0_DR 'h' 'e' Tecken från yttre enhet (I/O) Exempel serieport eller datornät UART0_FR 0x65 0x6A 0x20 buffert+4 Bit 4 = 0 om nytt tecken 'j' ' '

TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2018-01-29 21 TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2017-01-30 23 Exempel motivation till avbrot, forts. Exempel på avbrot, fel sät del 2 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 mov r0,#66 savechar push {r0,r1,r2} ; Spararegistervärden bl nsum ldr r1,uart0_fr ; peka på statusregister... ldr r2,[r1] ; Hämta status ands r2,r2,#0x10 ; Finns tecken? nsum: push {r1} bne skipcopy ; nej (bit 4= 1), hoppa ur mov r1,#0 ldr r1,uart0_uartdr ; peka på UART0_DR nexturn: add r1,r1,r0 ldr r2,[r1] ; läs tecken bl savechar ldr r1,buffposaddr ; peka på buffpos subs r0,r0,#1 ldr r0,[r1] ; hämta värdet bne nexturn strb r2,[r0],#1 ; spara tecken i buffert mov r0,r1 str r0,[r1] ; öka adress i buffpos pop {r1} skipcopy pop {r0, r1, r2} ; återställ register Kan inte placera anrop var som helst Om mellan SUB och BNE kraschar programmet 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 efter SUBS instruktionen? savechar ändrar Z-flaggan! mov r0,#66 bl nsum... nsum: push {r1} mov r1,#0 nexturn: add r1,r1,r0 bl savechar subs r0,r0,#1 bne nexturn mov r0,r1 pop {r1} savechar: push {r0,r1,r2} ldr r1,uart0_fr ldr r2,[r1] ands r2,r2,#0x10 bne skipcopy ldr r1,uart0_uartdr ldr r2,[r1] ldr r1,buffposaddr ldr r0,[r1] strb r2,[r0],#1 str r0,[r1] skipcopy: pop {r0, r1, r2} TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2017-01-30 22 TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2017-01-30 24 Exempel på avbrot, fel sät del 1 Exempel på avbrot, rät sät För varje varv i loop (tidigare 3 instruktioner) som utförs 8 extra instruktioner för at testa om tecken behöver tas om hand 1/4 av hastigheten mot tidigare Kan minska förlusten av beräknings-hastighet genom t ex behålla konstanter i register som behövs för test. Måste hǻlla ordning på vilka register som förstörs av savechar Kan minska förlusten av beräknings-hastighet genom at t ex räkna två steg i loop innan test om tecken finns, etc. Komplicerad kod, massa olika gränsfall mov r0,#66 bl nsum... nsum: push {r1} mov r1,#0 nexturn: add r1,r1,r0 bl savechar subs r0,r0,#1 bne nexturn mov r0,r1 pop {r1} savechar: push {r0,r1,r2} ldr r1,uart0_fr ldr r2,[r1] ands r2,r2,#0x10 bne skipcopy ldr r1,uart0_uartdr ldr r2,[r1] ldr r1,buffposaddr ldr r0,[r1] strb r2,[r0],#1 str r0,[r1] skipcopy: pop {r0, r1, r2} Se till at även spara alla flaggor (Z,C,N,V etc.) dvs PSR registret, när savechar startas Måste återställas när savechar är slut Speciell återhoppsadress 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) mov r0,#66 bl nsum... nsum: push {r1} mov r1,#0 nexturn: add r1,r1,r0 bl savechar subs r0,r0,#1 bne nexturn mov r0,r1 pop {r1} savechar: push {r0,r1,r2} ldr r1,uart0_fr ldr r2,[r1] ands r2,r2,#0x10 bne skipcopy ldr r1,uart0_uartdr ldr r2,[r1] ldr r1,buffposaddr ldr r0,[r1] strb r2,[r0],#1 str r0,[r1] skipcopy: pop {r0, r1, r2}

TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2017-01-30 25 TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2018-01-29 27 Avbrot på ARM ARM har olika sät at hantera avbrot beroende på processormodell Boken beskriver Cortex-A och tidigare modeller Byter vissa register till nya när avbrot sker (banked registers) Har väldigt få avbrot definierade Darma använder Cortex-M4 som har en lite annorlunda avbrothantering Gemensamt för alla Avbrot medför at nuvarande program avbryts Register sparas och/eller byts ut mot nya versioner En adress ur vektortabell (i programminnet) anger var avbrotsrutinen ligger som ska startas Viktigt: osynlig avbrotshanterare Inga register (R4-R11) får ha ändrats när avbrotsrutin avslutas Programmet som avbrutits får inte märka at avbrot sket R0-R3 och R12 sparas redan automatiskt vid start av avbrot Använda register måste spara undan först Vanligt at spara register först, återställa register sist avbrotsrutin: push {r4,r5,r6}... ; aktivitet, tex läs tangent pop {r4,r5,r6} bx lr ; OBS bx lr, inte TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2018-01-29 26 TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2018-01-29 28 Avbrot på ARM Cortex-M4 (Darma) 0000B8 savechar Spara energi med hjälp av avbrot Avsnit 2.5 i Tiva TM4C123GH6PM Microcontroller Data Sheet. När avbrotssignal aktiveras Push PSR, PC, LR, R12, R3, R2, R1, R0 på stack (SP (R13) minskas) (steg 1) Läs fix minnexadress (t ex 0000B8-0000BB) som innehåller adress till avbrotrutin (steg 2) Hantera avbrotet (t ex läs tangentbord) Stäng av källan till avbrot Återställ register med pop av PSR, PC, LR, R12, R3, R2, R1 och R0. (steg 1 åt andra hållet) R0 R1 R2 R3 R4 R11 R12 SP (R13) LR (R14) PC (R15) PSR Z,C,N,V etc. 1 R0 R1 R2 R3 R12 LR (R14) PC (R15) PSR 2 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 2018-01-29 29 TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2018-01-29 31 Flera avbrotsorsaker Flera avbrotsnivåer I exemplen tidigare kunde många saker ge avbrot Tangentryck på et tangentbord Paket till nätverkskort Dator Cortex-M4 (Darma) har flera avbrotsprioriteter Sköts av en speciell enhet Nested Vectored Interrupt Controller (NVIC) Lägst: Reset (prioritet -3) 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 avbrott 1 NMI (prioritet -2), speciell avbrotssignal Hard fault (prioritet -1), t ex om adress till avbrotvektor inte kan läsas Prioritet 0: Högst avbrotsprioritet som kan väljas i NVIC Prioritet 7: Lägst avbrotsprioritet som kan väljas i NVIC 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 Avbrot med högre prioritet kan avbryta lägre prioriterat avbrot TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2018-01-29 30 TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2018-01-29 32 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 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 2018-01-29 33 TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2018-01-29 35 Cortex-M4 (Darma) statusregister (PSR) Flaggor C, V, Z, N enligt tidigare beskrivningar T: Thumb flag, visar om Thumb mode används (alltid = 1) ISRNUM: Anger vilken avbrotsrutin som körs 0x02=NMI, 0x03=Hard Fault, 0x05=bus fault, 0x10=avbrotsvektor 0, etc. Cortex-M4 (Darma) specialregister Stäng av avbrot CPSID I ; för PRIMASK CPSID F ; för FAULTMASK Slå på avbrot CPSIE I ; för PRIMASK CPSIE F ; för FAULTMASK FAULTMASK för allt utom NMI, PRIMASK för alla konfigurerbara avbrot TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2018-01-29 34 TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2018-01-29 36 Cortex-M4 (Darma) specialregister Yterligare register finns i processorn Kan nås/ändras med instruktionerna MSR, MRS och CPSIE eller CPSID FAULTMASK stänger av allt utom NMI PRIMASK stänger av alla konfigurerbara avbrot BASEPRI bestämmer vilken prioritet behövs för at skapa avbrot Cortex-M4 (Darma) BASEPRI register Läs med MRS rd,basepri Skriv med MSR rd,basepri Bit 7 bit 5 bestämmer vilka avbrotsprioriteter som släpps igenom 000: alla avbrot släpps igenom 001: avbrot prioritet 1-7 släpps inte igenom 010: avbrot prioritet 2-7 släpps inte igenom : 111: avbrot prioritet 7 släpps inte igenom

TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2018-01-29 37 TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2018-01-29 39 Darma För at förhindra avbrot (maska bort avbrot) Behövs t ex när hårdvarukretsar konfigureras Låt processorn ignorera avbrot CPSID I Tillåt avbrot När all konfigurering är klar CPSIE I 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 2018-01-29 38 TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2018-01-29 40 Darma, val av avbrotsprioriteter Varje avbrotskälla (t ex GPIOB, GPIOF eller UART0) kan ges en avbrotsprioritet NVIC håller reda på vilken som har högst prioritet Både huvudprioritet (0-7) och underprioritet Underprioritet bestämmer vilken som vinner om två med samma huvudprioritet vill få orsaka et avbrot Avbrot kan slås på och av i NVIC Separat för varje enskild avbrotskälla (t ex för varje GPIO-port) NVIC innehåller också register som visar vilka avbrot som inte än blivit utförda Exempel, behov maska bort avbrot Rutin som sparar tangentryck i buffert Tangent lagras i buffert (skiftas när ny tangent tryckts). Avbrotsrutinen sparar senaste tecknet i en kö i buffert Exempel visar minne efter hej hopp matats in buffered_addkey: ldr r0,bufferpekare_adr ; konstant bufferpekare ldr r1,[r0] ; hämta aktuell ledig plats ldr r2,buffer_end_adr ; konstant buffer_end cmp r2,r1 ; fyllt buffert? beq buffer_full ; Ja, skippa ldr r2,uart0_dr ; adress till I/O tangentvärde ldr r3,[r2] ; hämta tangentvärde strb r3,[r1],#1 ; spara I buffert, öka r1 med 1 str r1,[r0] ; spara nya buffertpekaren buffer_full: bx lr ; återhopp från avbrott bufferpekare buffer_start buffer_end 0x65 0x6A 0x20 0x6f 0x70 0x70

TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2018-01-29 41 TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2018-01-29 43 Exempel, behov maska bort avbrot, forts. Huvudprogrammet tar hand om tangenttryck från bufferten Returneras äldsta tecknet och tas bort i buffert (skiftas bort) buffered_getkey: ldr r1,bufferpekare_adr ; konstant bufferpekare adress ldr r2,buffer_start_adr ; konstant buffer_start adress ldr r3,[r1] ; nuvarande värde på bufferpekare cmp r3,r2 ; pekar bufferpekare på buffer_start? beq tom ; Tom buffer! mov r4,#15 ; 15 tecken att flytta ldrb r0,[r3],#1 ; Äldsta tangent i r0, minska r3 med 1 str r3,[r1] ; spara nya buffertpekare loop: ldrb r5,[r2,#1]! ; Öka r2, Hämta föregående tecken strb r5,[r2,#-1] ; placera på adressen innan subs r4,r4,#1 ; flyttat alla? bne loop ; nej, ta nästa b slut ; Returnerar tryckt knapp i d0.b tom: mov r0,#0 ; Om tom buffer. Returnera 0 slut: bufferpekare buffer_start buffer_end 0x65 0x6A 0x20 0x6f 0x70 0x70 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 buffered_getkey: cpsid i ldr r1,bufferpekare_adr ; konstant bufferpekare adress ldr r2,buffer_start_adr ; konstant buffer_start adress ldr r3,[r1] ; nuvarande värde på bufferpekare cmp r3,r2 ; pekar bufferpekare på buffer_start? beq tom ; Tom buffer! mov r4,#15 ; 15 tecken att flytta ldrb r0,[r3],#1 ; Äldsta tangent i r0, minska r3 med 1 str r3,[r1] ; spara nya buffertpekare loop: ldrb r5,[r2,#1]! ; Öka r2, Hämta föregående tecken strb r5,[r2,#-1] ; placera på adressen innan subs r4,r4,#1 ; flyttat alla? bne loop ; nej, ta nästa b slut ; Returnerar tryckt knapp i d0.b tom: mov r0,#0 ; Om tom buffer. Returnera 0 slut: cpsie i Tillåt avbrott igen TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2018-01-29 42 TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2018-01-29 44 Exempel, behov maska bort avbrot, forts. Om avbrot kommer när buffered_getkey kör ändras bufferpekare, men inte kopian i r3. När buffered_getkey avslutas tappas et tecken bort buffered_getkey: ldr r1,bufferpekare_adr ; konstant bufferpekare adress ldr r2,buffer_start_adr ; konstant buffer_start adress ldr r3,[r1] ; nuvarande värde på bufferpekare cmp r3,r2 ; pekar bufferpekare på buffer_start? beq tom ; Tom buffer! mov r4,#15 ; 15 tecken att flytta ldrb r0,[r3],#1 ; Äldsta tangent i r0, minska r3 med 1 str r3,[r1] ; spara nya buffertpekare loop: ldrb r5,[r2,#1]! ; Öka r2, Hämta föregående tecken strb r5,[r2,#-1] ; placera på adressen innan subs r4,r4,#1 ; flyttat alla? bne loop ; nej, ta nästa b slut ; Returnerar tryckt knapp i d0.b tom: mov r0,#0 ; Om tom buffer. Returnera 0 slut: bufferpekare buffer_start buffer_end 0x65 0x6A 0x20 0x6f 0x70 0x70 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 2018-01-29 45 Många fler anledningar till avbrot Varje orsak har en egen rutin Lägsta adresserna i minnet innehåller tabell med adresser Tabell 2.8 i Tiva TM4C123GH6PM Microcontroller Data Sheet. Exempel Reset hämtar stackvärde på adress 000000 och startadress på adress 000004 Externa avbrot (vektorer adress 000040 t om 000268) SVCALL (speciell maskininstruktion SVC som tvingar fram avbrot) Usage faults Division med 0 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 www.liu.se