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)

Datorsystemteknik Föreläsning 7DAVA14

Maskinorienterad programmering

Polling (cyklisk avfrågning) Avbrott

Digital- och datorteknik

TSEA28 Datorteknik Y (och U)

Laboration 2 i Datorteknik- Assemblerprogrammering II

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

Föreläsningsanteckningar 3. Mikroprogrammering II

Maskinorienterad programmering

LABORATION. Datorteknik Y

Tentamen (Exempel) Datorteknik Y, TSEA28

TSEA28 Datorteknik Y (och U)

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

Tentamen. Datorteknik Y, TSEA28

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

Institutionen för elektro- och informationsteknologi, LTH

Tentamen (Exempel) Datorteknik Y, TSEA28

F8: Undantagshantering

Maskinorienterad programmering

Institutionen för elektro- och informationsteknologi, LTH

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

Lösningar till tentamen i EIT070 Datorteknik

Datorteknik 2 (AVR 2)

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

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

LABORATION. Datorteknik Y

Digital- och datorteknik

Tentamen. Datorteknik Y, TSEA28

GPIO - General Purpose Input Output

Tentamen. Datorteknik Y, TSEA28

Tentamen. Datorteknik Y, TSEA28

Assemblerprogrammering, ARM-Cortex M4 del 3

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

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

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

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

Tentamen den 18 mars svar Datorteknik, EIT070

Tentamen. Datorteknik Y, TSEA28

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

Tentamen (Exempel) Datorteknik Y, TSEA28

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

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

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

Digital- och datorteknik

Digital- och datorteknik

Digital- och datorteknik

Digital- och datorteknik

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

Datorsystem Laboration 2: Minnesmappade bussar

Övningsuppgifter STYRNING - i Mikrodatorteknik för U2 2010

Tentamen (Exempel) Datorteknik Y, TSEA28

Datakommunikation med IR-ljus.

Föreläsningsanteckningar till Konstruktionsmetoder

TSEA28 Datorteknik Y (och U)

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

Tentamen. Datorteknik Y, TSEA28

F4: Assemblerprogrammering

Programexempel för FLEX

LABORATION. Datorteknik Y

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.

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

A-del motsvarande KS1

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

Assemblerprogrammering - fördjupning

TSEA28 Datorteknik Y (och U)

Läsminne Read Only Memory ROM

TSEA28 Datorteknik Y (och U)

Tentamen Datorteknik D del 2, TSEA49

GPIO - General Purpose Input Output

Tentamen. Datorteknik Y, TSEA28

Assemblerprogrammering för ARM del 2

Lösningar till tentamen i EIT070 Datorteknik

Digital- och datorteknik

Föreläsning 2. Operativsystem och programmering

Kontrollskrivning Mikrodatorteknik CDT S2-704

Lösningar till tentamen i EIT070 Datorteknik

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

TSEA28 Datorteknik Y (och U)

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

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

Exempeltentamen Datorteknik, EIT070,

Laboration Datorteknik TSIU02/TSEA28 3. Digitalur

Extrauppgifter för CPU12

TSEA28 Datorteknik Y (och U)

Digital- och datorteknik

TSEA28 Datorteknik Y (och U)

Tentamen PC-teknik 5 p Lösningar och kommentarer

Transkript:

TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2019-02-04 3 Praktiska kommentarer TSEA28 Datorteknik Y (och U) Föreläsning 6 Kent Palmkvist, ISY Deadline anmälan till Lab1 del A idag 4/2 kl 23.30 Anmälan via Lisam Måste vara kursregistrerad (via studentportalen) Om registreringsproblem måste ni skicka mail till mig för access till lisam Labsidan uppdaterad med speciell getkey för lab1 Användbar för dom som har eget kort och vill testa lab1-lösning Läser datorns tangentbord istället för anslutet tangentbord Fortfarande krav at ansluta och använda 16-tangenters tangentbord för godkänd lab TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2019-02-04 2 TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2019-02-04 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 7/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 2019-02-04 5 TSEA28 Datorteknik Y (och U), föreläsning 5, Kent Palmkvist 2019-02-04 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 bitar via en speciell minnesadress kopplad till pinne Läs av insignaler via en speciell adress kopplad till pinne 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 på en pinne 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 2019-02-04 6 TSEA28 Datorteknik Y (och U), föreläsning 5, Kent Palmkvist 2019-02-04 8 Repetition datorsystemet (slide 6 fö 5) 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) Uppdelat i programminne, dataminne och I/O-enheter Processor 16 register (13 generella + SP, LR, PC) + statusregister med flaggor Instruktioner och textkonstanter läses från programminnet Data till/från register kommer från/till dataminne och I/O enheter Måste peka på (ange adress) med et register 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 2019-02-04 9 TSEA28 Datorteknik Y (och U), föreläsning 5, Kent Palmkvist 2019-02-04 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 2019-02-04 10 TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2019-02-04 12 Exempel Parallellportsstyrning, Atmel Exempel från Atmel SAM3X (arduino 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 55 sidor i dokumentationen (Tiva TM4C123GH6PM Microcontroller Data Sheet) 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 Tita gärna på lab1.asm och funktionerna initgpiob respektive initgpiof

TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2019-02-04 13 TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2019-02-04 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 2019-02-04 14 TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2019-02-04 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 vilket avbryter aktuell aktivitet (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 2019-02-04 17 TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2019-02-04 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 2019-02-04 18 TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2019-02-04 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_UARTDR inte töms innan nästa tecken från I/O så tappas tecken bort Spara inkommande tecken (finns i UART0_UARTDR) i en buffert i minnet Subrutin för at spara värde i buffert Variabel buffpos pekar på nästa lediga plats i buffert Subrutinen kontrollerar om nyt tecken finns, och i så fall placera det på lediga platsen i bufferten och uppdatera buffpos till nästa lediga plats. buffert buffpos UART0_UARTDR 'h' 'e' Tecken från yttre enhet (I/O) Exempel serieport eller datornät UART0_UARTFR 0x65 0x6A 0x20 buffert+4 Bit 4 = 0 om nytt tecken 'j' ' '

TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2019-02-04 21 TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2019-02-04 23 Exempel motivation till avbrot Subrutin för at spara värde i buffert savechar push {r0,r1,r2} ; Kommer använda registren mov r1,#(uart0_uartfr & 0xffff) ; Peka på movt r1,#(uart0_uartfr >> 16) ; statusregister buffert ldr r2,[r1] ; Hämta status ands r2,r2,#0x10 ; Finns tecken? bne skipcopy ; nej (bit 4= 1), hoppa ur mov r1,#(uart0_uartdr & 0xffff) ; peka på movt r1,#(uart0_uartdr >> 16) ; dataregistret ldr r2,[r1] ; läs tecken buffpos buffert+4 mov r1,#(buffpos & 0xffff) ; peka på variabeln movt r1,#(buffpos >> 16) ; buffpos UART0_UARTDR ldr r0,[r1] ; hämta värdet i buffpos strb r2,[r0],#1 ; spara tecken i buffert, öka r0 str r0,[r1] ; öka adress i buffpos Tecken från yttre enhet (I/O) skipcopy pop {r0, r1, r2} ; återställ register Exempel serieport eller datornät UART0_UARTFR 0x65 0x6A 0x20 Bit 4 = 0 om nytt tecken 'h' 'e' 'j' ' ' Exempel på avbrot, fel sät del 1 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,lr} mov r1,#0 nexturn:add r1,r1,r0 bl savechar subs r0,r0,#1 bne nexturn mov r0,r1 pop {r1,lr} savechar:push {r0,r1,r2} ; använda registren mov r1,#(uart0_uartfr & 0xffff) ; Peka på movt r1,#(uart0_uartfr >> 16) ; statusregister ldr r2,[r1] ; Hämta status ands r2,r2,#0x10 ; Finns tecken? bne skipcopy ; nej (bit 4= 1), hoppa ur mov r1,#(uart0_uartdr & 0xffff) ; peka på movt r1,#(uart0_uartdr >> 16) ; dataregistret ldr r2,[r1] ; läs tecken mov r1,#(buffpos & 0xffff) ; peka på variabeln movt r1,#(buffpos >> 16) ; buffpos ldr r0,[r1] ; hämta buffpos strb r2,[r0],#1 ; spara i buffert, öka r0 str r0,[r1] ; spara ny buffpos skipcopy: pop {r0, r1, r2} ; återställ register TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2019-02-04 22 TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2019-02-04 24 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 bl nsum... nsum: push {r1,lr} mov r1,#0 nexturn: add r1,r1,r0 bl savechar subs r0,r0,#1 bne nexturn mov r0,r1 pop {r1,lr} Kan inte placera anrop var som helst Om mellan SUB och BNE kraschar programmet savechar push {r0,r1,r2} ; Kommer använda registren mov r1,#(uart0_uartfr & 0xffff) ; Peka på movt r1,#(uart0_uartfr >> 16) ; statusregister ldr r2,[r1] ; Hämta status ands r2,r2,#0x10 ; Finns tecken? bne skipcopy ; nej (bit 4= 1), hoppa ur mov r1,#(uart0_uartdr & 0xffff) ; peka på movt r1,#(uart0_uartdr >> 16) ; dataregistret ldr r2,[r1] ; läs tecken mov r1,#(buffpos & 0xffff) ; peka på variabeln movt r1,#(buffpos >> 16) ; buffpos ldr r0,[r1] ; hämta värdet i buffpos strb r2,[r0],#1 ; spara tecken i buffert, öka r0 str r0,[r1] ; öka adress i buffpos skipcopy pop {r0, r1, r2} ; återställ register 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,lr} mov r1,#0 nexturn: add r1,r1,r0 bl savechar subs r0,r0,#1 bne nexturn mov r0,r1 pop {r1,lr} savechar: push {r0,r1,r2} mov r1,#(uart0_uartfr & 0xffff) movt r1,#(uart0_uartfr >>16) ldr r2,[r1] ands r2,r2,#0x10 bne skipcopy mov r1,#(uart0_uartdr & 0xffff) movt r1,#(uart0_uartdr >> 16) ldr r2,[r1] mov r1,#(buffpos & 0xffff) movt r1,#(buffpos >> 16) 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 2019-02-04 25 TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2019-02-04 27 Exempel på avbrot, rät sät Avbrot på ARM Cortex-M4 (Darma) 0000B8 savechar Se till at även spara alla flaggor (Z,C,N,V etc.) dvs PSR registret, när savechar startas Avbrot är mer än et automatisk subrutinanrop 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,lr} mov r1,#0 nexturn: add r1,r1,r0 bl savechar subs r0,r0,#1 bne nexturn mov r0,r1 pop {r1,lr} savechar: push {r0,r1,r2} mov r1,#(uart0_uartfr & 0xffff) movt r1,#(uart0_uartfr >>16) ldr r2,[r1] ands r2,r2,#0x10 bne skipcopy mov r1,#(uart0_uartdr & 0xffff) movt r1,#(uart0_uartdr >> 16) ldr r2,[r1] mov r1,#(buffpos & 0xffff) movt r1,#(buffpos >> 16) ldr r0,[r1] strb r2,[r0],#1 str r0,[r1] skipcopy: pop {r0, r1, r2} 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 TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2019-02-04 26 TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2019-02-04 28 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} ; OBS, inte mov pc,lr

TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2019-02-04 29 TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2019-02-04 31 Oväntad detalj: 8-byte alignment av stack Flera avbrotsorsaker Vid avbrot läggs alltid första registret på en adress jämnt delbar med 8 Kan se ut som extra värde lagts på stacken Bit 9 i PSR säts om extra värde lagts på stacken PSR placeras också på stacken Måste kontrolleras för at veta hur stacken ser ut 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 2019-02-04 30 TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2019-02-04 32 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 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 2019-02-04 33 TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2019-02-04 35 Flera avbrotsnivåer Cortex-M4 (Darma) har flera avbrotsprioriteter Sköts av en speciell enhet, Nested Vectored Interrupt Controller (NVIC) Viktigaste: Reset (prioritet -3) NMI (prioritet -2), speciell avbrotssignal Hard fault (prioritet -1), t ex om adress till avbrotvektor inte kan läsas Prioritet 0-7: avbrotsprioritet som kan väljas i NVIC Prioritet 0: Högst avbrotsprioritet Prioritet 7: Lägst avbrotsprioritet Avbrot med högre prioritet (lägre nummer) kan avbryta lägre prioriterat avbrot (högre nummer) 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. TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2019-02-04 34 TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2019-02-04 36 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 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

TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2019-02-04 37 TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2019-02-04 39 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 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 TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2019-02-04 38 TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2019-02-04 40 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 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

TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2019-02-04 41 TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2019-02-04 43 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 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: mov r1,#(bufferpekare & 0xffff) ; konstant bufferpekare adress movt r1,#(bufferpekare >> 16) add r2,r1,#4 ; konstant buffer_start adress direkt efter pekaren 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 TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2019-02-04 42 TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2019-02-04 44 Exempel, behov maska bort avbrot bufferpekare bufferpekare Exempel, behov maska bort avbrot, forts. 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: mov r0,#(bufferpekare & 0xffff) movt r0,#(bufferpekare >> 16) ldr r1,[r0] ; hämta aktuell ledig plats mov r2,#(buffer_end_adr & 0xffff) movt r2,#(buffer_end_adr >> 16) cmp r2,r1 ; fyllt buffert? beq buffer_full ; Ja, skippa mov r2,#(uart0_dr & 0xffff) ; adress till I/O movt r2,#(uart0_dr >> 16) ; för 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: ; återhopp från avbrott buffer_start buffer_end 0x65 0x6A 0x20 0x6f 0x70 0x70 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 eller förstör näst senaste Kopia i register buffered_getkey: mov r1,#(bufferpekare & 0xffff) ; konstant bufferpekare adress movt r1,#(bufferpekare >> 16) add r2,r1,#4 ; konstant buffer_start adress direkt efter pekaren 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: buffer_start buffer_end 0x65 0x6A 0x20 0x6f 0x70 0x70

TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2019-02-04 45 TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2019-02-04 47 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 mov r1,#(bufferpekare & 0xffff) ; konstant bufferpekare adress movt r1,#(bufferpekare >> 16) add r2,r1,#4 ; konstant buffer_start adress direkt efter peka 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 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 (göra gammal utrustning kompatibel med ny programvara). TSEA28 Datorteknik Y (och U), föreläsning 6, Kent Palmkvist 2019-02-04 46 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 inom få instruktioner) Om möjligt skriv program så strömsparfunktioner kan användas Stänga av programmet, vänta på interrupt www.liu.se