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
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
Bł
ą
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
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
w
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
−
w
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
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
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
i
LR
przesłane na stos
•
PC = adres
procedury obsługi z tablicy wektorów przerwa
ń
sprz
ę
towa
mo
ż
liwo
ść
przyjmowania
przerwa
ń
zagnie
ż
d
ż
onych
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)
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:
a
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)
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
2
–14
NMI
–2
fixed
0x0000 0008 Asynchronous
3
–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.
STMicroelectronics, DocID025274 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
2
–14
NMI
(1,2)
–2
fixed
3
–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.
STMicroelectronics, DocID025274 Rev 2, April 2014, p.253
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
i
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
i
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.
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 ?