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

Relevanta dokument
Svar till Övning3 Datorteknik, HH vt12 Avbrott och timers

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

Maskinorienterad programmering

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

Maskinorienterad programmering

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

Maskinorienterad programmering

Programmering av inbyggda system

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

Datorsystemteknik Föreläsning 7DAVA14

Institutionen för elektro- och informationsteknologi, LTH

Polling (cyklisk avfrågning) Avbrott

Laboration 2 i Datorteknik- Assemblerprogrammering II

F8: Undantagshantering

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

Digital- och datorteknik

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

Lösningar till tentamen i EIT070 Datorteknik

TSEA28 Datorteknik Y (och U)

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

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

3. Mikroprogrammering II

Tentamen PC-teknik 5 p

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

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)

Föreläsningsanteckningar 3. Mikroprogrammering II

Övning2 Datorteknik, HH vt12 - Programmering

Lösningar till tentamen i EIT070 Datorteknik

Institutionen för elektro- och informationsteknologi, LTH

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

Undantag, avbrott. Avsnitt 7. Undantag, avbrott

4 grundregler. Minneshantering. Problemet. Windows minkrav

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

Datorteknik ERIK LARSSON

TSEA28 Datorteknik Y (och U)

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

Föreläsning 4 IS1300 Inbyggda system

Lösningar till tentamen i EIT070 Datorteknik

Digital- och datorteknik

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

TSEA28 Datorteknik Y (och U)

Föreläsningsanteckningar till Konstruktionsmetoder

Digitala System: Datorteknik ERIK LARSSON

Övningsuppgifter STYRNING - i Mikrodatorteknik för U2 2010

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

LABORATION. Datorteknik Y

LABORATION. Datorteknik Y

F4: Assemblerprogrammering

Datorsystem Laboration 2: Minnesmappade bussar

Avbrottshantering. Övningsuppgifter

Laboration 4: Knappstuds Drivrutiner för att eliminera störningar.

Alias 1.0 Rollbaserad inloggning

Operativsystem - input/output, skydd, virtualisering


Tentamen i EIT070 Datorteknik

Digital- och datorteknik

Datorarkitekturer med operativsystem ERIK LARSSON

Övningsuppgifter i Mikrodatorteknik 4p/5p

Hantering av hazards i pipelines

Digital- och datorteknik

Support Manual HoistLocatel Electronic Locks

Beijer Electronics AB 2000, MA00336A,

Tentamen. Datorteknik Y, TSEA28

Stack och subrutiner Programmeringskonventionen

TSEA28 Datorteknik Y (och U)

Digitalteknik och Datorarkitektur 5hp

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


Datorarkitektur I. Tentamen Lördag 10 April Ekonomikum, B:154, klockan 09:00 14:00. Följande gäller: Skrivningstid: Fråga

Tentamen i Digitala system - EDI610 15hp varav denna tentamen 4,5hp

Det finns en handledning till kortet på hemsidan. AVR STK500.

Programexempel för FLEX

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

Digitala projekt rapport

IndraDrive Open-loop. Styrning av asynkronmotor över Profibus. Version 1

2.45GHz CF Card Reader User Manual. Version /09/15

Får endast utföras av behörig personal. May only be carried out by authorized electrician

Viktig information för transmittrar med option /A1 Gold-Plated Diaphragm

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

Mål. Datorteknik. Innehåll. Innehåll (forts) Hur ser ett program ut? Hur skapas maskinkoden?

Utkast. Programmering. Signals. Olika typer av program. Sommarkurs Avbrott i mjukvara.

Operativsystem Lektion 1. Lärare. Schema. Kurssajten Finns på adressen. Jan Erik Moström. Set Norman

Datormodell. Datorns uppgifter -Utföra program (instruktioner) Göra beräkningar på data Flytta data Interagera med omvärlden

TSEA28 Datorteknik Y (och U)

Quick Start Guide Snabbguide

SVAR TILL TENTAMEN I DATORSYSTEM, VT2013

TSEA28 Datorteknik Y (och U)

PNSPO! Adressering i Omrons PLC. 14 mars 2012 OMRON Corporation

CPU. Carry/Borrow IX. Programräknare

Datorteknik. Föreläsning 3. Assembler, stack och subrutiner, programmeringskonventionen. Institutionen för elektro- och informationsteknologi, LTH

Institutionen för elektro- och informationsteknologi, LTH

Aktivitetsschemaläggning för flerkärninga processorer

Tentamen. Datorteknik Y, TSEA28

Datorarkitekturer med operativsystem ERIK LARSSON

Tentamen (Exempel) Datorteknik Y, TSEA28

Övning 5 ETS052 Datorkommuniktion Routing och Networking

Övning 6. Parallellport, timer

Transkript:

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

Föreläsning 7 Avbrott References: [SUM3U-complete] ATMEL AT91SAM ARM-based Flash MCU - SAM3U Series (Complete manual), 2012 [Yiu-DefGuide] Joseph Yiu, The definitive guide to the ARM cortex- M3, second edition, Newnes, 2010 2

Avbrott Polling Läser hela tiden i en loop. Processorn är låst till detta hela tiden. Kallas ibland programstyrt I/O. Interrupt - avbrott Processorn kan göra annat och blir avbruten av en extern händelse, t ex någon skriver på ett tangentbord. Mycket effektivare. Man kan göra annat under tiden. Kräver att processorn har hårdvarustöd för detta. 3

Avbrott Grundprinciper Interrupt, exception och undantag är andra namn Något som avbryter processorns vanliga programkörning (instruktionscykeln) och utför automatiskt en förutbestämd undantagssekvens. Delar av denna sker automatiskt, andra delar får man skriva kod för själv Källorna till avbrott kan vara olika Det finns nästan alltid någon mekanism i datorn för hantering av avbrottet. Vår ARM har t.o.m. en speciell enhet för det (NVIC). Det enda sätt vi externt direkt kan påverka processorn, t ex reset, NMI, avbrott via portar eller I/O pinnar. Två huvudtyper, interna och externa Styr om programflödet (PC) på extern begäran. Avbryter den kod som körs 4

Avbrott Interna - Externa Interna avbrott genereras av processorn själv vid olika sorters fel. Dessa används för att man själv ska kunna ta hand om de eventuella fel som kan uppstå. Ex) Usage fault (tex okänd instruktion), Memory Management Error (Minneshanterings fel, tex kan inte hämta data), Division by Zero (division med noll) Externa avbrott genereras utifrån processorn. Genom att påverka vissa pinnar på kapseln. Hit räknas även de som bygger på interna timers och liknande. Ex) Timer, reset, NMI-pinne, portar 5

Sidonotering Usage fault Om vi försöker växla till ARM mode i en Cortex M3 så genereras ett usage fault. Man kan växla mode genom ett hopp med BX instruktionen där bit 0 i registret avgör mode (ARM=0; Thumb=1) hopp via MOV, LDR, POP (med R15/PC som destination) värdet på bit-0 i adresser i avbrottsvektorn Men eftersom Cortex M3 alltid är i Thumb-mode så måste bit-0 alltid vara 1 när PC laddas Detta tas oftast hand om av assemblern, men kan vara förvirrande när man ser på koden som genererats. 6

Externa avbrott - Användningsområde Används för att Effektivisera normal I/O-hantering, eg polling. Slippa ha kod för att läsa av I/O överallt, men ändå kunna läsa av externa händelser. ex) Avläsning av musen i en PC Utföra periodiska händelser, bli avbruten med j ämna mellanrum av en sk Timer. ex) Byta mellan program vid multitaskande operativsystem Multitasking = Flera program (task) kör samtidigt. Ej möjligt utan avbrott Avbryta kod pga externa händelser ex) Larmknapp, Reset 7

Avbrottsmekanism I sista delen av instruktionscykeln kontrolleras om avbrott skett. Det betyder att den pågående instruktionen alltid slutförs innan avbrottet servas! Antag avbrott har genererats. Följande händer då: 1. Statusregister sparas. PC och eventuellt några andra register sparas. [automatiskt] 2. Ett hopp sker till ett förutbestämt ställe. Beror på avbrottstypen. [automatiskt] 3. Slå av avbrott med samma eller lägre prioritet, så att inte avbrottsrutinen avbryts av oviktiga saker 4. Utför avbrottskod 5. Återgång till normal programkörning. Ofta med speciell instruktion. Detta återställer sparade PC och statusregister och eventuella andra register 8

Varför spara både PC och Statusregister? Man kan se själva avbrottskoden som en subrutin som körs på externt anrop, t ex då man trycker på resetknapp. Dvs man kan i själva koden INTE veta när avbrott kommer.!cmp R1, #4!!BEQ TEST! Antag att avbrott kommer här! Avbrottet kommer mitt i då statusflaggorna är satta pga jämförelsen. Skulle då avbrottskoden ställa om flaggorna och sedan gå tillbaka skulle man kunna få effekten att hoppet inte tas även om R1 =4! 9

Hur vet man vilket avbrott som skett? Två principer finns: Autovektoriserade) Vid avbrott hoppar man automatiskt till olika adresser pga källan till avbrottet. Sköts hårdvarumässigt. Det finns en färdig tabell i minnet på ett förutbestämt ställe. Ofta i början på minnet. Icke vektoriserade) Vid avbrott hoppar man alltid till samma plats. Man har sedan ett speciellt register som håller reda på vilket avbrott som skett. Man får själv skriva kod för att läsa av registret samt utför hopp till olika kod. Denna kod kallas en handler 10

Terminologi vid avbrott Maskbara (avbrott som går att slå på/av) vs. Icke maskbara avbrott, NMI - Non Maskable Interrupt, (sådana man inte kan slå av) ex) Maskbara: De flesta externa, timers Icke maskbara avbrott: Internt genererade. Ex) Reset, Illegal Instruction Prioritering) Ibland har olika avbrott olika prioritet om de sker samtidigt. Detta styrs hårdvarumässigt. Ibland kan även vissa högre prioriterade avbrott avbryta körning av sådana med lägre prioritet. 11

Exempel polling Anta att huvudprogrammet består av tre moment. Vid knapptryck ska larmkod utföras. LARM anropas från huvudprogram. Huvudprogrammet måste läsa av knappen hela tiden för att inte riskera att missa någon tryckning. Avläsning av knapp sker med mjukvara. Komplex kod. 12

Exempel avbrott Anta huvudprogrammet består av tre moment. Vid knapptryck ska larmkod utföras. LARM anropas med avbrott. Huvudprogrammet behöver inte bekymra sig över inläsning. Så fort knapp trycks ned genereras ett avbrott och LARM anropas automatiskt. Avläsning av knapp sker med hårdvara. Enklare kod 13

Liknelse: Avbrott - En bartender! Bartendem gör vanliga sysslor då ingen beställer något (vanlig programköming). Alternativet hade varit att han frågat varje person efter varandra om de velat beställa, sen börjar om på person ett. Ineffektivt! Polling Då någon ropar (beställer) en viss drink/öl utför bartendern en beställning direkt på vad man frågar efter. Autovektoriserat avbrott Ropar man bara "Hej!" avbryter man också bartendern, men han måste då fråga vad man vill beställa. Icke vektoriserat avbrott Då t ex ölen tar slut måste en tunna bytas och man avbryter pågående beställning för detta (högre prioritet). Prioriterade avbrott Bartendern kan välja att strunta i vissa avbrott (kunder), medan andra (t ex chefen) inte går att ignorera. Maskbara avbrott 14

ARM - Programmers model AVBROTT Anta att det vanliga programmet körs 1. Avbrott kommer 2. Avbrottskod körs (handler). Avgör vilken kod som ska köras härnäst 3. Återlämna kontroll till huvudprogram 15

Avbrott Delade resurser - problem! Vad är en delad resurs? - register, hårdvara som både avbrottskod och huvudprogram har tillgång till! Ex)! CMP R7,#0! Avbrottet råkar komma här! BEQ TEST!!; inuti TEST måste R7 vara noll!!!!; annars blir det fel!! Avbrott:! LDR R7,=0x1!!; R1 är den delade resursen!!!!!; (delas av avbrott och huvudprogram)! Då avbrottet kom vid en olämplig tidpunkt 1-ställdes R7 innan man hoppar till TEST. Tanken var att man inte skulle hoppa till TEST om inte R7 var 0. Ett svårhittat fel! 16

Avbrott Delade resurser - lösning! Slå av avbrottet vid delad resurs! Ex)! <slå av avbrott>! CMP R7,#0! BEQ TEST!!! <tillåt avbrott>! Skyddad mot avbrott här Ingen risk att man hamnar i TEST och R7=1 Avbrott:! LDR R7,=0x1 Slutsats: Använd helst inte delade resurser och avbrott. Leder till svåra problem. Använd ej globala variabler som delas av avbrottsrutin och huvudprogram. Måste man ha detta, tänk på att slå av avbrott i huvudprogram då den delade resursen används!! 17

ARM - Avbrottskällor 1-15 Systemavbrott 16-255 Yttre avbrott 18

ARM pratar om 4 klasser av avbrott Reset Fault Hard fault Memory management fault Bus fault Interrupt NMI Interrupt (IRQ) Externa avbrott SysTick PendSV För OS stöd i samband med SVcall Supervisor Call SVcall För att stödja OS 19

ARM Cortex M3 Systemavbrott [Yiu-DefGuide] 20

ARM SAM3U Yttre Avbrott [SUM3U-complete] Totalt 30 olika yttre enheter kan ge avbrott 21

ARM Cortex M3 NVIC The Cortex-M3 processor includes an interrupt controller called the Nested Vectored Interrupt Controller (NVIC). It is closely coupled to the processor core and provides a number of features as follows: Nested interrupt support Vectored interrupt support Dynamic priority changes support Reduction of interrupt latency Interrupt masking 22

ARM Cortex M3 NVIC The Nested Vectored Interrupt Controller (NVIC) supports: 1 to 30 interrupts on SAM3U (240 in general) A programmable priority level in SAM3U is 0-15 for each interrupt (0-255 in general). A higher level corresponds to a lower priority, so level 0 is the highest interrupt priority. Level detection of interrupt signals. Dynamic reprioritization of interrupts. Grouping of priority values into group priority and subpriority fields. Interrupt tail-chaining. 23

Vad gör en ARM Cortex M3 vid avbrott? When an exception takes place, a number of things happen, such as Stacking (pushing eight registers contents to stack) Vector fetch (reading the exception handler starting address from the vector table) Update of the stack pointer, link register (LR), and program counter (PC) 24

ARM Cortex M3 Register på stacken vid avbrott When an exception takes place, the registers R0 R3, R12, LR, PC, and Program Status (PSR) are pushed to the stack. 25

Adressen till avbrottsrutinen hämtas samtidigt Although the data bus is busy stacking the registers, the instruction bus carries out another important task of the interrupt sequence: It fetches the exception vector (the starting address of the exception handler) from the vector table. Since the stacking and vector fetch are performed on separate bus interfaces, they can be carried out at the same time. 26

Register Updates On entry of the exception handler, a number of registers will be updated, as follows: SP: The SP (either the MSP or the PSP) will be updated to the new location during stacking. During execution of the interrupt service routine, the MSP will be used if the stack is accessed. PSR: The IPSR (the lowest part of the PSR) will be updated to the new exception number. PC: This will change to the vector handler as the vector fetch completes and starts fetching instructions from the exception vector. LR: The LR will be updated to a special value called EXC_RETURN. This special value drives the interrupt return operation. The last 4 bits of the LR is used to provide exception return information. A number of other NVIC registers will also be updated. For example, the pending status of the exception will be cleared and the active bit of the exception will be set. 27

Återhopp efter avbrott 28

Slå på avbrott Cortex M3 Avbrotten styrs av: Interrupt Mask registers (PRIMASK, FAULTMASK, and BASEPRI) Vid avbrott ger Interrupt Program Status register (IPSR) information om vilket avbrott som kommit. 29

Cortex-M3 Interrupt Mask Registers The PRIMASK and BASEPRI registers are useful for temporarily disabling interrupts in timing-critical tasks. An OS could use FAULTMASK to temporarily disable fault handling when a task has crashed. In this scenario, a number of different faults might be taking place when a task crashes. Once the core starts cleaning up, it might not want to be interrupted by other faults caused by the crashed process. Therefore, the FAULTMASK gives the OS kernel time to deal with fault conditions. MRS r0, BASEPRI ; Read BASEPRI register into R0! MRS r0, PRIMASK ; Read PRIMASK register into R0! MRS r0, FAULTMASK ; Read FAULTMASK register into R0! MSR BASEPRI, r0 ; Write R0 into BASEPRI register! MSR PRIMASK, r0 ; Write R0 into PRIMASK register! MSR FAULTMASK, r0 ; Write R0 into FAULTMASK register! 30

Slå på avbrott NVIC Externt avbrott tillåts genom att ettställa motsvarande bit i SETENA Interrrupt set enable register och slås av genom CLRENA Interrrupt clear enable register i NVIC. Väntande avbrott Om ett avbrott väntar på att få köras så ettställs motsvarande bit i Pending registret som kan läsas via SETPEND Interrupt Set-pending Registers (men även CLRPEND). Om ett avbrott är aktiverat syns detta syns detta genom i ACTIVE Interrupt Active Bit Registers. Innan man slår på ett avbrott är det en god sed att nollställa alla pending avbrott. Detta görs genom att skriva en etta till CLRPEND Interrupt Clear Pending Register. 31

Slå på avbrott Periferienhet Periferienheter kan oftast generera avbrott, men de måste slås på separat. PIO Tex så slår man på PIO avbrott via PIO_IER (Interrupt Enable Register) och PIO_IDR (Interrupt Disable Register) för varje pinne på porten, kan läsas via maskreg. (PIO_IMR) Dessutom måste PIO:n konfigureras för när den ska reagera på yttre händelser med ett avbrott (flank eller nivå) När en ingång upptäcker en avbrottshändelse (flank eller nivå) på en I/O pinne så sätts motsvarande bit i PIO_ISR (Interrupt Status Register). Om sedan avbrott är tillåten för denna biten (i IMR) så generas ett processoravbrott fär den PIO enhet som avses. 32

Slå på avbrott Periferienhet - Systick SYSTICK SYSTICK Control and Status Register 33

Mer om Systick Det primära målet för systemtimern (SysTick) är att generera periodiska avbrott. Detta är oftast används för att tillhandahålla tidsbasen i ett operativsystem. SysTick kan välja sin klockakälla. (I labben sätter den till Master Clock) SysTick har en 24-bitars räknare. Räknaren kallas Current Value Register (CVR) Startvärdet att ladda in till CVR kallas "reload value" och är lagrat i Reload Value Register (RVR). Varje gång CVR räknaren når 0, genereras ett avbrott och värdet i RVR laddas in till CVR. 34

Steg att konfigurera avbrott Att konfigurera en avbrottskälla kräver sex steg: 1. Implementera en avbrottshanterare 2. Lägg till avbrottsrutin i avbrottsvektorn 3. Avaktivera avbrott ifall det var aktiverat 4. Rensa alla utestående avbrott 5. Konfigurera avbrottsprioritet 6. Tillåt avbrott på periferienhetsnivå 7. Tillåt avbrott på NVIC nivå 8. Tillåt avbrott på processornivå 35

Dagens Föreläsning: Avbrott (Exception, Interrupt) Avbrott har många fördelar gentemot Pulling Avbrott kan vara interna eller externa Autovektorisering eller Icke vektoriserade Användning av avbrott Vad sker vid avbrott och hur man återgår Maskning av avbrott Prioritering av avbrott Hur man slår på respektive stänger av avbrott På CPU nivå, NVIC nivå, Periferienhet nivå (tex PIO, SYSTICK) 36