Avbrott (interrupt) i mikroprocessorer: definition och funktion
Ett avbrott är när en mikroprocessor gör något som den inte har fått order om att göra på grund av saker som händer utanför det som programmet ska göra. Avbrott sker oftast för att processorn får en signal från hårdvara, men de kan också komma från programvara som körs tillsammans med programmet. Bland de många saker som kan orsaka avbrott är att man trycker på tangenter på ett tangentbord, att den inbyggda timern går igång, att en dataöverföring äger rum eller någon annan händelse som kräver en åtgärd från processorn på en gång. Avbrott kan ske när som helst när processorn kör ett program, oavsett var i programmets källkod det sker.
Vad är ett avbrott och varför används det?
Ett avbrott (interrupt) är ett sätt för hårdvara eller mjukvara att informera processorn om att något kräver omedelbar uppmärksamhet. Istället för att processorn ständigt kontrollerar alla enheter (polling) så kan enheter meddela processorn när de behöver service, vilket sparar CPU-tid och ger snabbare responstid.
Typer av avbrott
- Hårdvaruavbrott – kommer från externa enheter (t.ex. tangentbord, nätverkskort, timrar, ADC).
- Mjukvaruavbrott – genereras av programvara, till exempel systemanrop eller exceptions (t.ex. division med noll).
- Maskerbara avbrott – kan blockeras eller maskeras av programvara så att vissa avbrott tillfälligt ignoreras.
- Icke-maskerbara avbrott (NMI) – kritiska avbrott som inte kan stängas av, används för allvarliga fel.
- Synkrona avbrott – inträffar som ett direkt resultat av instruktioner (t.ex. en felsituation), ofta kallade exceptions.
- Asynkrona avbrott – inträffar oberoende av den aktuella instruktionen, t.ex. externa signaler.
Hur hanteras ett avbrott?
- Registrera och prioritera: När ett avbrott inträffar kontrollerar processorn vilken typ det är och vilken prioritet det har.
- Spara tillstånd: Processorn sparar vanligtvis programräknare (PC), statusregister och andra nödvändiga register i stacken så att det normala programmet kan återupptas senare.
- Hoppa till avbrottsrutin (ISR): Processorn utför en särskild rutin, ofta kallad Interrupt Service Routine eller avbrottshanterare, som är ansvarig för att hantera händelsen.
- Återställning: När avbrottsrutinen är klar återställer processorn det sparade tillståndet och återupptar huvudprogrammet (ofta via en speciell instruktion som IRET/RETI).
Viktiga mekanismer och begrepp
- Avbrottstabell (interrupt vector table): En tabell som innehåller pekare till avbrottsrutiner för olika avbrottskällor.
- Prioritering och nästling: System kan tillåta att högre prioriterade avbrott avbryter en redan pågående avbrottsrutin (nästling). Detta kräver noggrann hantering av sparat tillstånd.
- Maskering/avaktivering: Programvara kan tillfälligt inaktivera vissa avbrott under kritiska sektioner för att undvika inkonsekventa tillstånd.
- Edge vs level–triggade: Edge-triggade avbrott reagerar på förändring (t.ex. stigande flank), level-triggade reagerar medan en signal hålls på en viss nivå. Val av läge påverkar hur avbrott debounceras och delas.
- Delade avbrottslinjer: På vissa system delar flera enheter samma fysiska avbrottslinje. Avbrottsrutinen måste då avgöra vilken enhet som utlöste avbrottet.
Praktiska exempel
- Tangenter på ett tangentbord genererar avbrott så att systemet kan läsa tangentryckningar utan ständig polling.
- En inbyggd timer (timern) skickar regelbundna avbrott för att skapa klockslagen i operativsystemet eller för tidskritiska uppgifter.
- I/O-enheter (seriell port, nätverk) använder avbrott för att meddela när data är klar att läsas eller skrivas.
- Programvaruavbrott kan användas för systemanrop eller för att signalera undantag inom programmet.
Fördelar och nackdelar
- Fördelar: Snabb respons, effektivare CPU-användning jämfört med polling, bättre realtidsbeteende.
- Nackdelar: Komplexare programlogik, risk för race conditions, kan öka systemets determinismproblem om inte latens garanteras.
Programmera säkert med avbrott
- Håll ISR korta: Utför minimal arbete i avbrottsrutinen — sätt flaggor eller lägg uppgifter i köer och bearbeta dem i huvudprogrammet eller en separat tråd.
- Undvik blockerande operationer: Anropa inte funktioner som kan blockera (t.ex. väntan på I/O eller lås) inuti ISR.
- Synkronisering: Använd atomiska operationer, volatile-variabler eller andra synkroniseringsmekanismer när delad data uppdateras av både ISR och huvudprogram.
- Rensning av avbrottsflagga: Kontrollera och rensa hårdvarans avbrottsflagga korrekt för att förhindra upprepade avbrott.
Sammanfattning
Avbrott är en central mekanism i mikroprocessorer och inbyggda system för att hantera externa och interna händelser effektivt. Genom att spara tillstånd, hoppa till en avbrottsrutin och sedan återgå kan processorn reagera snabbt utan onödig CPU-användning. Rätt design av avbrottshantering — inklusive prioritering, maskering och korta ISR — är viktig för stabilitet och prestanda i både realtids- och allmänna system.

Det här diagrammet visar vad som händer när en interrupt anropas
Hur avbrott fungerar
Ett hårdvaru- eller programvarutillfälle som kräver ett avbrott (så kallad avbrottsbegäran, IRQ) hanteras av en "avbrottshanterare" eller "avbrottsservicerutin" (ISR) i processorn. Den lägger det som den gör för tillfället på en stapel och följer sedan vissa instruktioner för att utföra en viss uppgift för systemets räkning, som inte behöver vara en del av det program som den utför. När ISR:n är klar med att följa instruktionerna tar den tillbaka det den lagt på stacken och fortsätter med det den gjorde innan avbrottet inträffade.
Många avbrottskontrollanter i dagens processorer använder en avbrottsvektor för att sortera avbrott bland annat utifrån varifrån de kommer. Vektorn innehåller vanligtvis den kod som måste köras när avbrottet inträffar. ISR:er är i allmänhet ansvariga för att hantera, eller "serva", avbrottet, tillsammans med att hålla sig själv i funktion.
Användning av avbrott
- Utlösa uppgifter med jämna mellanrum
- Service av en extern enhet som kan ske när som helst.
- Ta bort behovet av synkrona omröstningar
- Att utlösa en åtgärd från ett operativsystem (OS).
Frågor och svar
F: Vad är ett avbrott?
S: Ett avbrott är en åtgärd som vidtas av en mikroprocessor och som inte är en del av det program som körs på grund av externa händelser.
F: Vad är det som gör att avbrott oftast inträffar i en processor?
S: Avbrott inträffar oftast i en processor på grund av att den tar emot signaler från hårdvara.
F: Kan avbrott orsakas av programvara?
S: Ja, avbrott kan också orsakas av programvara som körs parallellt med det program som exekveras.
F: Ge några exempel på händelser som kan orsaka ett avbrott.
S: Exempel på händelser som kan orsaka ett avbrott är tangenttryckningar på ett tangentbord, en timer som startar och dataöverföringar som äger rum.
F: Är ett avbrott beroende av var programmet körs?
S: Nej, avbrott kan inträffa när som helst under programkörningen, oavsett var i källkoden programmet befinner sig.
F: Är ett avbrott en önskvärd händelse för en mikroprocessor?
S: Avbrott är vanligtvis oönskade händelser för en mikroprocessor eftersom de stör programkörningen och kräver omedelbar uppmärksamhet.
F: Hur reagerar en mikroprocessor på ett avbrott?
S: En mikroprocessor avbryter tillfälligt det program som körs och kör en avbrottsrutin (ISR) för att hantera avbrottet innan den återgår till det program som körs.