background image

1

Podstawy techniki 

mikroprocesorowej 

ETEW006

Przerwania

Andrzej Stępień 

Katedra Metrologii Elektronicznej i Fotonicznej

Żądanie obsługi  ─

  r

eakcja  procesora

(Polling versus Interrupts)

Programowa reakcja procesora

- wykonywanie  stałych p

ę

tli 

testuj

ą

cych, cyklicznych  procedur testuj

ą

cych (

Polling

):  

znaczne obci

ąż

enie procesora, spadek efektywnego wykorzystania 

czasu pracy procesora 

brak natychmiastowej reakcji procesora wskutek zdeterminowanej 
przez program kolejno

ś

ci wykonywanych procedur testuj

ą

cych

Sprz

ę

towa reakcja procesora

- wykorzystanie systemu przerwa

ń

 

(

Interrupt

)

brak obci

ąż

enia procesora je

ś

li brak 

żą

dania obsługi przerwania 

(Interrupt Request) 

natychmiastowa reakcja procesora po spełnieniu pewnych 
warunków, dodatkowych  warunków; rozpocz

ę

cie wykonywania 

procedury obsługi przerwania (podobie

ń

stwo do wywołania 

podprogramu)

Obsługa  przerwań

obsługa przerwa

ń

 

(interrupt handler), procedury obsługi przerwa

ń

 

(Interrupt Service Routine) jest podprogramem wywoływanym lub 
przyj

ę

tym 

żą

daniem pochodz

ą

cym od: 

systemu operacyjnego (operating system software interrupt)

układów peryferyjnych mikrokontrolera (device driver interrupt) 

obiektów (sygnałów) zewn

ę

trznych  (external interrupt)

obsługa przerwa

ń

posiada wiele funkcji, które ró

ż

ni

ą

 si

ę

 w zale

ż

no

ś

ci 

od przyczyny (

ź

ródła) przerwania i szybko

ś

ci, przy której obsługa 

przerwa

ń

 ko

ń

czy swoje zadanie

Przerwanie

(Interrupt)  

[1#2]

doko

ń

czenie wykonywanej przez procesor instrukcji (przerwanie

zło

ż

onej instrukcji

(load-multiple or store-multiple)

w Cortex-M)

zawieszenie (przerwanie) wykonywanego programu, najcz

ęś

ciej po

spełnieniu dodatkowych warunków, zapami

ę

tanie wszystkich danych

niezb

ę

dnych do kontynuowania zawieszonego programu

wykonanie podprogramu (Interrupt Service Routine) obsługi
zdarzenia (sygnału)

żą

daj

ą

cego (wymagaj

ą

cego) obsługi

kontynuacja zawieszonego programu

program

ISR

żą

danie przerwania

zachowanie

stanu procesora

odtworzenie

stanu procesora

t

jednopoziomowa  

obsługa  

przerwa

ń

Przerwanie

(Interrupt)  

[2#2]

program

ISR

żą

danie przerwania

zachowanie

stanu procesora

odtworzenie

stanu procesora

t

Stan procesora

:

rejestry robocze (R0, R1, … )

rejestr statusowy (PSW, ... )

licznik rozkazów (PC zawiera adres instrukcji, która byłaby wykonana, 
gdyby nie wyst

ą

piło przerwanie; problem przetwarzania potokowego)

inne rejestry wa

ż

ne dla wykonywanego  programu

jednopoziomowa  

obsługa  

przerwa

ń

USB 
Przerwaniowy transfer danych 

(Polling)

stosowany przy transmisji danych do/z urz

ą

dze

ń

 współpracuj

ą

cych z 

człowiekiem (human-perceptible)

nadawanie/odbiór danych do/z urz

ą

dze

ń

 wymagaj

ą

cych periodycznej 

obsługi

gwarancja minimalnego czasu mi

ę

dzy transmisjami, np. 1 ms w trybie 

szybkim (Full Speed transmission)

w przypadku bł

ę

dów transmisji, powtórzona transmisja w nast

ę

pnym 

wyznaczonym  okresie

background image

2

Typy  przerwań

sprz

ę

towe zerowanie procesora

(

Hardware Reset

– rozpocz

ę

cie 

wykonywania procedury bez warunków  wst

ę

pnych (

zawsze

), zmiana 

warto

ś

ci niektórych rejestrów

przerwanie

sprz

ę

towe 

niemaskowalne

(

N

on -

M

askable 

I

nterrupt) 

rozpocz

ę

cie wykonywania  obsługi przerwania bez warunków  wst

ę

pnych 

(

zawsze

)

przerwanie

sprz

ę

towe 

maskowalne

(

M

askable

I

nterrupt) 

rozpocz

ę

cie wykonywania  procedury obsługi przerwania zale

ż

nie  od 

spełnienia okre

ś

lonych 

warunków wst

ę

pnych

; programowe blokowanie  / 

odblokowanie  obsługi przerwa

ń

 (Enable / Disable Interrupt)

przerwanie programowe

(

S

oft

W

are 

I

nterrupt)

programowe wywołanie obsługi przerwania

operacja pułapki

(

Trap

), rodzaj wyj

ą

tku

inicjowana pojawieniem si

ę

 bł

ę

du, np. próba dzielenia przez zero

przerwanie fałszywe 

(

spurious

, pozorne, nieprawdziwe, fałszywe, bł

ę

dne, 

nieoczekiwane)  efekt zakłóce

ń

 lub bł

ę

dów konstrukcyjnych 

Typy  przerwań 
Zerowanie procesora 

(Hardware Reset)

sprz

ę

towe zerowanie procesora

(

Hardware Reset

– rozpocz

ę

cie 

wykonywania procedury bez warunków  wst

ę

pnych (

zawsze

), zmiana 

warto

ś

ci niektórych rejestrów

przerwanie sprz

ę

towe niemaskowalne (Non - Maskable Interrupt) rozpocz

ę

cie 

wykonywania obsługi przerwania bez warunków wst

ę

pnych (zawsze) 

przerwanie sprz

ę

towe maskowalne (Maskable Interrupt) 

rozpocz

ę

cie wykonywania procedury obsługi przerwania zale

ż

nie  od spełnienia 

okre

ś

lonych warunków wst

ę

pnych; programowe blokowanie / odblokowanie obsługi 

przerwa

ń

 (Enable / Disable Interrupt)

przerwanie programowe (SoftWare Interrupt)
programowe wywołanie obsługi przerwania

operacja pułapki (Trap), rodzaj wyj

ą

tku

inicjowana pojawieniem si

ę

 bł

ę

du, np. próba dzielenia  przez zero

przerwanie fałszywe (spurious, pozorne, nieprawdziwe,  fałszywe, bł

ę

dne, 

nieoczekiwane) efekt zakłóce

ń

 lub bł

ę

dów konstrukcyjnych 

zerowanie / ustawienie licznika rozkazów

blokada przerwa

ń

 maskowalnych

zerowanie / ustawienie rejestrów specjalnych  mikrokontrolera 

wył

ą

czenie  trybu u

ż

ytkownika (przy ró

ż

nych trybach pracy)

Typy  przerwań
Niemaskowalne  

(Non-Maskable Interrupt)

sprz

ę

towe zerowanie procesora (Hardware Reset) – rozpocz

ę

cie wykonywania 

procedury bez warunków wst

ę

pnych (zawsze), zmiana warto

ś

ci niektórych rejestrów

przerwanie

sprz

ę

towe 

niemaskowalne

(

N

on -

M

askable 

I

nterrupt) 

rozpocz

ę

cie wykonywania  obsługi przerwania bez warunków  wst

ę

pnych 

(

zawsze

)

przerwanie sprz

ę

towe maskowalne (Maskable Interrupt) 

rozpocz

ę

cie wykonywania procedury obsługi przerwania zale

ż

nie  od spełnienia 

okre

ś

lonych warunków wst

ę

pnych; programowe blokowanie / odblokowanie obsługi 

przerwa

ń

 (Enable / Disable Interrupt)

przerwanie programowe (SoftWare Interrupt)
programowe wywołanie obsługi przerwania

operacja pułapki (Trap)
inicjowana pojawieniem si

ę

 bł

ę

du, np. próba dzielenia  przez zero

przerwanie fałszywe (spurious, pozorne, nieprawdziwe,  fałszywe, bł

ę

dne)

efekt zakłóce

ń

 lub bł

ę

dów konstrukcyjnych 

stosowane przy raportowaniu krytycznych bł

ę

dów (np. bł

ę

dy działania 

chipsetów, bł

ę

dne działanie pami

ę

ci systemu, bł

ę

dy magistral)

debugowaniu (obsługa przerwania  w specjalnym trybie monitora w celu 
diagnozy systemu), 
profilowania kodu (software profiling) pod k

ą

tem 

optymalizacji cz

ęś

ci programu (zwi

ę

kszenie szybko

ś

ci wykonywania  kodu, 

zmniejszenie  zapotrzebowania  na pami

ęć

, cz

ę

sto

ś

ci wywołania  funkcji oraz 

czasów  ich wykonania) itp.

w mikrokontrolerach do sygnalizacji spadku napi

ę

cia zasilaj

ą

cego (power 

down detection, drop of voltage, ..), bł

ę

dnego działania generatora 

taktuj

ą

cego, problemów  z pami

ę

ci

ą

przerwanie, którego procesor nie mo

ż

e zignorowa

ć

 (zamaskowa

ć

)

o najwy

ż

szym  priorytecie, nie s

ą

 zagnie

ż

d

ż

one

Typy  przerwań
Maskowalne 

(Maskable Interrupt)

sprz

ę

towe zerowanie procesora (Hardware Reset) – rozpocz

ę

cie wykonywania 

procedury bez warunków wst

ę

pnych (zawsze), zmiana warto

ś

ci niektórych rejestrów

przerwanie sprz

ę

towe niemaskowalne (Non - Maskable Interrupt) rozpocz

ę

cie 

wykonywania obsługi przerwania bez warunków wst

ę

pnych (zawsze) 

przerwanie

sprz

ę

towe 

maskowalne

(

M

askable

I

nterrupt) 

rozpocz

ę

cie wykonywania  procedury obsługi przerwania zale

ż

nie  od 

spełnienia okre

ś

lonych 

warunków wst

ę

pnych

; programowe blokowanie  / 

odblokowanie  obsługi przerwa

ń

 (Enable / Disable Interrupt)

przerwanie programowe (SoftWare Interrupt)
programowe wywołanie obsługi przerwania

operacja pułapki (Trap)
inicjowana pojawieniem si

ę

 bł

ę

du, np. próba dzielenia  przez zero

przerwanie fałszywe (spurious, pozorne, nieprawdziwe,  fałszywe, bł

ę

dne) , 

nieoczekiwane efekt zakłóce

ń

 lub bł

ę

dów konstrukcyjnych 

przewa

ż

nie  blokowane/odblokowywane  (enable/disable) przez:

jeden ogólny (globalny) znacznik dla wszystkich przerwa

ń

indywidualne znaczniki dla ka

ż

dego 

ź

ródła przerwania

żą

danie przerwania mo

ż

e by

ć

 pami

ę

tane w czasie jego 

zablokowania

przerwanie przyj

ę

te (obsługiwane) po spełnieniu pewnych 

(dodatkowych) warunków  (zamaskowane)

Typy  przerwań
Programowe 

(SWI)

sprz

ę

towe zerowanie procesora (Hardware Reset) – rozpocz

ę

cie wykonywania 

procedury bez warunków wst

ę

pnych (zawsze), zmiana warto

ś

ci niektórych rejestrów

przerwanie sprz

ę

towe niemaskowalne (Non - Maskable Interrupt) rozpocz

ę

cie 

wykonywania obsługi przerwania bez warunków wst

ę

pnych (zawsze) 

przerwanie sprz

ę

towe maskowalne (Maskable Interrupt) 

rozpocz

ę

cie wykonywania procedury obsługi przerwania zale

ż

nie  od spełnienia 

okre

ś

lonych warunków wst

ę

pnych; programowe blokowanie / odblokowanie obsługi 

przerwa

ń

 (Enable / Disable Interrupt)

przerwanie programowe

(

S

oft

W

are 

I

nterrupt)

programowe wywołanie obsługi przerwania

operacja pułapki (Trap)
inicjowana pojawieniem si

ę

 bł

ę

du, np. próba dzielenia  przez zero

przerwanie fałszywe (spurious, pozorne, nieprawdziwe,  fałszywe, bł

ę

dne, 

nieoczekiwane) efekt zakłóce

ń

 lub bł

ę

dów konstrukcyjnych 

wywoływane  z kodu programu 

wykorzystywane do komunikacji z j

ą

drem systemu operacyjnego 

(firmware, BIOS, DOS, Windows, UNIX, Linux, Android, ..)
wywołania funkcji systemowych  (np. wy

ś

wietlanie  znaków, wysłanie 

znaków  ł

ą

czem szergowym, drukowanie, odczyt kodu naci

ś

ni

ę

tego 

klawisza, obsługi pami

ę

ci masowej, ..)

najcz

ęś

ciej parametry wywoływanych  funkcji s

ą

 przenoszone  przez 

rejestry ustawiane przez program wywołuj

ą

cy

Wybrane  SWI  w  x86

Nr 

Typ przerwania

Nr 

Typ przerwania

00h

Dzielenie  przez zero

19h

Gor

ą

cy restart systemu

01h

Praca krokowa

1Ah

Obsługa drukarki

02h

Przerwanie niemaskowalne

1Bh

CTRL + BREAK

03h

Pułapka (Breakpoint)

1Ch

Przerwanie zegarowe u

ż

ytkownika

04h

Nadmiar

1Dh

Tabela trybów wy

ś

wietlania

05h

Wydruk zawarto

ś

ci ekranu 

1Fh

Tablica wzorców znaków

08h

Przerwanie zegara (RTC)

20h

Zako

ń

czenie programu

09h

Przerwanie klawiatury 

21h

Funkcje MS-DOS

0Eh

Przerwanie kontrolera dysków 

22h

Zako

ń

czenie programu

10h

Obsługa monitora 

23h

CTRL + C (CTRL + BREAK)

11h

Konfiguracja komputera 

24h

ą

d krytyczny urz

ą

dzenia

12h

Rozmiar pami

ę

ci 

25h 

Czytanie sektora dyskowego

13h

Obsługa dysków 

26h

Pisanie sektora dyskowego

14h

Obsługa zł

ą

cza szeregowego 

................................................................

15h

Dodatkowe funkcje AT

2Fh

Obsługa równoczesnych procesów

16h

Obsługa klawiatury 

33h

Obsługa myszy

17h

Obsługa drukarki 

41h

Tablica parametrów 

18h

Uruchomienie BASIC-a z ROM 

46h

dysku twardego 0/1

background image

3

Typy  przerwań
Trap

sprz

ę

towe zerowanie procesora (Hardware Reset) – rozpocz

ę

cie wykonywania 

procedury bez warunków wst

ę

pnych (zawsze), zmiana warto

ś

ci niektórych rejestrów

przerwanie sprz

ę

towe niemaskowalne (Non - Maskable Interrupt) rozpocz

ę

cie 

wykonywania obsługi przerwania bez warunków wst

ę

pnych (zawsze) 

przerwanie sprz

ę

towe maskowalne (Maskable Interrupt) 

rozpocz

ę

cie wykonywania procedury obsługi przerwania zale

ż

nie  od spełnienia 

okre

ś

lonych warunków wst

ę

pnych; programowe blokowanie / odblokowanie obsługi 

przerwa

ń

 (Enable / Disable Interrupt)

przerwanie programowe (SoftWare Interrupt)
programowe wywołanie obsługi przerwania

operacja pułapki

(

Trap

), rodzaj wyj

ą

tku

inicjowana pojawieniem si

ę

 bł

ę

du, np. próba dzielenia przez zero

przerwanie fałszywe (spurious, pozorne, nieprawdziwe,  fałszywe, bł

ę

dne, 

nieoczekiwane) efekt zakłóce

ń

 lub bł

ę

dów konstrukcyjnych 

wyj

ą

tek (exception, np. systemie Linux) spowodowany  np. 

przez dzielenie przez zero lub nieprawidłowy  dost

ę

p do pami

ę

ci

sposób wywołania  procedury j

ą

dra (wywołanie  systemowe) ze 

wzgl

ę

du  na wy

ż

szy priorytet ni

ż

 kod u

ż

ytkownika

Typy  przerwań
Spurious

sprz

ę

towe zerowanie procesora (Hardware Reset) – rozpocz

ę

cie wykonywania 

procedury bez warunków wst

ę

pnych (zawsze), zmiana warto

ś

ci niektórych rejestrów

przerwanie sprz

ę

towe niemaskowalne (Non - Maskable Interrupt) rozpocz

ę

cie 

wykonywania obsługi przerwania bez warunków wst

ę

pnych (zawsze) 

przerwanie sprz

ę

towe maskowalne (Maskable Interrupt) 

rozpocz

ę

cie wykonywania procedury obsługi przerwania zale

ż

nie  od spełnienia 

okre

ś

lonych warunków wst

ę

pnych; programowe blokowanie / odblokowanie obsługi 

przerwa

ń

 (Enable / Disable Interrupt)

przerwanie programowe (SoftWare Interrupt)
programowe wywołanie obsługi przerwania

operacja pułapki (Trap), rodzaj wyj

ą

tku

inicjowana pojawieniem si

ę

 bł

ę

du, np. próba dzielenia  przez zero

przerwanie fałszywe 

(

spurious

, pozorne, nieprawdziwe, fałszywe, bł

ę

dne, 

nieoczekiwane)  – efekt zakłóce

ń

 lub bł

ę

dów konstrukcyjnych 

ARM7 wynik braku wła

ś

ciwej synchronizacji kontrolera przerwa

ń

 

(VIC)

z rdzeniem procesora 

(core) – asynchronicznej obsługi przerwa

ń

równie

ż

 efekt przetwarzania potokowego

w procesorach 

LPC2000

:

1.

kontroler przerwa

ń

 (VIC) generuje przerwanie dla rdzenia (core) 

2.

rdze

ń

 (core) zapami

ę

tuje stan 

żą

dania przerwania

3.

trwa przetwarzanie potokowe, zwykle  kilka cykli maszynowych

4.

rdze

ń

 (core) pobiera adres procedury obsługi oczekuj

ą

cego przerwania

je

ś

li znika przerwanie w trakcie przetwarzania (krok 3), generowane jest 

nieistniej

ą

ce przerwanie

UM10120.LPC2131/2/4/6/8 User manual.

NXP, Rev. 4 — 23 April 2012, p.75 - 78

AN10414. Handling of spurious interrupts in the LPC2000.

Application note. NXP, Rev. 01 — 4 January 2006

Identyfikacja  urządzenia

Programowa / sprz

ę

towa identyfikacja urz

ą

dzenia / sygnału 

zgłaszaj

ą

cego obsług

ę

/przerwanie

:

badanie 

obiegiem

realizowane  programowo w procedurach testuj

ą

cych

metoda 

ła

ń

cuchowa

:

– urz

ą

dzenia doł

ą

czone do procesora w kolejno

ś

ci wa

ż

no

ś

ci 

(pierwsze

ń

stwa) obsługi przerwania

– sygnał potwierdzenia przyj

ę

cia przerwania  jest bramkowany w 

urz

ą

dzeniu zgłaszaj

ą

cym  przerwanie, które podaje swój numer 

identyfikacyjny szyn

ą

 danych 

metoda 

wektorowa

wygenerowanie  adresu podprogramu obsługi przerwania od 
urz

ą

dzenia zgłaszaj

ą

cego  przerwanie

Adresy  procedur  obsługi  przerwań

Adres pocz

ą

tkowy procedury obsługi przerwania:

dostarczany przez urz

ą

dzenie

zewn

ę

trzne, to samo, które wywołało 

przerwanie; po akceptacji przerwania przesyłanie szyn

ą

 danych 

adresu pocz

ą

tku obsługi przerwania

tablicy wektorów przerwa

ń

(Cortex-Mx):

w tablicy wył

ą

cznie 4

N bajtów adresów przerwa

ń

 (32 bitowa szyna 

adresowa); pozycja adresu zale

ż

na od rodzaju przerwania 

stałe adresy ustalone przez producenta procesora, np. co 4 lub co 8 
bajtów (3, 0Bh, 13h itd.)

PICmicro MID-RANGE MCU FAMILY

Once in the interrupt service routine the source(s) of 
the interrupt can be determined by 

polling the 

interrupt flag bits

. Generally the interrupt flag bit(s) 

must be cleared in  software before re-enabling the 
global interrupt to avoid recursive interrupts.

When an interrupt is responded to, the 

Global 

Interrupt Enable

bit (GIE) bit is cleared to disable 

any further interrupt, the return address is pushed 
into the stack and the PC is loaded with 0004h.

GIE

Interrupt to CPU
clear GIE bit
addr = 0004h

PICmicro MID-RANGE MCU FAMILY

Microchip Technology, December 1997

Cortex-M0 

(LPC1114)

Exception  &  Interrupt  

Sources  

[1#2]

StartUp_LPC11xx.s

UM10398. LPC111x/LPC11Cxx User manual.

NXP, Rev. 12.3 — 10 June 2014, p.466

address

IRQ number

Exception

number

R

e

s

e

rv

e

d

R

e

s

e

rv

e

d

; Vector Table Mapped to Address 0 at Reset

AREA

RESET,  DATA,  READONLY

EXPORT

__Vectors

__Vectors

DCD

__initial_sp

;  

Top of Stack

0x0000 0000

DCD

Reset_Handler

;  

1

/   

Reset Handler

0x0000 0004

DCD

NMI_Handler

;  

2

–14

NMI Handler

0x0000 0008

DCD

HardFault_Handler ;  

3

–13

Hard Fault Handler

0x0000 000C

DCD

MemManage_Handler

;  

4

–12

MPU Fault Handler

0x0000 0010

DCD

0

;  

5

–11

Reserved

0x0000 0014

DCD

0

;  

6

–10

Reserved

0x0000 0018

DCD

0

;  

7

/  

–9

Reserved

0x0000 001C

DCD

0

;  

8

/  

–8

Reserved

0x0000 0020

DCD

0

;  

9

/  

–7

Reserved

0x0000 0024

DCD

0

10

–6

Reserved

0x0000 0028

DCD

SVC_Handler

11

–5

SVCall Handler

0x0000 002C

DCD

DebugMon_Handler

12

–4

Debug Monitor Handler 

0x0000 0030

DCD

0

13

–3

Reserved

0x0000 0034

DCD

PendSV_Handler

14

–2

PendSV Handler

0x0000 0038

DCD

SysTick_Handler

15

–1

SysTick Handler

0x0000 003C

DCD

IRQ_Handler

16

+0

IRQ Handler

0x0000 0040

background image

4

Cortex-M0 

(LPC1114)

Interrupt  

Sources

StartUp_LPC11xx.s

www.Keil.com

; External Interrupts

DCD WAKEUP_IRQHandler

; 16+ 0: Wakeup PIO0.0

0x0000 0040

DCD WAKEUP_IRQHandler

; 16+ 1: Wakeup PIO0.1

0x0000 0044

DCD WAKEUP_IRQHandler

; 16+ 2: Wakeup PIO0.2

0x0000 0048

DCD WAKEUP_IRQHandler

; 16+ 3: Wakeup PIO0.3

0x0000 004C

DCD WAKEUP_IRQHandler

; 16+ 4: Wakeup PIO0.4

0x0000 0050

...............................................................................................
DCD WAKEUP_IRQHandler

; 16+12: Wakeup PIO1.0

0x0000 0070

DCD CAN_IRQHandler

; 16+13: CAN

0x0000 0074

DCD SSP1_IRQHandler

; 16+14: SSP1

0x0000 0078

DCD I2C_IRQHandler

; 16+15: I2C

0x0000 007C

DCD TIMER16_0_IRQHandler

; 16+16: 16-bit Counter-Timer 0

0x0000 0080

DCD TIMER16_1_IRQHandler

; 16+17: 16-bit Counter-Timer 1

0x0000 0084

DCD TIMER32_0_IRQHandler

; 16+18: 32-bit Counter-Timer 0

0x0000 0088

DCD TIMER32_1_IRQHandler

; 16+19: 32-bit Counter-Timer 1

0x0000 008C

DCD SSP0_IRQHandler 

; 16+20: SSP0

0x0000 0090

DCD UART_IRQHandler

; 16+21: UART

0x0000 0094

DCD USB_IRQHandler

; 16+22: USB IRQ

0x0000 0098

DCD USB_FIQHandler

; 16+24: USB FIQ

0x0000 009C

DCD ADC_IRQHandler

; 16+24: A/D Converter

0x0000 00A0

DCD WDT_IRQHandler

; 16+25: Watchdog Timer

0x0000 00A4

DCD BOD_IRQHandler

; 16+26: Brown Out Detect

0x0000 00A8

DCD FMC_IRQHandler

; 16+27: Flash Memory Ctrl

0x0000 00AC

DCD PIOINT3_IRQHandler

; 16+28: PIO INT3

0x0000 00B0

DCD PIOINT2_IRQHandler

; 16+29: PIO INT2

0x0000 00B4

DCD PIOINT1_IRQHandler

; 16+30: PIO INT1

0x0000 00B8

DCD PIOINT0_IRQHandler

; 16+31: PIO INT0

0x0000 00BC

IRQ number

address

startup_stm32f4xx.s  

[1#4]

www.keil.com

Keil Software Assembler Reference

; External Interrupts

DCD

WWDG_IRQHandler 

; Window WatchDog

DCD

PVD_IRQHandler

; PVD through EXTI Line detection

DCD

TAMP_STAMP_IRQHandler

; Tamper and TimeStamps through 
;                      the EXTI line

DCD

RTC_WKUP_IRQHandler

; RTC Wakeup through the EXTI line

DCD

FLASH_IRQHandler

; FLASH

DCD

RCC_IRQHandler

; RCC

DCD

EXTI0_IRQHandler

; EXTI Line0

DCD

EXTI1_IRQHandler

; EXTI Line1

DCD

EXTI2_IRQHandler

; EXTI Line2

DCD

EXTI3_IRQHandler

; EXTI Line3

DCD

EXTI4_IRQHandler

; EXTI Line4

DCD

DMA1_Stream0_IRQHandler

; DMA1 Stream 0

DCD

DMA1_Stream1_IRQHandler

; DMA1 Stream 1

DCD

DMA1_Stream2_IRQHandler

; DMA1 Stream 2

DCD

DMA1_Stream3_IRQHandler

; DMA1 Stream 3

DCD

DMA1_Stream4_IRQHandler

; DMA1 Stream 4

DCD

DMA1_Stream5_IRQHandler

; DMA1 Stream 5

DCD

DMA1_Stream6_IRQHandler

; DMA1 Stream 6

DCD

ADC_IRQHandler

; ADC1, ADC2 and ADC3s

DCD

CAN1_TX_IRQHandler

; CAN1 TX

DCD

CAN1_RX0_IRQHandler

; CAN1 RX0

DCD

CAN1_RX1_IRQHandler

; CAN1 RX1

DCD

CAN1_SCE_IRQHandler

; CAN1 SCE

S

ta

rt

U

p

_

S

T

M3

2

F

4

x

x

.s

  

[1

#

4

]

startup_stm32f4xx.s  

(Cortex-M4F)

[2#4]

www.keil.com

Keil Software Assembler Reference

DCD

EXTI9_5_IRQHandler

; External Line[9:5]s

DCD

TIM1_BRK_TIM9_IRQHandler

; TIM1 Break and TIM9

DCD

TIM1_UP_TIM10_IRQHandler

; TIM1 Update and TIM10

DCD

TIM1_TRG_COM_TIM11_IRQHandler

; TIM1 Trigger and 
; Commutation and TIM11

DCD

TIM1_CC_IRQHandler 

; TIM1 Capture Compare

DCD

TIM2_IRQHandler 

; TIM2

DCD

TIM3_IRQHandler 

; TIM3

DCD

TIM4_IRQHandler

; TIM4

DCD

I2C1_EV_IRQHandler

; I2C1 Event

DCD

I2C1_ER_IRQHandler

; I2C1 Error

DCD

I2C2_EV_IRQHandler

; I2C2 Event

DCD

I2C2_ER_IRQHandler 

; I2C2 Error

DCD

SPI1_IRQHandler

; SPI1

DCD

SPI2_IRQHandler 

; SPI2

DCD

USART1_IRQHandler

; USART1

DCD

USART2_IRQHandler

; USART2

DCD

USART3_IRQHandler 

; USART3

DCD

EXTI15_10_IRQHandler

; External Line[15:10]s

DCD

RTC_Alarm_IRQHandler

; RTC Alarm (A and B) through
;          EXTI Line

DCD

OTG_FS_WKUP_IRQHandler

; USB OTG FS Wakeup
;          through EXTI line

startup_stm32f4xx.s  

(Cortex-M4F) 

[3#4]

www.keil.com

Keil Software Assembler Reference

DCD

TIM8_BRK_TIM12_IRQHandler

; TIM8 Break and TIM12

DCD

TIM8_UP_TIM13_IRQHandler

; TIM8 Update and TIM13

DCD

TIM8_TRG_COM_TIM14_IRQHandler

; TIM8 Trigger and 
;        Commutation and TIM14

DCD

TIM8_CC_IRQHandler

; TIM8 Capture Compare

DCD

DMA1_Stream7_IRQHandler

; DMA1 Stream7

DCD

FSMC_IRQHandler 

; FSMC

DCD

SDIO_IRQHandler  

; SDIO

DCD

TIM5_IRQHandler 

; TIM5

DCD

SPI3_IRQHandler 

; SPI3

DCD

UART4_IRQHandler 

; UART4

DCD

UART5_IRQHandler 

; UART5

DCD

TIM6_DAC_IRQHandler 

; TIM6 and DAC1&2 underrun errors

DCD

TIM7_IRQHandler 

; TIM7

DCD

DMA2_Stream0_IRQHandler

; DMA2 Stream 0

DCD

DMA2_Stream1_IRQHandler

; DMA2 Stream 1

DCD

DMA2_Stream2_IRQHandler 

; DMA2 Stream 2

DCD

DMA2_Stream3_IRQHandler

; DMA2 Stream 3

DCD

DMA2_Stream4_IRQHandler

; DMA2 Stream 4

DCD

ETH_IRQHandler

; Ethernet

DCD

ETH_WKUP_IRQHandler 

; Ethernet Wakeup through EXTI line

startup_stm32f4xx.s  

(Cortex-M4F)

[4#4]

DCD

CAN2_TX_IRQHandler 

; CAN2 TX

DCD

CAN2_RX0_IRQHandler

; CAN2 RX0

DCD

CAN2_RX1_IRQHandler 

; CAN2 RX1

DCD

CAN2_SCE_IRQHandler 

; CAN2 SCE

DCD

OTG_FS_IRQHandler 

; USB OTG FS

DCD

DMA2_Stream5_IRQHandler 

; DMA2 Stream 5

DCD

DMA2_Stream6_IRQHandler

; DMA2 Stream 6

DCD

DMA2_Stream7_IRQHandler

; DMA2 Stream 7

DCD

USART6_IRQHandler 

; USART6

DCD

I2C3_EV_IRQHandler

; I2C3 event

DCD

I2C3_ER_IRQHandler

; I2C3 error

DCD

OTG_HS_EP1_OUT_IRQHandler

; USB OTG HS End Point 1 Out

DCD

OTG_HS_EP1_IN_IRQHandler

; USB OTG HS End Point 1 In

DCD

OTG_HS_WKUP_IRQHandler

; USB OTG HS Wakeup through EXTI

DCD

OTG_HS_IRQHandler

; USB OTG HS

DCD

DCMI_IRQHandler 

; DCMI

DCD

CRYP_IRQHandler  

; CRYP crypto

DCD

HASH_RNG_IRQHandler 

; Hash and Rng

DCD

FPU_IRQHandler   

; FPU

__Vectors_End
__Vectors_Size  

EQU

__Vectors_End - __Vectors

www.keil.com

Keil Software Assembler Reference

Jednopoziomowa  obsługa  przerwań

blokowanie przyj

ę

cia nast

ę

pnego przerwania w przypadku, gdy nie jest 

zako

ń

czona obsługa poprzedniego przerwania

wykonanie jednej instrukcji z programu głównego przed rozpocz

ę

ciem 

obsługi zgłoszonego  (czekaj

ą

cego  w kolejce) przerwania

żą

danie   

przerwania A

program

ISR

żą

danie   

przerwania A

żą

danie przerwania B

żą

danie przerwania C

priorytet przerwania

background image

5

Wielopoziomowa obsługa  przerwań
Zagnieżdżenie przerwań

przyporz

ą

dkowanie  ró

ż

nych poziomów priorytetów procedurom obsługi 

przerwa

ń

, co umo

ż

liwia  przerwanie bie

żą

cej procedury przez inn

ą

 

procedur

ę

 o wy

ż

szym priorytecie:

priorytety programowe s

ą

 ustalane przez programist

ę

, zwykle od 2 do 

16 poziomów priorytetów

priorytety sprz

ę

towe s

ą

 ustalane przez producenta procesora

żą

danie   

przerwania A

program

ISR

żą

danie   

przerwania A

priorytet   przerwania

żą

danie przerwania B

żą

danie przerwania C

przerwania zagnie

ż

d

ż

one

(Nesting of Interrupts )

Cortex-Mx
Switching Processor Mode at Interrupt

J. Yiu: The Definitive Guide to the ARM Cortex-M0.

Elsevier Inc. 2011, Fig. 9.6

J. Yiu: The Definitive Guide to the ARM Cortex-M3.

Second Edition. Elsevier Inc. 2010, p.34

Thread mode

(

privileged

)

Main

program

Interrupt

event

Stacking

Interrupt Service

Routine (ISR)

Interrupt

exit

Unstacking

Handler mode

(

privileged

)

Thread mode

(

privileged

)

Thread mode

(

user

)

Main

program

Stacking

Interrupt Service

Routine (ISR)

Unstacking

Handler mode

(

privileged

)

Thread mode

(

user

)

St

V

Interrupt handler

Ust

Interrupt

event

Interrupt

exit

Vector fetch

Cortex-Mx Nested Interrupts

J. Yiu: The Definitive Guide to the ARM Cortex-M3.

Second Edition. Elsevier Inc. 2010, p.151 

Exception

status

Interrupt exit

St

V

ISR 1

Ust

V

Thread mode

Main program

Interrupt  

2

request

Interrupt  

1

request (Low priority)

(High priority)

St

V

ISR 2

ISR 1

Ust

ISR 2

ISR 1

ISR 1

Main stack 

(MSP)

Main stack 

(MSP)

Main stack 

(MSP)

Handler

mode

Handler

mode

Thread mode

Handler

mode

Process stack 

(PSP)

Main stack 

(MSP)

Process stack 

(PSP)

Unstacking

Stacking

Vector fetch

LR = 0xFFFF FFF9

LR = 0xFFFF FFFD

LR = 0xFFFF FFF1

LR = 0xFFFF FFF1

Procedury obsługi przerwań

(Interrupt Handling / Interrupt Service Routine)

podprogram wywoływany  po wykryciu 

żą

dania obsługi przerwania

kod programu obsługuj

ą

cy zwykle  potrzeby układów peryferyjnych 

mikrokontrolera lub wykorzystuj

ą

cy  cechy systemu operacyjnego

zachowanie  stanu procesora, ochrona (przechowanie stanu –
zwykle na stosie) 
rejestrów stosowanych  w programie obsługi 
przerwania je

ś

li brak bankowa rejestrów

pocz

ą

tek procedury w ustalonym adresie (wektorze)

charakterystyczne (typowe dla przerwa

ń

zako

ń

czenie procedury

Obsługa  przerwań

Ochrona

, przechowywanie 

stanu rejestrów

procesora po przyj

ę

ciu i 

rozpocz

ę

ciu realizacji procedury obsługi przerwania:

przeł

ą

czanie danych

(

data swapping

)

przechowywanie  na stosie zawarto

ś

ci rejestrów wykorzystywanych  w 

obsłudze przerwania

– sprz

ę

towe

bez konieczno

ś

ci wprowadzania  dodatkowych instrukcji na 

pocz

ą

tku i ko

ń

cu programu obsługi przerwania, 

np. MSP430, Cortex-Mx

– programowe

dodatkowe instrukcje na pocz

ą

tku (PUSH) i ko

ń

cu (POP) programu 

obsługi przerwania, np. x86

przeł

ą

czanie kontekstowe

(

context switching

)

wykorzystanie  dodatkowych zestawów, banków rejestrów, np. ARM7

Przełączanie danych

MSP430 – sprz

ę

towo/programowe:

• PC

SR

przesłane na stos

GIE = 0, blokada wszystkich przerwa

ń

(rejestr SR)

PC = adres procedury obsługi z tablicy wektorów przerwa

ń

STM8S – sprz

ę

towe:

• PC

X

Y

A

CCR

przesłane na stos

I1 = I0 = 1, blokada przerwa

ń

 programowych 

(rejestr CC)

PC = adres procedury obsługi z tablicy wektorów przerwa

ń

ARM7 IRQ – sprz

ę

towo/programowe:

zmiana trybu pracy na IRQ_mod 

(uprzywilejowany)

• PC

przesłane do rejestru R14_irq (Link Register)

ochrona rejestru statusowego CPSR_mod 

SPSR_irq

bankowanie rejestru statusowego CPSR_irq

I = 1, blokada wszystkich przerwa

ń

 IRQ 

(rejestr CPSR_irq)

PC = adres procedury obsługi z VICVectAddr

Cortex-M3 

– sprz

ę

towe (Nested Interrupt Support):

zmiana trybu na Handler Mode (uprzywilejowany)

PC

PSR

R0–R3

R12 

LR

przesłane na stos

PC = adres 

procedury obsługi z tablicy wektorów przerwa

ń

sprz

ę

towa 

mo

ż

liwo

ść

 

przyjmowania 

przerwa

ń

 

zagnie

ż

d

ż

onych

background image

6

Koniec  procedury  obsługi  przerwania

Ka

ż

dy

podprogram

obsługi przerwania

musi ko

ń

czy

ć

si

ę

 wła

ś

ciw

ą

 

instrukcj

ą

, np.:

MCS 51, MSP430: RETI

PIC17Cxx:

RETFIE 

68HC7xx :

RTI

STM8S:

IRET

Cortex-M0/M0+:

BX  LR (+Unstacking)

aby

odtworzy

ć

stan rejestrów kontrolera priorytetów przerwa

ń

Czas reakcji

Czas reakcji

(

Response Time

– czas liczony od momentu przyj

ę

cia zgłoszenia 

przerwania do zako

ń

czenia ostatniej wykonywanej instrukcji w przerywanym 

programie; czas zale

ż

ny od:

sposobu testowania kolejno

ś

ci zgłoszonych przerwa

ń

,

sposobu maskowania przerwa

ń

, reakcji systemu operacyjnego itp..

liczby cykli maszynowych  potrzebnych do zako

ń

czenia bie

żą

cej, 

wykonywanej instrukcji

typu wykonywanych instrukcji, np. programowania kontrolera priorytetów 
przerwa

ń

.

żą

danie przerwania

(Interrupt Request)

program

ISR

reakcja na przerwanie

(Response Time)

rozpocz

ę

cie 

wykonywania ISR

Czas opóźnienia

Czas opó

ź

nienia

(

Latency Time

– czas liczony  od momentu zgłoszenia 

przerwania do momentu rozpocz

ę

cia wykonywania  podprogramu obsługi 

przerwania (ISR); czas zale

ż

ny dodatkowo od:

sposobu wywołania podprogramu obsługi przerwania, szybko

ś

ci 

przesłania na stos licznika rozkazów PC,

liczby bajtów innych rejestrów przesyłanych na stos przed 
rozpocz

ę

ciem podprogramu obsługi przerwania.

żą

danie przerwania

(Interrupt Request)

program

ISR

reakcja na 

żą

danie 

obsługi przerwania

opó

ź

nienie 

(Latency Time)

PUSH  PC

CALL  ISR

....

rozpocz

ę

cie 

wykonywania ISR

przygotowania

Czas opóźnienia i reakcji

żą

danie przerwania

(Interrupt Request)

program

ISR

reakcja procesora 

na 

żą

danie procedury 

obsługi przerwania

opó

ź

nienie 

(Latency Time)

PUSH  PC

CALL  ISR

....

rozpocz

ę

cie 

wykonywania ISR

przygotowanie do 

rozpocz

ę

cia ISR

reakcja na przerwanie 

(Response Time)

Czas opóźnienia i reakcji

żą

danie przerwania

(Interrupt Request)

program

reakcja procesora na 

żą

danie

procedury obsługi przerwania

opó

ź

nienie 

(Latency Time)

PUSH  PC

CALL  ISR

....

rozpocz

ę

cie 

wykonywania ISR

przygotowanie do rozpocz

ę

cia ISR

reakcja na przerwanie 

(Response Time)

PICmicro MID-RANGE MCU FAMILY. Microchip Technology, December 1997, 33023a.pdf
8.3 Interrupt Latency (p.132)

Interrupt latency

is defined as the time from the 

interrupt event

(the interrupt flag bit gets set) to the time that the instruction at 
address 0004h 

starts execution

(when that interrupt is enabled)

8-bit Microcontrollers. Databook - 1997. Temic Semiconductors, 1997

Response time

... if a request is active and conditions are right for 

it to be acknowledged, a hardware subroutine call to the requested 
service routine will be the next instruction to be executed 
(

polling cycle + long CALL

to interrupt vector address).

ISR

Cortex-M0/M0+
Czas reakcji

Cortex™-M0+. Technical Reference Manual.

ARM DDI 0484C, Revision: r0p1, p.3-10

zastosowanie 

zaawansowanych metod obsługi wyj

ą

tków i przerwa

ń

 

(ARMv6-M Architecture Reference Manual)

minimalizacja opó

ź

nienia w przyjmowaniu przerwania:

przerwanie wykonywania zło

ż

onej, wielokrotnej instrukcji

(load-

multiple / store-multiple instruction) i 

rozpocz

ę

cie obsługi oczekuj

ą

cego 

przerwania

po powrocie z obsługi przerwania

, jeszcze raz, 

od pocz

ą

tku

rozpocz

ę

cie wykonywania przerwanej instrukcji 

ta 

sama zasada 

dla 

32-cyklowych operacji mno

ż

enia 

(programowe 

operacje mno

ż

enia)

oprogramowanie nie mo

ż

e u

ż

ywa

ć

  zło

ż

onych, wielokrotnych  instrukcji je

ś

li 

prowadzi to do fałszowania  warto

ś

ci zmiennych (niepo

żą

dane skutki uboczne 

obsługi przerwa

ń

)

stałe opó

ź

nienie w przyj

ę

ciu przerwania

15

cykli (Cortex-M0/M0+) .. 

12

cykli (Cortex-M3)

background image

7

Dobre  rady  

[1#2]

• ka

ż

de przerwanie

musi by

ć

 

ś

wiadomie uaktywnione

, globalnie  i 

indywidualnie

żą

danie obsługi przerwania nie jest realizowane natychmiast

; czas 

opó

ź

nienia zale

ż

y od wykonywanych w danym momencie instrukcji

• sygnał wywołuj

ą

cy przerwanie

reaguj

ą

ce na 

poziom

musi si

ę

 

zako

ń

czy

ć

przed zako

ń

czeniem procedury obsługi przerwania

- w 

przeciwnym razie przerwanie jest ponownie wywoływane

• priorytet

przyjmowanych przerwa

ń

 zale

ż

y od:

– konstruktorów mikrokontrolera (struktura ustalona w fazie produkcji)
– programisty (struktura dostosowana do potrzeb aplikacji

• obsługa 

przerwa

ń

wielopoziomowych

jest mo

ż

liwa  tylko przez 

programow

ą

zmian

ę

 

priorytetów

Dobre  rady  

[2#2]

• ka

ż

dy

program obsługi 

przerwania

musi by

ć

 zako

ń

czony 

specjaln

ą

instrukcj

ą

• kolejne

żą

danie

obsługi 

przerwania

mog

ą

 si

ę

 pojawi

ć

 po 

zako

ń

czeniu obsługi bie

żą

cego przerwania + czas wykonania jednej, 

dodatkowej instrukcji

• wielopoziomowe, hierarchiczne struktury procedur obsługi 

przerwa

ń

 stosuj

ą

 tylko najlepsi lub szale

ń

cy

Cortex-M0/M0+
Kontroler  przerwań

UM10398. LPC11xx User Manual.

NXP, Rev. 12.3 — 10 June 2014, p.69

Zagnie

ż

d

ż

ony  wektorowy kontroler przerwa

ń

 

(NVIC – Nested 

Vectored Interrupt Controller) jest 

integraln

ą

 cz

ęś

ci

ą

 rdzenia 

(core) 

procesorów

ARM Cortex-Mx

Konstrukcja zapewnia 

minimalny czas opó

ź

nienia w przyj

ę

ciu 

przerwania 

(low interrupt latency)

NVIC kontroluje obsług

ę

 wyj

ą

tków

(exceptions)

i przerwa

ń

 

(interrupts)

NVIC posiada

:

32 wektorowe 

ź

ródła przerwa

ń

4 programowalne priorytety przerwa

ń

programowe przerwania 

(SWI – software interrupt)

Stany  wyjątków / przerwań

Stany wyj

ą

tków / przerwa

ń

nieaktywny 

(inactive) – wyj

ą

tek/przerwanie  nieaktywne i 

nie oczekuj

ą

ce na obsług

ę

oczekiwania 

(pending) – wyj

ą

tek/przerwanie oczekuj

ą

ce na obsług

ę

żą

danie obsługi generowane programowo lub przez układy 

peryferyjne

aktywny 

(active) – wyj

ą

tek/przerwanie w trakcie obsługi (nie zako

ń

czone)

Uwaga: obsługa wyj

ą

tku/przerwania  mo

ż

e zosta

ć

 przerwana przez  inny 

wyj

ą

tek/przerwanie  o wy

ż

szym  priorytecie – oba wyj

ą

tki/przerwania 

pozostaj

ą

 w trybie aktywnym

aktywny i oczekiwania 

(active and pending) – wyj

ą

tek/przerwanie 

obsługiwane  przez procesor i oczekuj

ą

ce na ponown

ą

 obsług

ę

 (to 

samo 

ź

ródło wyj

ą

tku/przerwania)

UM10398. LPC11xx User Manual.

NXP, Rev. 12.3 — 10 June 2014, p.69

PM0223. Programming manual STM32L0 Series Cortex

®

-M0+ programming manual.

STMicroelectronics , DocID025763 Rev 1 , April 2014, p.82

Exception priorities Cortex-M0/M0+  

[1#2]

UM10398. LPC111x/LPC11Cxx User manual.

NXP, Rev. 12.3 — 10 June 2014, p.468

address

IRQ number

Exception

number

R

e

s

e

rv

e

d

; Vector Table Mapped to Address 0 at Reset

__Vectors

DCD

__initial_sp

;  

Top of Stack

0x0000 0000

DCD

Reset_Handler

;  

1

/   

Reset Handler

0x0000 0004

DCD

NMI_Handler

;  

2

–14

NMI Handler

0x0000 0008

DCD

HardFault_Handler ;  

3

–13

Hard Fault Handler

0x0000 000C

........................................................................................................................

DCD

SVC_Handler

11

–5

SVCall Handler

0x0000 002C

DCD

DebugMon_Handler

12

–4

Debug Monitor Handler 

0x0000 0030

DCD

0

13

–3

Reserved

0x0000 0034

DCD

PendSV_Handler

14

–2

PendSV Handler

0x0000 0038

DCD

SysTick_Handler

15

–1

SysTick Handler

0x0000 003C

DCD

IRQ_Handler

16

+0

IRQ Handler

0x0000 0040

All exceptions have an associated priority, with:

lower priority value indicating a higher priority

configurable priorities 

for all exceptions 

except Reset

,

HardFault

, and 

NMI

.

If software does not configure any priorities, then all exceptions with a 
configurable priority have a priority of 0

Exception  
Cortex-M0/M0+

PM0223. Programming manual STM32L0

Series Cortex

®

-M0+ programming manual.

STMicroelectronics , DocID025763 Rev 1 , April 2014, p.26

numer

typ

priorytet

IRQ

wyj

ą

tku

Reset 

–3

,  najwy

ż

szy

–14 

NMI 

–2

fixed

–13 

HardFault

–1

Reserved 

–5 

SVCall

configurable

Reserved 

–2 

PendSV

configurable

–1 

SysTick

configurable

0

and 

Interrupt

configurable

above 

(IRQ)

UM10398. LPC11xx User Manual.

NXP, Rev. 12.3 — 10 June 2014, p.466

Reset

(wywoływany po wł

ą

czeniu 

zasilania lub po ’warm reset’)

NMI

(NonMaskable Interrupt –
przerwanie niemaskowalne 
generowane programowo lub 
przez układy peryferyjne)

HardFault

(bł

ą

d w trakcie standardowej 

obsługi wyj

ą

tku lub działania 

programu)

SVCall

(supervisor call – po wykonaniu 

instrukcji SVC; w 

ś

rodowisku 

OS, aplikacje  mog

ą

 korzysta

ć

 z 

instrukcjami SVC przy dost

ę

pie 

do funkcji j

ą

dra OS i 

sterowników urz

ą

dze

ń

)

PendSV

(usługa systemowa; w OS – systemie operacyjnym stosowane w 

kontek

ś

cie przeł

ą

czania; priorytet ustawiany jako najni

ż

szy, dzi

ę

ki czemu 

przerwanie to nigdy nie wywłaszczy  innych obsługiwanych przerwa

ń

)

SysTick

(przerwanie  generowane przez SysTick po osi

ą

gni

ę

ciu stanu zera)

background image

8

Exception  priorities  Cortex-M0/M0+  

[2#2]

PM0223. Programming manual STM32L0 Series Cortex

®

-M0+ programming manual.

STMicroelectronics , DocID025763 Rev 1 , April 2014, p.27

Exception

IRQ 

Exception

Priority

Vector  

Activation

number

(1)

number

(1)

type 

address 

1

-

Reset 

–3

,  the highest  0x0000 0004 Asynchronous

–14 

NMI 

–2

fixed

0x0000 0008  Asynchronous 

–13 

HardFault

–1

0x0000 000C Synchronous

4-10 

Reserved 

11

–5 

SVCall

configurable

0x0000 002C  Synchronous

12-13 

Reserved 

14

–2 

PendSV

configurable

0x0000 0038 Asynchronous

15

–1 

SysTick

configurable

0x0000 003C Asynchronous

16 and

0

and 

Interrupt

configurable

0x0000 0040 Asynchronous

above 

above

(IRQ)

and above

(2)

(1)

To simplify the software layer, the CMSIS only uses IRQ numbers. It uses
negative values for exceptions other than interrupts (IPSR returns the Exception 
number)

(2)

Increasing in steps of 4. 

UM10398. LPC11xx User Manual.

NXP, Rev. 12.3 — 10 June 2014, p.466

Exception priorities

(1)

RM0367. Reference manual. Ultra-low-power 

STM32L0x3 advanced ARM

®

-based 32-bit MCUs. 

STMicroelectronicsDocID025274 Rev 2, April 2014, p.252

(2) 

UM10398. LPC11xx User Manual.

NXP, Rev. 12.3 — 10 June 2014, p.466

Exception

IRQ 

Exception

Priority

Description

number 

number

type 

1

Reset

(1,2)

–3

,  the highest 

–14 

NMI

(1,2)

–2

fixed

–13 

HardFault

(1,2)

–1

All class of fault

4

–12

MemManage

(1) 

settable

Memory management

5

–11

BusFault

(1) 

settable

Pre-fetch fault, memory

access fault

6

–10

UsageFault

(1) 

settable

Undefined instruction or

illegal state

7-10 

Reserved 

11

–5 

SVCall

(1,2) 

settable

System service call via SWI

instruction

12

–4

DebugMon

(1) 

settable

Debug Monitor

13 

Reserved 

14

–2 

PendSV

(1,2) 

settable

Pendable request for 

system service

15

–1 

SysTick

(1,2) 

settable

System tick timer

16 and

0

and 

Interrupt

(1,2) 

settable

Peripheral interrupts

above 

above

(IRQ)

Cortex

M0 / Cortex

M0+

Program Status Registers

ARMv6-M Architecture Reference Manual. 

ARM DDI 0419C, September 2010, B1.4

N Z C V

31

28

Reserved

24

APSR

T

Reserved

IPSR

Reserved

EPSR

Reserved

5

0

0 or 

Exception

Number

N Z C V

31

28

Reserved

24

T

5

0

Exception

Number

P

rogram

S

tatus

R

egisters

Res

xPSR

Provide arithmetic and logic processing flags

(zero flag and carry flag), 

execution status

, and 

current executing interrupt number

A

pplication

P

rogram

S

tatus

R

egister

I

nterrupt

P

rogram

S

tatus

R

egister

E

xecution

P

rogram

S

tatus

R

egister

Cortex-M
Blokowanie  wyjątków

Cortex™-M0+. Devices.

ARM DUI 0662B, p.2-7

bit 0

(PRIMASK) w rejestrze maskuj

ą

cym obsług

ę

 wyj

ą

tków  (PRIority

MASK register) 

wył

ą

cza

lub 

blokuje uruchomienie wszystkich 

wyj

ą

tków z konfigurowalnym priorytetem

operacja 

stosowana

je

ś

li procesor wykonuje 

zadania czasowo-

krytyczne

lub 

sekwencje kodu wymagaj

ą

ce niepodzielno

ś

ci

31

Reserved

0

1

PRIMASK

Bity 

Nazwa 

Funkcja

[0] 

PRIMASK

0 = odblokowana obsługa wyj

ą

tków

1 = zablokowana obsługa wyj

ą

tków

[31:1]

zarezerwowane

PRIMASK

Cortex-M0
Źródła  przerwań w LPC11xx

8

9

10

11

12

13

14

15

C

_

C

A

N

P

1

_

0

P

0

_

1

1

P

0

_

1

0

P

0

_

9

P

0

_

8

I2

C

S

P

I/

S

S

P

1

0

1

2

3

4

5

6

7

P

0

_

5

P

0

_

4

P

0

_

3

P

0

_

2

P

0

_

1

P

0

_

0

P

0

_

7

P

0

_

6

24

A

D

C

25

W

D

T

30

P

IO

_

1

31

P

IO

_

0

P

IO

_

2

29

P

IO

_

3

28

R

e

s

e

rv

e

d

27

B

O

D

26

StartUp_LPC11xx.s

UM10398. LPC11xx User Manual.

NXP, Rev. 12.3 — 10 June 2014, p.69

LPC11C12/C14

wake-up pin from

Deep-sleep mode

numer przerwania (Interrupt number)

16

17

18

19

20

21

22

23

U

A

R

T

S

P

I/

S

S

P

0

C

T

3

2

B

1

C

T

3

2

B

0

C

T

1

6

B

1

C

T

1

6

B

0

R

e

s

e

rv

e

d

R

e

s

e

rv

e

d

numer przerwania (Interrupt number)

Cortex-M0
Źródła  przerwań w STM32L0x3

8

9

10

11

12

13

14

15

L

P

T

IM

1

A

D

C

_

C

O

M

P

D

M

A

1

_

C

H

[7

:4

]

D

M

A

1

_

C

H

[3

:2

]

D

M

A

1

_

C

H

[1

]

T

S

C

T

IM

2

R

e

s

e

rv

e

d

0

1

2

3

4

5

6

7

E

X

T

I[

1

:0

]

R

C

C

_

C

R

S

F

L

A

S

H

R

T

C

P

V

D

W

W

D

G

E

X

T

I[

1

5

:4

]

E

X

T

I[

3

:2

]

24

I2

C

2

25

S

P

I1

30

L

C

D

31

U

S

B

..

 A

E

S

 .

.

29

U

S

A

R

T

2

28

U

S

A

R

T

1

27

S

P

I2

26

numer przerwania (Interrupt number)

16

17

18

19

20

21

22

23

R

e

s

e

rv

e

d

T

IM

2

1

R

e

s

e

rv

e

d

R

e

s

e

rv

e

d

T

IM

6

_

D

A

C

R

e

s

e

rv

e

d

T

IM

2

2

I2

C

1

numer przerwania (Interrupt number)

StartUp_STM32L053xx.s

RM0367. Reference manual. Ultra-low-power 

STM32L0x3 advanced ARM

®

-based 32-bit MCUs. 

STMicroelectronicsDocID025274 Rev 2, April 2014, p.253

background image

9

NVIC 
Priorytety  

[1#2]

Cortex™-M0 Devices. Generic User Guide.

ARM, DUI 0497A, 8 October 2009, p.4-7

UM10398. LPC11xx User Manual.

NXP, Rev. 12.3 — 10 June 2014, p.508

J. Yiu: The Definitive Guide to the ARM Cortex-M0.

Elsevier Inc. 2011, Fig.8.1

procesor Cortex-M0 posiada 3-poziomow

ą

, sprz

ę

tow

ą

 i 4-poziomow

ą

programow

ą

 struktur

ę

 priorytetów przerwa

ń

do programowania wyj

ą

tków/przerwa

ń

 z programowalnymi priorytetami 

stosowane s

ą

 jedynie dwa najbardziej znacz

ą

ce bity w 8-bitowych rejestrach 

(rejestry SHPR3-SHPR2 – System Handler Priority Register dla wyj

ą

tków 

oraz IPR0-IPR7 – Interrupt Priority Registers dla przerwa

ń

)

w rejestrach priorytetów bity 5:0 s

ą

 zawsze równe warto

ś

ci zerowej 

przy odczycie 

(brak zmiany warto

ś

ci tych bitów przy zapisie)

dost

ę

pne programowalne priorytety: 0x00

(najwy

ż

szy)

0x40

0x80

0xC0

(najni

ż

szy)

Bit 7 Bit 6

Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

wykorzystywane

nie wykorzystywane

NVIC 
Priorytety  

[2#2]

Cortex™-M0 Devices. Generic User Guide.

ARM, DUI 0497A, 8 October 2009, p.4-7

UM10398. LPC11xx User Manual.

NXP, Rev. 12.3 — 10 June 2014, p.508

J. Yiu: The Definitive Guide to the ARM Cortex-M0.

Elsevier Inc. 2011, p.143

w procesorze 

Cortex-M3

przewidziano 

minimum 3 bity do 

programowania priorytetów wyj

ą

tków/przerwa

ń

 – 8 poziomów 

priorytetów 

(w procesorach Cortex-M0/M0+ tylko 4 poziomy)

zwi

ę

kszenie liczby dost

ę

pnych bitów zwi

ę

ksza liczb

ę

 dost

ę

pnych poziomów 

priorytetów wyj

ą

tków/przerwa

ń

zwi

ę

kszenie liczby dost

ę

pnych bitów zwi

ę

ksza pobór energii

w rejestrach priorytetów bity 4:0 s

ą

 zawsze równe warto

ś

ci zerowej 

przy odczycie 

(brak zmiany warto

ś

ci tych bitów przy zapisie)

dost

ę

pne programowalne priorytety: 0x00

(najwy

ż

szy)

0x20

0x40

0x60

0x80

,

0xA0

,

0xC0

0xE0

(najni

ż

szy)

Bit 7 Bit 6 Bit 5

Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

wykorzystywane

nie wykorzystywane

void

NVIC_EnableIRQ

(IRQn_Type IRQn)

odblokowanie   wyj

ą

tku / przerwania

void

NVIC_DisableIRQ

(IRQn_Type IRQn)

zablokowanie   wyj

ą

tku / przerwania 

Cortex-M0/M0+ 
Funkcje CMSIS dostępu do NVIC  

[1#3]

UM10398. LPC11xx User Manual.

NXP, Rev. 12.3 — 10 June 2014, p.69

PM0223. Programming manual STM32L0 Series Cortex

®

-M0+ programming manual.

STMicroelectronics , DocID025763 Rev 1 , April 2014, p.82

void

NVIC_SetPendingIRQ

(IRQn_Type IRQn)

ustawienie statusu wyj

ą

tku/przerwania w tryb oczekiwania

void

NVIC_ClearPendingIRQ

(IRQn_Type IRQn)

skasowanie trybu oczekiwania dla wyj

ą

tku/przerwania

uint32_t 

NVIC_GetPendingIRQ

(IRQn_Type IRQn)

odczyt statusu wyj

ą

tku/przerwania  (1 oznacza  tryb oczekiwania)

Cortex-M0/M0+ 
Funkcje CMSIS dostępu do NVIC  

[2#3]

UM10398. LPC11xx User Manual.

NXP, Rev. 12.3 — 10 June 2014, p.69

PM0223. Programming manual STM32L0 Series Cortex

®

-M0+ programming manual.

STMicroelectronics , DocID025763 Rev 1 , April 2014, p.82

Cortex-M0/M0+ 
Funkcje CMSIS dostępu do NVIC  

[3#3]

UM10398. LPC11xx User Manual.

NXP, Rev. 12.3 — 10 June 2014, p.69

PM0223. Programming manual STM32L0 Series Cortex

®

-M0+ programming manual.

STMicroelectronics , DocID025763 Rev 1 , April 2014, p.82

void 

NVIC_SetPriority

(IRQn_Type IRQn, uint32_t priority)

programowanie priorytetu dla podanego typu przerwania

uint32_t 

NVIC_GetPriority

(IRQn_Type IRQn)

odczyt priorytetu dla podanego typu przerwania

SysTick_Config

__STATIC_INLINE uint32_t 

SysTick_Config

(uint32_t ticks) {

if ((ticks - 1) > SysTick_LOAD_RELOAD_Msk)  return (1); /* Reload value impossible */
SysTick->LOAD  = ticks - 1;                                  

/* set reload register 

*/

NVIC_SetPriority

(

SysTick_IRQn

, (

1<<__NVIC_PRIO_BITS) – 1

); 

/* 

set Priority for Systick Interrupt

*/

SysTick->VAL   = 0;

/* Load the SysTick Counter Value 

*/

SysTick->CTRL= SysTick_CTRL_CLKSOURCE_Msk |

SysTick_CTRL_TICKINT_Msk |
SysTick_CTRL_ENABLE_Msk; 

/* Enable SysTick IRQ and SysTick Timer */

return (0); 

/* Function successful

*/

}

Cortex™-M0 Devices. Generic User Guide.

ARM, DUI 0497A, 8 October 2009, p.4-7

UM10398. LPC11xx User Manual.

NXP, Rev. 12.3 — 10 June 2014, p.508

J. Yiu: The Definitive Guide to  the ARM Cortex-M0.

Elsevier Inc. 2011, p.143

File: core_cm0.h

NVIC_SetPriority 

(

SysTick_IRQn

, (

1<<__NVIC_PRIO_BITS) – 1

); 

// set Priority for Systick Interrupt 

void 

NVIC_SetPriority

(

IRQn_Type IRQn

uint32_t priority

)

NVIC_SetPriority (–1, 3);

File LPC11xx.h (line 59):

SysTick_IRQn =  –1

// 15  System Tick Timer

File LPC11xx.h (line 104): 
#define 

__NVIC_PRIO_BITS  2

// Number of Bits used for Priority Levels

The lower the value, the greater the priority 

of the corresponding interrupt. 

background image

10

Cortex-M0 

(LPC1114)

SysTick  Timer  Interrupt  

[1#3]

StartUp_LPC11xx.s

UM10398. LPC111x/LPC11Cxx User manual.

NXP, Rev. 12.3 — 10 June 2014, p.466

; Vector Table Mapped to Address 0 at Reset

EXPORT

__Vectors

__Vectors DCD

__initial_sp

;  

Top of Stack

0x0000 0000

DCD

Reset_Handler

;  

1

/   

Reset Handler

0x0000 0004

DCD

NMI_Handler

;  

2

–14

NMI Handler

0x0000 0008

.........................................................................................................................

DCD SysTick_Handler

15

–1

SysTick Handler

0x0000 003C

.........................................................................................................................

wpisanie do LR identyfikatora przerwanego trybu pracy 

0xFFFF FFF1 (Handler 

Mode, MSP)

0xFFFF FFF9 (Thread Mode, MSP)

0xFFFF FFFD (Thread Mode, PSP)

procedura stacking, 

ochrona na stosie rejestrów: R0 – R3, R12, LR, xPSR, PC

procesor w trybie Handler Mode

wska

ź

nik stosu SP = MSP

wykonanie programu obsługi przerwania SysTick_Handler

procedura unstacking, 

powrót do wła

ś

ciwego trybu (Handler/Thread Mode) 

i przerwanego programu

address

IRQ number

Exception

number

Cortex-M0 

(LPC1114)

SysTick  Timer  Interrupt  

[3#3]

StartUp_LPC11xx.s

UM10398. LPC111x/LPC11Cxx User manual.

NXP, Rev. 12.3 — 10 June 2014, p.466

address

IRQ number

Exception

number

; Vector Table Mapped to Address 0 at Reset

EXPORT

__Vectors

__Vectors

DCD

__initial_sp

;  

Top of Stack

0x0000 0000

DCD

Reset_Handler

;  

1

/   

Reset Handler

0x0000 0004

DCD

NMI_Handler

;  

2

–14

NMI Handler

0x0000 0008

.....................................................................................

DCD

SysTick_Handler ; 

15

–1

SysTick Handler

0x0000 003C

.....................................................................................

SysTick_Handler

PROC

EXPORT  SysTick_Handler           [

WEAK

]

B       .

ENDP

void SysTick_Handler (void) {

// IRQ_file.c

ticks++;

}

Unstacking

Przerwania

- wspomaganie sprz

ę

towe  (1/2)

A/C

wynik

pomiaru

koniec

pomiaru

pocz

ą

tek

pomiaru

dane

MCU

licznik

Px.y

zgłoszenie
przerwania

kontroler

przerwa

ń

port

wej

ś

ciowy

wykonaj
pomiar

przetwarzanie

A/C  (1)

wykonaj

pomiar

zgłoszenie

przerwania

przyj

ę

cie

przerwania

przetwarzanie

A/C  (2)

wykonaj

pomiar

zgłoszenie

przerwania

odczyt

danych

przyj

ę

cie

przerwania

odczyt

danych

strukturalne opó

ź

nienia

Przerwania

- wspomaganie sprz

ę

towe  (2/2)

przetwarzanie

A/C  (1)

wykonaj
pomiary

zgłoszenie

przerwania

przyj

ę

cie

przerwania

przetwarzanie

A/C  (2)

odczyt

danych

1

strukturalne opó

ź

nienia

przetwarzanie

A/C  (1)

wykonaj

pomiar

zgłoszenie

przerwania

przyj

ę

cie

przerwania

przetwarzanie

A/C  (2)

wykonaj

pomiar

zgłoszenie

przerwania

odczyt

danych

przyj

ę

cie

przerwania

odczyt

danych

odczyt

danych

2

strukturalne opó

ź

nienia

Przerwania
THS1206

przetwarzanie

A/C  (1)

wykonaj
pomiary

zgłoszenie przerwania

przyj

ę

cie przerwania

przetwarzanie

A/C  (2)

odczyt

danych

1

strukturalne opó

ź

nienia

odczyt

danych

2

przetwornik A/C

koniec

pomiaru

pocz

ą

tek

pomiaru

dane

MCU

licznik

Px.y

zgłoszenie
przerwania

kontroler

przerwa

ń

port

wej

ś

ciowy

wykonaj
pomiar

1

4

2

3

5

8

7

6

9

12

13

14

15

16

11

10

5

5

wska

ź

nik

odczytu

wska

ź

nik

zapisu

wyniki pomiarów

w buforze FIFO

np. THS1206 (TI)

THS1206. 12-BIT, 4 ANALOG INPUT, 6 MSPS, 

SIMULTANEOUS SAMPLING ANALOG-TO-DIGITAL CONVERTERS. 

Texas Instruments, SLAS217H – JULY 2003

Problemy i pytania

1. Jaki jest cel stosowania przerwa

ń

 ?

2. Jak rozwin

ąć

 poj

ę

cie ‘ISR’ ?

3. Czy si

ę

 ró

ż

ni

ą

 metody: polling oraz interrupt ?

4. Jak zachowuje si

ę

 procesor po zgłoszeniu przerwania ?

5. Czym si

ę

 ró

ż

ni

ą

 przerwania maskowalne od niemaskowalnych ?

6. Na czym polega maskowanie przerwa

ń

 ?

7. Jaki jest powód stosowania przerwa

ń

 niemaskowlnych ?

8. W jakim celu w procesorach jest stosowane przerwanie programowe SWI ?

9. Jak w procesorach Cortex-Mx jest interpretowane poj

ę

cie przerwania 

wektorowego ?

10. Jakie s

ą

 

ź

ródła przerwa

ń

 w mikrokontrolerach ?

11. Jak w mikrokontrolerach s

ą

 identyfikowane 

ź

ródła przerwa

ń

 ?

12. Co to jest tablica wektorów przerwa

ń

 ?

13. Czym si

ę

 ró

ż

ni

ą

 przerwania jednopoziomowe od wielopoziomowych ?

14. Co oznacza poj

ę

cie ‘zagnie

ż

d

ż

enie przerwa

ń

’ ?

15. Jakie czasy definiuj

ą

 reakcj

ę

 procesora po przyj

ę

ciu przerwania ?