Żądanie obsługi % reakcja 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
Podstawy techniki
czasu pracy procesora
mikroprocesorowej brak natychmiastowej reakcji procesora wskutek zdeterminowanej
przez program kolejności wykonywanych procedur testujących
ETEW006
Sprzętowa reakcja procesora - wykorzystanie systemu przerwań
Przerwania
(Interrupt):
brak obciążenia procesora jeśli brak żądania obsługi przerwania
(Interrupt Request)
natychmiastowa reakcja procesora po spełnieniu pewnych
Andrzej Stępień
warunków, dodatkowych warunków; rozpoczęcie wykonywania
procedury obsługi przerwania (podobieństwo do wywołania
Katedra Metrologii Elektronicznej i Fotonicznej
podprogramu)
Przerwanie
Obsługa przerwań
(Interrupt) [1#2]
dokończenie wykonywanej przez procesor instrukcji (przerwanie
złożonej instrukcji (load-multiple or store-multiple) w Cortex-M)
obsługa przerwań (interrupt handler), procedury obsługi przerwań
zawieszenie (przerwanie) wykonywanego programu, najczęściej po
(Interrupt Service Routine) jest podprogramem wywoływanym lub
spełnieniu dodatkowych warunków, zapamiętanie wszystkich danych
przyjętym żądaniem pochodzącym od:
niezbędnych do kontynuowania zawieszonego programu
% systemu operacyjnego (operating system software interrupt)
wykonanie podprogramu (Interrupt Service Routine) obsługi
% układów peryferyjnych mikrokontrolera (device driver interrupt)
zdarzenia (sygnału) żądającego (wymagającego) obsługi
% obiektów (sygnałów) zewnętrznych (external interrupt)
! kontynuacja zawieszonego programu
odtworzenie
zachowanie
obsługa przerwań posiada wiele funkcji, które różnią się w zależności
stanu procesora
stanu procesora
jednopoziomowa
od przyczyny (zródła) przerwania i szybkości, przy której obsługa
ISR obsługa
przerwań kończy swoje zadanie przerwań
program
t
żądanie przerwania
Przerwanie USB
(Interrupt) [2#2] Przerwaniowy transfer danych (Polling)
Stan procesora:
rejestry robocze (R0, R1, & )
stosowany przy transmisji danych do/z urządzeń współpracujących z
rejestr statusowy (PSW, ... )
człowiekiem (human-perceptible)
licznik rozkazów (PC zawiera adres instrukcji, która byłaby wykonana,
gdyby nie wystąpiło przerwanie; problem przetwarzania potokowego)
nadawanie/odbiór danych do/z urządzeń wymagających periodycznej
inne rejestry ważne dla wykonywanego programu
obsługi
gwarancja minimalnego czasu między transmisjami, np. 1 ms w trybie
szybkim (Full Speed transmission)
odtworzenie
zachowanie
stanu procesora
stanu procesora
jednopoziomowa
w przypadku błędów transmisji, powtórzona transmisja w następnym
ISR obsługa
przerwań
wyznaczonym okresie
program
t
żądanie przerwania
1
Typy przerwań
Typy przerwań
Zerowanie procesora (Hardware Reset)
sprzętowe zerowanie procesora (Hardware Reset) rozpoczęcie
wykonywania procedury bez warunków wstępnych (zawsze), zmiana
sprzętowe zerowanie procesora (Hardware Reset) rozpoczęcie
wartości niektórych rejestrów
wykonywania procedury bez warunków wstępnych (zawsze), zmiana
przerwanie sprzętowe niemaskowalne (Non - Maskable Interrupt)
wartości niektórych rejestrów
rozpoczęcie wykonywania obsługi przerwania bez warunków wstępnych
zerowanie / ustawienie licznika rozkazów
przerwanie sprzętowe niemaskowalne (Non - Maskable Interrupt) rozpoczęcie
(zawsze)
wykonywania obsługi przerwania bez warunków wstępnych (zawsze)
przerwanie sprzętowe maskowalne (Maskable Interrupt)
blokada przerwań maskowalnych
przerwanie sprzętowe maskowalne (Maskable Interrupt)
rozpoczęcie wykonywania procedury obsługi przerwania zależnie od
rozpoczęcie wykonywania procedury obsługi przerwania zależnie od spełnienia
spełnienia określonych warunków wstępnych; programowe blokowanie /
określonych warunków wstępnych; programowe blokowanie / odblokowanie obsługi
zerowanie / ustawienie rejestrów specjalnych mikrokontrolera
odblokowanie obsługi przerwań (Enable / Disable Interrupt)
przerwań (Enable / Disable Interrupt)
przerwanie programowe (SoftWare Interrupt)
wyłączenie trybu użytkownika (przy różnych trybach pracy)
przerwanie programowe (SoftWare Interrupt)
programowe wywołanie obsługi przerwania
programowe wywołanie obsługi przerwania
operacja pułapki (Trap), rodzaj wyjątku operacja pułapki (Trap), rodzaj wyjątku
inicjowana pojawieniem się błędu, np. próba dzielenia przez zero
inicjowana pojawieniem się błędu, np. próba dzielenia przez zero
przerwanie fałszywe (spurious, pozorne, nieprawdziwe, fałszywe, błędne,
przerwanie fałszywe (spurious, pozorne, nieprawdziwe, fałszywe, błędne,
nieoczekiwane) efekt zakłóceń lub błędów konstrukcyjnych
nieoczekiwane) efekt zakłóceń lub błędów konstrukcyjnych
Typy przerwań
Typy przerwań
Niemaskowalne (Non-Maskable Interrupt)
Maskowalne (Maskable Interrupt)
przerwanie, którego procesor nie może zignorować (zamaskować)
sprzętowe zerowanie procesora (Hardware Reset) rozpoczęcie wykonywania sprzętowe zerowanie procesora (Hardware Reset) rozpoczęcie wykonywania
o najwyższym priorytecie, nie są zagnieżdżone
procedury bez warunków wstępnych (zawsze), zmiana wartości niektórych rejestrów procedury bez warunków wstępnych (zawsze), zmiana wartości niektórych rejestrów
przerwanie przyjęte (obsługiwane) Maskable Interrupt) rozpoczęcie
po spełnieniu pewnych
przerwanie sprzętowe niemaskowalne (Non - Maskable Interrupt) przerwanie sprzętowe niemaskowalne (Non -
wykonywania obsługi przerwania bez warunków wstępnych (zawsze)
(dodatkowych) warunków (zamaskowane)
rozpoczęcie wykonywania obsługi przerwania bez warunków wstępnych
(zawsze)
przerwanie sprzętowe maskowalne (Maskable Interrupt)
stosowane przy raportowaniu krytycznych błędów
przerwanie sprzętowe maskowalne (Maskable Interrupt) (np. błędy działania rozpoczęcie wykonywania procedury obsługi przerwania zależnie od
rozpoczęcie wykonywania procedury obsługi przerwania zależnie od spełnienia spełnienia określonych warunków wstępnych; programowe blokowanie /
chipsetów, błędne działanie pamięci systemu, błędy magistral),
określonych warunków wstępnych; programowe blokowanie / odblokowanie obsługi
odblokowanie obsługi przerwań (Enable / Disable Interrupt)
debugowaniu (obsługa przerwania w specjalnym trybie monitora w celu
przerwań (Enable / Disable Interrupt)
diagnozy systemu), profilowania kodu (software profiling) pod kątem
przerwanie programowe (SoftWare Interrupt)
przeważnie blokowane/odblokowywane (enable/disable) przez:
przerwanie programowe (SoftWare Interrupt)
optymalizacji części programu (zwiększenie szybkości wykonywania kodu, programowe wywołanie obsługi przerwania
programowe wywołanie obsługi przerwania % jeden ogólny (globalny) znacznik dla wszystkich przerwań
zmniejszenie zapotrzebowania na pamięć, częstości wywołania funkcji oraz
operacja pułapki (Trap)
% indywidualne znaczniki dla każdego zródła przerwania
czasów ich wykonania) itp.
operacja pułapki (Trap)
inicjowana pojawieniem się błędu, np. próba dzielenia przez zero
inicjowana pojawieniem się błędu, np. próba dzielenia przez zero
w mikrokontrolerach do sygnalizacji spadku napięcia zasilającego (power
przerwanie fałszywe (spurious, pozorne, nieprawdziwe, fałszywe, błędne) ,
żądanie przerwania może być pamiętane w czasie jego
przerwanie fałszywe (spurious, pozorne, nieprawdziwe, fałszywe, błędne)
nieoczekiwane efekt zakłóceń lub błędów konstrukcyjnych
down detection, drop of voltage, ..), błędnego działania generatora
zablokowania
efekt zakłóceń lub błędów konstrukcyjnych
taktującego, problemów z pamięcią
Typy przerwań
Wybrane SWI w x86
Programowe (SWI)
Nr Typ przerwania Nr Typ przerwania
00h Dzielenie przez zero 19h Gorący restart systemu
sprzętowe zerowanie procesora (Hardware Reset) rozpoczęcie wykonywania
01h Praca krokowa 1Ah Obsługa drukarki
procedury bez warunków wstępnych (zawsze), zmiana wartości niektórych rejestrów
wywoływane z kodu programu
02h Przerwanie niemaskowalne 1Bh CTRL + BREAK
przerwanie sprzętowe niemaskowalne (Non - Maskable Interrupt) rozpoczęci
03h Pułapka (Breakpoint) 1Ch Przerwanie zegarowe użytkownika
wykorzystywane do komunikacji z jądrem systemu operacyjnego e
wykonywania obsługi przerwania bez warunków wstępnych (zawsze)
04h Nadmiar 1Dh Tabela trybów wyświetlania
(firmware, BIOS, DOS, Windows, UNIX, Linux, Android, ..),
05h Wydruk zawartości ekranu 1Fh Tablica wzorców znaków
przerwanie sprzętowe maskowalne (Maskable Interrupt)
wywołania funkcji systemowych (np. wyświetlanie znaków, wysłanie
08h Przerwanie zegara (RTC) 20h Zakończenie programu
rozpoczęcie wykonywania procedury obsługi przerwania zależnie od spełnienia
znaków łączem szergowym, drukowanie, odczyt kodu naciśniętego
09h Przerwanie klawiatury 21h Funkcje MS-DOS
określonych warunków wstępnych; programowe blokowanie / odblokowanie obsługi
klawisza, obsługi pamięci masowej, ..)
0Eh Przerwanie kontrolera dysków 22h Zakończenie programu
przerwań (Enable / Disable Interrupt)
10h Obsługa monitora 23h CTRL + C (CTRL + BREAK)
przerwanie programowe (SoftWare Interrupt)
11h Konfiguracja komputera 24h Błąd krytyczny urządzenia
programowe wywołanie obsługi przerwania
12h Rozmiar pamięci 25h Czytanie sektora dyskowego
13h Obsługa dysków 26h Pisanie sektora dyskowego
operacja pułapki (Trap)
najczęściej parametry wywoływanych funkcji są przenoszone przez
14h Obsługa złącza szeregowego ................................................................
inicjowana pojawieniem się błędu, np. próba dzielenia przez zero
rejestry ustawiane przez program wywołujący
15h Dodatkowe funkcje AT 2Fh Obsługa równoczesnych procesów
przerwanie fałszywe (spurious, pozorne, nieprawdziwe, fałszywe, błędne,
16h Obsługa klawiatury 33h Obsługa myszy
nieoczekiwane) efekt zakłóceń lub błędów konstrukcyjnych
17h Obsługa drukarki 41h Tablica parametrów
18h Uruchomienie BASIC-a z ROM 46h dysku twardego 0/1
2
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
Typy przerwań Typy przerwań
Trap Spurious
w ARM7 wynik braku właściwej synchronizacji kontrolera przerwań
sprzętowe zerowanie procesora (Hardware Reset) rozpoczęcie wykonywania
sprzętowe zerowanie procesora (Hardware Reset) rozpoczęcie wykonywania
(VIC) z rdzeniem procesora (core) asynchronicznej obsługi przerwań;
procedury bez warunków wstępnych (zawsze), zmiana wartości niektórych rejestrów
procedury bez warunków wstępnych (zawsze), zmiana wartości niektórych rejestrów
również efekt przetwarzania potokowego
przerwanie sprzętowe niemaskowalne (Non - Maskable Interrupt) rozpoczęcie
przerwanie sprzętowe niemaskowalne (Non - Maskable Interrupt) rozpoczęcie
wykonywania obsługi przerwania bez warunków wstępnych (zawsze)
w procesorach LPC2000:
wykonywania obsługi przerwania bez warunków wstępnych (zawsze)
1. kontroler przerwań (VIC) generuje przerwanie dla rdzenia (core)
przerwanie sprzętowe maskowalne (Maskable Interrupt)
przerwanie sprzętowe maskowalne (Maskable Interrupt)
rozpoczęcie wykonywania procedury obsługi przerwania zależnie od spełnienia
wyjątek (exception, np. systemie Linux) spowodowany np.
rozpoczęcie wykonywania procedury obsługi przerwania zależnie od spełnienia
2. rdzeń (core) zapamiętuje stan żądania przerwania
określonych warunków wstępnych; programowe blokowanie / odblokowanie obsługi
określonych warunków wstępnych; programowe blokowanie / odblokowanie obsługi
przez dzielenie przez zero lub nieprawidłowy dostęp do pamięci
przerwańprzetwarzanie potokowe, zwykle kilka cykli maszynowych
3. trwa (Enable / Disable Interrupt)
przerwań (Enable / Disable Interrupt)
sposób wywołania procedury jądra (wywołanie systemowe) ze 4. rdzeń (core) pobiera adres procedury obsługi oczekującego przerwania
przerwanie programowe (SoftWare Interrupt)
przerwanie programowe (SoftWare Interrupt)
względu na wyższy priorytet niż kod użytkownika programowe wywołanie obsługi przerwania
programowe wywołanie obsługi przerwania
jeśli znika przerwanie w trakcie przetwarzania (krok 3), generowane jest
operacja pułapki (Trap), rodzaj wyjątku
operacja pułapki (Trap), rodzaj wyjątku
nieistniejące przerwanie
inicjowana pojawieniem się błędu, np. próba dzielenia przez zero
inicjowana pojawieniem się błędu, np. próba dzielenia przez zero
przerwanie fałszywe (spurious, pozorne, nieprawdziwe, fałszywe, błędne,
przerwanie fałszywe (spurious, pozorne, nieprawdziwe, fałszywe, błędne,
nieoczekiwane) efekt zakłóceń lub błędów konstrukcyjnych
nieoczekiwane) efekt zakłóceń lub błędów konstrukcyjnych
Identyfikacja urządzenia Adresy procedur obsługi przerwań
Programowa / sprzętowa identyfikacja urządzenia / sygnału
zgłaszającego obsługę/przerwanie:
Adres początkowy procedury obsługi przerwania:
badanie obiegiem
realizowane programowo w procedurach testujących
- dostarczany przez urządzenie zewnętrzne, to samo, które wywołało
przerwanie; po akceptacji przerwania przesyłanie szyną danych
metoda łańcuchowa:
adresu początku obsługi przerwania
urządzenia dołączone do procesora w kolejności ważności
(pierwszeństwa) obsługi przerwania
- w tablicy wektorów przerwań (Cortex-Mx):
sygnał potwierdzenia przyjęcia przerwania jest bramkowany w w tablicy wyłącznie 4 " N bajtów adresów przerwań (32 bitowa szyna
urządzeniu zgłaszającym przerwanie, które podaje swój numer adresowa); pozycja adresu zależna od rodzaju przerwania
identyfikacyjny szyną danych
stałe adresy ustalone przez producenta procesora, np. co 4 lub co 8
metoda wektorowa
bajtów (3, 0Bh, 13h itd.)
wygenerowanie adresu podprogramu obsługi przerwania od
urządzenia zgłaszającego przerwanie
StartUp_LPC11xx.s
PICmicro MID-RANGE MCU FAMILY.
Microchip Technology, December 1997
UM10398. LPC111x/LPC11Cxx User manual.
NXP, Rev. 12.3 10 June 2014, p.466
Cortex-M0 (LPC1114)
PICmicro MID-RANGE MCU FAMILY
Exception & Interrupt Sources [1#2]
; Vector Table Mapped to Address 0 at Reset
When an interrupt is responded to, the Global
AREA RESET, DATA, READONLY
Interrupt Enable bit (GIE) bit is cleared to disable
Exception
EXPORT __Vectors IRQ number
any further interrupt, the return address is pushed address
number
into the stack and the PC is loaded with 0004h. __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
Interrupt to CPU
DCD 0 ; 6 / 10 Reserved 0x0000 0018
clear GIE bit
DCD 0 ; 7 / 9 Reserved 0x0000 001C
addr = 0004h
DCD 0 ; 8 / 8 Reserved 0x0000 0020
DCD 0 ; 9 / 7 Reserved 0x0000 0024
GIE
DCD 0 ; 10 / 6 Reserved 0x0000 0028
DCD SVC_Handler ; 11 / 5 SVCall Handler 0x0000 002C
Once in the interrupt service routine the source(s) of
DCD DebugMon_Handler ; 12 / 4 Debug Monitor Handler 0x0000 0030
the interrupt can be determined by polling the
DCD 0 ; 13 / 3 Reserved 0x0000 0034
interrupt flag bits. Generally the interrupt flag bit(s) DCD PendSV_Handler ; 14 / 2 PendSV Handler 0x0000 0038
DCD SysTick_Handler ; 15 / 1 SysTick Handler 0x0000 003C
must be cleared in software before re-enabling the
global interrupt to avoid recursive interrupts.
DCD IRQ_Handler ; 16 / +0 IRQ Handler 0x0000 0040
3
Reserved
Reserved
StartUp_LPC11xx.s www.keil.com
Keil Software Assembler Reference
www.Keil.com
; External Interrupts
IRQ number
Cortex-M0 (LPC1114)
address
; External Interrupts DCD WWDG_IRQHandler ; Window WatchDog
startup_stm32f4xx.s [1#4]
DCD WAKEUP_IRQHandler ; 16+ 0: Wakeup PIO0.0 0x0000 0040 DCD PVD_IRQHandler ; PVD through EXTI Line detection
Interrupt Sources
DCD WAKEUP_IRQHandler ; 16+ 1: Wakeup PIO0.1 0x0000 0044
DCD TAMP_STAMP_IRQHandler ; Tamper and TimeStamps through
DCD WAKEUP_IRQHandler ; 16+ 2: Wakeup PIO0.2 0x0000 0048
; the EXTI line
DCD WAKEUP_IRQHandler ; 16+ 3: Wakeup PIO0.3 0x0000 004C
DCD RTC_WKUP_IRQHandler ; RTC Wakeup through the EXTI line
DCD WAKEUP_IRQHandler ; 16+ 4: Wakeup PIO0.4 0x0000 0050
DCD FLASH_IRQHandler ; FLASH
...............................................................................................
DCD RCC_IRQHandler ; RCC
DCD WAKEUP_IRQHandler ; 16+12: Wakeup PIO1.0 0x0000 0070
DCD EXTI0_IRQHandler ; EXTI Line0
DCD CAN_IRQHandler ; 16+13: CAN 0x0000 0074
DCD SSP1_IRQHandler ; 16+14: SSP1 0x0000 0078 DCD EXTI1_IRQHandler ; EXTI Line1
DCD I2C_IRQHandler ; 16+15: I2C 0x0000 007C DCD EXTI2_IRQHandler ; EXTI Line2
DCD TIMER16_0_IRQHandler ; 16+16: 16-bit Counter-Timer 0 0x0000 0080
DCD EXTI3_IRQHandler ; EXTI Line3
DCD TIMER16_1_IRQHandler ; 16+17: 16-bit Counter-Timer 1 0x0000 0084
DCD EXTI4_IRQHandler ; EXTI Line4
DCD TIMER32_0_IRQHandler ; 16+18: 32-bit Counter-Timer 0 0x0000 0088
DCD DMA1_Stream0_IRQHandler ; DMA1 Stream 0
DCD TIMER32_1_IRQHandler ; 16+19: 32-bit Counter-Timer 1 0x0000 008C
DCD DMA1_Stream1_IRQHandler ; DMA1 Stream 1
DCD SSP0_IRQHandler ; 16+20: SSP0 0x0000 0090
DCD DMA1_Stream2_IRQHandler ; DMA1 Stream 2
DCD UART_IRQHandler ; 16+21: UART 0x0000 0094
DCD DMA1_Stream3_IRQHandler ; DMA1 Stream 3
DCD USB_IRQHandler ; 16+22: USB IRQ 0x0000 0098
DCD USB_FIQHandler ; 16+24: USB FIQ 0x0000 009C DCD DMA1_Stream4_IRQHandler ; DMA1 Stream 4
DCD ADC_IRQHandler ; 16+24: A/D Converter 0x0000 00A0 DCD DMA1_Stream5_IRQHandler ; DMA1 Stream 5
DCD WDT_IRQHandler ; 16+25: Watchdog Timer 0x0000 00A4
DCD DMA1_Stream6_IRQHandler ; DMA1 Stream 6
DCD BOD_IRQHandler ; 16+26: Brown Out Detect 0x0000 00A8
DCD ADC_IRQHandler ; ADC1, ADC2 and ADC3s
DCD FMC_IRQHandler ; 16+27: Flash Memory Ctrl 0x0000 00AC
DCD CAN1_TX_IRQHandler ; CAN1 TX
DCD PIOINT3_IRQHandler ; 16+28: PIO INT3 0x0000 00B0
DCD CAN1_RX0_IRQHandler ; CAN1 RX0
DCD PIOINT2_IRQHandler ; 16+29: PIO INT2 0x0000 00B4
DCD CAN1_RX1_IRQHandler ; CAN1 RX1
DCD PIOINT1_IRQHandler ; 16+30: PIO INT1 0x0000 00B8
DCD CAN1_SCE_IRQHandler ; CAN1 SCE
DCD PIOINT0_IRQHandler ; 16+31: PIO INT0 0x0000 00BC
www.keil.com www.keil.com
Keil Software Assembler Reference Keil Software Assembler Reference
startup_stm32f4xx.s (Cortex-M4F) [2#4]
startup_stm32f4xx.s (Cortex-M4F) [3#4]
DCD EXTI9_5_IRQHandler ; External Line[9:5]s
DCD TIM1_BRK_TIM9_IRQHandler ; TIM1 Break and TIM9
DCD TIM8_BRK_TIM12_IRQHandler ; TIM8 Break and TIM12
DCD TIM1_UP_TIM10_IRQHandler ; TIM1 Update and TIM10
DCD TIM8_UP_TIM13_IRQHandler ; TIM8 Update and TIM13
DCD TIM1_TRG_COM_TIM11_IRQHandler ; TIM1 Trigger and
DCD TIM8_TRG_COM_TIM14_IRQHandler ; TIM8 Trigger and
; Commutation and TIM11
; Commutation and TIM14
DCD TIM1_CC_IRQHandler ; TIM1 Capture Compare
DCD TIM8_CC_IRQHandler ; TIM8 Capture Compare
DCD TIM2_IRQHandler ; TIM2
DCD DMA1_Stream7_IRQHandler ; DMA1 Stream7
DCD TIM3_IRQHandler ; TIM3
DCD FSMC_IRQHandler ; FSMC
DCD TIM4_IRQHandler ; TIM4
DCD SDIO_IRQHandler ; SDIO
DCD I2C1_EV_IRQHandler ; I2C1 Event
DCD TIM5_IRQHandler ; TIM5
DCD I2C1_ER_IRQHandler ; I2C1 Error
DCD SPI3_IRQHandler ; SPI3
DCD I2C2_EV_IRQHandler ; I2C2 Event
DCD UART4_IRQHandler ; UART4
DCD I2C2_ER_IRQHandler ; I2C2 Error
DCD UART5_IRQHandler ; UART5
DCD SPI1_IRQHandler ; SPI1
DCD TIM6_DAC_IRQHandler ; TIM6 and DAC1&2 underrun errors
DCD SPI2_IRQHandler ; SPI2
DCD TIM7_IRQHandler ; TIM7
DCD USART1_IRQHandler ; USART1
DCD DMA2_Stream0_IRQHandler ; DMA2 Stream 0
DCD USART2_IRQHandler ; USART2
DCD DMA2_Stream1_IRQHandler ; DMA2 Stream 1
DCD USART3_IRQHandler ; USART3
DCD DMA2_Stream2_IRQHandler ; DMA2 Stream 2
DCD EXTI15_10_IRQHandler ; External Line[15:10]s
DCD DMA2_Stream3_IRQHandler ; DMA2 Stream 3
DCD RTC_Alarm_IRQHandler ; RTC Alarm (A and B) through
DCD DMA2_Stream4_IRQHandler ; DMA2 Stream 4
; EXTI Line
DCD ETH_IRQHandler ; Ethernet
DCD OTG_FS_WKUP_IRQHandler ; USB OTG FS Wakeup
DCD ETH_WKUP_IRQHandler ; Ethernet Wakeup through EXTI line
; through EXTI line
www.keil.com
Keil Software Assembler Reference
startup_stm32f4xx.s (Cortex-M4F) [4#4]
DCD CAN2_TX_IRQHandler ; CAN2 TX
Jednopoziomowa obsługa przerwań
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
blokowanie przyjęcia następnego przerwania w przypadku, gdy nie jest
DCD DMA2_Stream5_IRQHandler ; DMA2 Stream 5
zakończona obsługa poprzedniego przerwania
DCD DMA2_Stream6_IRQHandler ; DMA2 Stream 6
DCD DMA2_Stream7_IRQHandler ; DMA2 Stream 7
wykonanie jednej instrukcji z programu głównego przed rozpoczęciem
DCD USART6_IRQHandler ; USART6
obsługi zgłoszonego (czekającego w kolejce) przerwania
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 priorytet przerwania
DCD OTG_HS_WKUP_IRQHandler ; USB OTG HS Wakeup through EXTI
DCD OTG_HS_IRQHandler ; USB OTG HS
ISR
DCD DCMI_IRQHandler ; DCMI
DCD CRYP_IRQHandler ; CRYP crypto
program
DCD HASH_RNG_IRQHandler ; Hash and Rng
DCD FPU_IRQHandler ; FPU
żądanie żądanie
przerwania A przerwania A
__Vectors_End
__Vectors_Size EQU __Vectors_End - __Vectors
żądanie przerwania B żądanie przerwania C
4
StartUp_STM32F4xx.s
[1#4]
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
Wielopoziomowa obsługa przerwań Cortex-Mx
Zagnieżdżenie przerwań Switching Processor Mode at Interrupt
Interrupt
przyporządkowanie różnych poziomów priorytetów procedurom obsługi
Interrupt Service
Interrupt
exit
przerwań, co umożliwia przerwanie bieżącej procedury przez inną event Routine (ISR)
procedurę o wyższym priorytecie:
Handler mode
Main
(privileged)
priorytety programowe są ustalane przez programistę, zwykle od 2 do program
16 poziomów priorytetów
Stacking Unstacking
Thread mode Thread mode
(privileged) (privileged)
priorytety sprzętowe są ustalane przez producenta procesora
St V Interrupt handler Ust
priorytet przerwania
przerwania zagnieżdżone Vector fetch
(Nesting of Interrupts )
Interrupt
Interrupt Service
ISR exit
Interrupt
Routine (ISR)
event
program
Handler mode
Main
żądanie żądanie
(privileged)
program
przerwania A przerwania A
Stacking Unstacking
Thread mode Thread mode
żądanie przerwania B żądanie przerwania C (user) (user)
J. Yiu: The Definitive Guide to the ARM Cortex-M3.
Second Edition. Elsevier Inc. 2010, p.151
Cortex-Mx Nested Interrupts
Procedury obsługi przerwań
Interrupt 1 request (Low priority)
(Interrupt Handling / Interrupt Service Routine)
Interrupt 2 request
(High priority)
Interrupt exit
ISR 2
podprogram wywoływany po wykryciu żądania obsługi przerwania
Exception
status
ISR 1 ISR 1
kod programu obsługujący zwykle potrzeby układów peryferyjnych
mikrokontrolera lub wykorzystujący cechy systemu operacyjnego
Main program
Vector fetch
Stacking Unstacking
zachowanie stanu procesora, ochrona (przechowanie stanu
St V ISR 1 St V ISR 2 Ust ISR 1 Ust
V
zwykle na stosie) rejestrów stosowanych w programie obsługi
LR = 0xFFFF FFF9 LR = 0xFFFF FFF1 przerwania jeśli brak bankowa rejestrów
Main stack (MSP) Main stack (MSP) Main stack (MSP)
początek procedury w ustalonym adresie (wektorze)
Handler Handler Handler
Thread mode Thread mode
mode mode mode
charakterystyczne (typowe dla przerwań) zakończenie procedury
Process stack (PSP) Main stack (MSP) Process stack (PSP)
LR = 0xFFFF FFFD LR = 0xFFFF FFF1
Przełączanie danych
MSP430 sprzętowo/programowe:
Obsługa przerwań
" PC, SR przesłane na stos
" GIE = 0, blokada wszystkich przerwań (rejestr SR)
" PC = adres procedury obsługi z tablicy wektorów przerwań
Ochrona, przechowywanie stanu rejestrów procesora po przyjęciu i
rozpoczęciu realizacji procedury obsługi przerwania: STM8S sprzętowe:
" PC, X, Y, A, CCR przesłane na stos
przełączanie danych (data swapping)
" I1 = I0 = 1, blokada przerwań programowych (rejestr CC)
przechowywanie na stosie zawartości rejestrów wykorzystywanych w
" PC = adres procedury obsługi z tablicy wektorów przerwań
obsłudze przerwania
ARM7 IRQ sprzętowo/programowe:
sprzętowe
" zmiana trybu pracy na IRQ_mod (uprzywilejowany)
sprzętowa
bez konieczności wprowadzania dodatkowych instrukcji na
" PC przesłane do rejestru R14_irq (Link Register)
możliwość
początku i końcu programu obsługi przerwania, " ochrona rejestru statusowego CPSR_mod SPSR_irq
przyjmowania
" bankowanie rejestru statusowego CPSR_irq
np. MSP430, Cortex-Mx
przerwań
" I = 1, blokada wszystkich przerwań IRQ (rejestr CPSR_irq)
programowe
zagnieżdżonych
" PC = adres procedury obsługi z VICVectAddr
dodatkowe instrukcje na początku (PUSH) i końcu (POP) programu
obsługi przerwania, np. x86
Cortex-M3 sprzętowe (Nested Interrupt Support):
" zmiana trybu na Handler Mode (uprzywilejowany)
przełączanie kontekstowe (context switching)
" PC, PSR, R0 R3, R12 i LR przesłane na stos
wykorzystanie dodatkowych zestawów, banków rejestrów, np. ARM7
" PC = adres procedury obsługi z tablicy wektorów przerwań
5
Czas reakcji
Koniec procedury obsługi przerwania
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:
Każdy podprogram obsługi przerwania musi kończyć się właściwą
sposobu testowania kolejności zgłoszonych przerwań,
instrukcją, np.:
sposobu maskowania przerwań, reakcji systemu operacyjnego itp..
MCS 51, MSP430: RETI
liczby cykli maszynowych potrzebnych do zakończenia bieżącej,
PIC17Cxx: RETFIE
wykonywanej instrukcji
68HC7xx : RTI
typu wykonywanych instrukcji, np. programowania kontrolera priorytetów
STM8S: IRET przerwań.
Cortex-M0/M0+: BX LR (+Unstacking)
ISR
aby odtworzyć stan rejestrów kontrolera priorytetów przerwań program
żądanie przerwania
reakcja na przerwanie rozpoczęcie
(Interrupt Request)
(Response Time) wykonywania ISR
Czas opóznienia Czas opóznienia i reakcji
Czas opóznienia (Latency Time) czas liczony od momentu zgłoszenia
przerwania do momentu rozpoczęcia wykonywania podprogramu obsługi przygotowanie do
przerwania (ISR); czas zależny dodatkowo od:
rozpoczęcia ISR
reakcja procesora
sposobu wywołania podprogramu obsługi przerwania, szybkości
....
PUSH PC CALL ISR
na żądanie procedury
przesłania na stos licznika rozkazów PC,
obsługi przerwania
liczby bajtów innych rejestrów przesyłanych na stos przed
rozpoczęciem podprogramu obsługi przerwania.
ISR
program
przygotowania
reakcja na żądanie reakcja na przerwanie
PUSH PC CALL ISR
obsługi przerwania ....
(Response Time)
żądanie przerwania rozpoczęcie
ISR opóznienie (Latency Time)
(Interrupt Request) wykonywania ISR
program
opóznienie (Latency Time)
żądanie przerwania rozpoczęcie
(Interrupt Request) wykonywania ISR
Cortex"!-M0+. Technical Reference Manual.
ARM DDI 0484C, Revision: r0p1, p.3-10
PICmicro MID-RANGE MCU FAMILY. Microchip Technology, December 1997, 33023a.pdf
Cortex-M0/M0+
8.3 Interrupt Latency (p.132)
Czas opóznienia i reakcji
Interrupt latency is defined as the time from the interrupt event
Czas reakcji
(the interrupt flag bit gets set) to the time that the instruction at
zastosowanie zaawansowanych metod obsługi wyjątków i przerwań
address 0004h starts execution (when that interrupt is enabled).
(ARMv6-M Architecture Reference Manual)
minimalizacja opóznienia w przyjmowaniu przerwania:
przygotowanie do rozpoczęcia ISR
przerwanie wykonywania złożonej, wielokrotnej instrukcji (load-
....
PUSH PC CALL ISR
reakcja procesora na żądanie
multiple / store-multiple instruction) i rozpoczęcie obsługi oczekującego
procedury obsługi przerwania
przerwania
ISR
po powrocie z obsługi przerwania, jeszcze raz, od początku,
program
reakcja na przerwanie rozpoczęcie rozpoczęcie wykonywania przerwanej instrukcji
żądanie przerwania
wykonywania ISR
(Response Time)
(Interrupt Request)
ta sama zasada dla 32-cyklowych operacji mnożenia (programowe
opóznienie (Latency Time)
operacje mnożenia)
oprogramowanie nie może używać złożonych, wielokrotnych instrukcji jeśli
8-bit Microcontrollers. Databook - 1997. Temic Semiconductors, 1997
prowadzi to do fałszowania wartości zmiennych (niepożądane skutki uboczne
Response time ... if a request is active and conditions are right for
obsługi przerwań)
it to be acknowledged, a hardware subroutine call to the requested
stałe opóznienie w przyjęciu przerwania:
service routine will be the next instruction to be executed
15 cykli (Cortex-M0/M0+) .. 12 cykli (Cortex-M3)
(polling cycle + long CALL to interrupt vector address).
6
Dobre rady [1#2] Dobre rady [2#2]
" każde przerwanie musi być świadomie uaktywnione, globalnie i
indywidualnie
" żądanie obsługi przerwania nie jest realizowane natychmiast; czas
" każdy program obsługi przerwania musi być zakończony specjalną
opóznienia zależy od wykonywanych w danym momencie instrukcji
instrukcją
" sygnał wywołujący przerwanie reagujące na poziom musi się
" kolejne żądanie obsługi przerwania mogą się pojawić po
zakończyć przed zakończeniem procedury obsługi przerwania - w
zakończeniu obsługi bieżącego przerwania + czas wykonania jednej,
przeciwnym razie przerwanie jest ponownie wywoływane
dodatkowej instrukcji
" priorytet przyjmowanych przerwań zależy od:
" wielopoziomowe, hierarchiczne struktury procedur obsługi
konstruktorów mikrokontrolera (struktura ustalona w fazie produkcji)
przerwań stosują tylko najlepsi lub szaleńcy
programisty (struktura dostosowana do potrzeb aplikacji
" obsługa przerwań wielopoziomowych jest możliwa tylko przez
programową zmianę priorytetów
UM10398. LPC11xx User Manual.
UM10398. LPC11xx User Manual.
NXP, Rev. 12.3 10 June 2014, p.69
NXP, Rev. 12.3 10 June 2014, p.69
Cortex-M0/M0+ Stany wyjątków / przerwań
Kontroler przerwań PM0223. Programming manual STM32L0 Series Cortex-M0+ programming manual.
STMicroelectronics , DocID025763 Rev 1 , April 2014, p.82
Stany wyjątków / przerwań:
Zagnieżdżony wektorowy kontroler przerwań (NVIC Nested
nieaktywny (inactive) wyjątek/przerwanie nieaktywne i
Vectored Interrupt Controller) jest integralną częścią rdzenia (core)
nie oczekujące na obsługę
procesorów ARM Cortex-Mx
oczekiwania (pending) wyjątek/przerwanie oczekujące na obsługę;
Konstrukcja zapewnia minimalny czas opóznienia w przyjęciu
żądanie obsługi generowane programowo lub przez układy
przerwania (low interrupt latency)
peryferyjne
NVIC kontroluje obsługę wyjątków (exceptions) i przerwań (interrupts)
aktywny (active) wyjątek/przerwanie w trakcie obsługi (nie zakończone)
Uwaga: obsługa wyjątku/przerwania może zostać przerwana przez inny
NVIC posiada: wyjątek/przerwanie o wyższym priorytecie oba wyjątki/przerwania
pozostają w trybie aktywnym
% 32 wektorowe zródła przerwań
% 4 programowalne priorytety przerwań
aktywny i oczekiwania (active and pending) wyjątek/przerwanie
% programowe przerwania (SWI software interrupt) obsługiwane przez procesor i oczekujące na ponowną obsługę (to
samo zródło wyjątku/przerwania)
UM10398. LPC111x/LPC11Cxx User manual. UM10398. LPC11xx User Manual.
NXP, Rev. 12.3 10 June 2014, p.468 NXP, Rev. 12.3 10 June 2014, p.466
PM0223. Programming manual STM32L0
Series Cortex-M0+ programming manual.
Exception priorities Cortex-M0/M0+ [1#2]
Exception STMicroelectronics , DocID025763 Rev 1 , April 2014, p.26
All exceptions have an associated priority, with: Cortex-M0/M0+
Reset (wywoływany po włączeniu
a lower priority value indicating a higher priority
zasilania lub po warm reset )
numer typ priorytet
configurable priorities for all exceptions except Reset, HardFault, and NMI.
NMI (NonMaskable Interrupt
IRQ wyjątku
przerwanie niemaskowalne
% Reset 3, najwyższy
If software does not configure any priorities, then all exceptions with a
generowane programowo lub
14 NMI 2 fixed
configurable priority have a priority of 0
przez układy peryferyjne)
13 HardFault 1
; Vector Table Mapped to Address 0 at Reset
HardFault (błąd w trakcie standardowej
Reserved
Exception IRQ number obsługi wyjątku lub działania
number address 5 SVCall configurable
programu)
__Vectors DCD __initial_sp ; Top of Stack 0x0000 0000
Reserved
SVCall (supervisor call po wykonaniu
DCD Reset_Handler ; 1 / Reset Handler 0x0000 0004 2 PendSV configurable
instrukcji SVC; w środowisku
DCD NMI_Handler ; 2 / 14 NMI Handler 0x0000 0008
1 SysTick configurable
OS, aplikacje mogą korzystać z
DCD HardFault_Handler ; 3 / 13 Hard Fault Handler 0x0000 000C
0 and Interrupt configurable instrukcjami SVC przy dostępie
........................................................................................................................
above (IRQ) do funkcji jądra OS i
DCD SVC_Handler ; 11 / 5 SVCall Handler 0x0000 002C
sterowników urządzeń)
DCD DebugMon_Handler ; 12 / 4 Debug Monitor Handler 0x0000 0030
PendSV (usługa systemowa; w OS systemie operacyjnym stosowane w
DCD 0 ; 13 / 3 Reserved 0x0000 0034
kontekście przełączania; priorytet ustawiany jako najniższy, dzięki czemu
DCD PendSV_Handler ; 14 / 2 PendSV Handler 0x0000 0038
DCD SysTick_Handler ; 15 / 1 SysTick Handler 0x0000 003C przerwanie to nigdy nie wywłaszczy innych obsługiwanych przerwań)
DCD IRQ_Handler ; 16 / +0 IRQ Handler 0x0000 0040 SysTick (przerwanie generowane przez SysTick po osiągnięciu stanu zera)
7
Reserved
UM10398. LPC11xx User Manual. (1) RM0367. Reference manual. Ultra-low-power
NXP, Rev. 12.3 10 June 2014, p.466 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 priorities
Exception priorities Cortex-M0/M0+ [2#2]
PM0223. Programming manual STM32L0 Series Cortex-M0+ programming manual. Exception IRQ Exception Priority Description
STMicroelectronics , DocID025763 Rev 1 , April 2014, p.27
number number type
(1,2)
1 Reset 3, the highest
Exception IRQ Exception Priority Vector Activation
(1,2)
2 14 NMI 2 fixed
number(1) number(1) type address
(1,2)
3 13 HardFault 1 All class of fault
1 - Reset 3, the highest 0x0000 0004 Asynchronous
(1)
4 12 MemManage settable Memory management
2 14 NMI 2 fixed 0x0000 0008 Asynchronous
(1)
5 11 BusFault settable Pre-fetch fault, memory
3 13 HardFault 1 0x0000 000C Synchronous
access fault
4-10 Reserved
(1)
6 10 UsageFault settable Undefined instruction or
11 5 SVCall configurable 0x0000 002C Synchronous illegal state
7-10 Reserved
12-13 Reserved
(1,2)
11 5 SVCall settable System service call via SWI
14 2 PendSV configurable 0x0000 0038 Asynchronous
instruction
15 1 SysTick configurable 0x0000 003C Asynchronous
(1)
12 4 DebugMon settable Debug Monitor
16 and 0 and Interrupt configurable 0x0000 0040 Asynchronous
13 Reserved
above above (IRQ) and above(2)
(1,2)
14 2 PendSV settable Pendable request for
system service
(1) To simplify the software layer, the CMSIS only uses IRQ numbers. It uses
(1,2)
negative values for exceptions other than interrupts (IPSR returns the Exception 15 1 SysTick settable System tick timer
number) (1,2)
16 and 0 and Interrupt settable Peripheral interrupts
above above (IRQ)
(2) Increasing in steps of 4.
ARMv6-M Architecture Reference Manual. Cortex"!-M0+. Devices.
ARM DDI 0419C, September 2010, B1.4 ARM DUI 0662B, p.2-7
Cortex M0 / Cortex M0+ Cortex-M
Program Status Registers Blokowanie wyjątków
bit 0 (PRIMASK) w rejestrze maskującym obsługę wyjątków (PRIority
Provide arithmetic and logic processing flags (zero flag and carry flag),
execution status, and current executing interrupt number MASK register) wyłącza lub blokuje uruchomienie wszystkich
wyjątków z konfigurowalnym priorytetem
5 0
31 28 24
operacja stosowana jeśli procesor wykonuje zadania czasowo-
Exception
Program Status Registers
xPSR N Z C V Res T Reserved
krytyczne lub sekwencje kodu wymagające niepodzielności
Number
0
31 1
PRIMASK Reserved
Application 31 28 24 5 0
Program Status Register PRIMASK
APSR N Z C V Reserved
0 or
Interrupt Bity Nazwa Funkcja
IPSR Reserved Exception
Program Status Register
Number [0] PRIMASK 0 = odblokowana obsługa wyjątków
1 = zablokowana obsługa wyjątków
EPSR Reserved T Reserved
Execution
[31:1] zarezerwowane
Program Status Register
StartUp_LPC11xx.s StartUp_STM32L053xx.s
UM10398. LPC11xx User Manual. RM0367. Reference manual. Ultra-low-power
NXP, Rev. 12.3 10 June 2014, p.69 STM32L0x3 advanced ARM-based 32-bit MCUs.
STMicroelectronics, DocID025274 Rev 2, April 2014, p.253
Cortex-M0 Cortex-M0
yródła przerwań w LPC11xx yródła przerwań w STM32L0x3
numer przerwania (Interrupt number) numer przerwania (Interrupt number)
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
wake-up pin from
LPC11C12/C14
Deep-sleep mode
numer przerwania (Interrupt number) numer przerwania (Interrupt number)
3130 29 28 27 26 25 24 23 22 21 20 19 18 17 16 3130 29 28 27 26 25 24 23 22 21 20 19 18 17 16
8
I2C
P1_0
P0_9
P0_8
P0_7
P0_6
P0_5
P0_4
P0_3
P0_2
P0_1
P0_0
P0_11
P0_10
C_CAN
SPI/SSP1
TSC
PVD
RTC
TIM2
FLASH
WWDG
LPTIM1
EXTI[3:2]
EXTI[1:0]
Reserved
RCC_CRS
EXTI[15:4]
ADC_COMP
DMA1_CH[1]
DMA1_CH[7:4]
DMA1_CH[3:2]
ADC
BOD
WDT
UART
PIO_0
PIO_1
PIO_2
PIO_3
LCD
I2C1
USB
I2C2
SPI2
SPI1
TIM22
TIM21
CT32B1
CT32B0
CT16B1
CT16B0
SPI/SSP0
Reserved
Reserved
Reserved
.. AES ..
USART2
USART1
Reserved
Reserved
Reserved
Reserved
TIM6_DAC
Cortex"!-M0 Devices. Generic User Guide. Cortex"!-M0 Devices. Generic User Guide.
ARM, DUI 0497A, 8 October 2009, p.4-7 ARM, DUI 0497A, 8 October 2009, p.4-7
UM10398. LPC11xx User Manual. UM10398. LPC11xx User Manual.
NXP, Rev. 12.3 10 June 2014, p.508 NXP, Rev. 12.3 10 June 2014, p.508
NVIC NVIC
J. Yiu: The Definitive Guide to the ARM Cortex-M0. J. Yiu: The Definitive Guide to the ARM Cortex-M0.
Elsevier Inc. 2011, Fig.8.1 Elsevier Inc. 2011, p.143
Priorytety [1#2] Priorytety [2#2]
w procesorze Cortex-M3 przewidziano minimum 3 bity do
procesor Cortex-M0 posiada 3-poziomową, sprzętową i 4-poziomową,
programowania priorytetów wyjątków/przerwań 8 poziomów
programową strukturę priorytetów przerwań
priorytetów (w procesorach Cortex-M0/M0+ tylko 4 poziomy)
do programowania wyjątków/przerwań z programowalnymi priorytetami
zwiększenie liczby dostępnych bitów zwiększa liczbę dostępnych poziomów
stosowane są jedynie dwa najbardziej znaczące bity w 8-bitowych rejestrach
priorytetów wyjątków/przerwań
(rejestry SHPR3-SHPR2 System Handler Priority Register dla wyjątków
oraz IPR0-IPR7 Interrupt Priority Registers dla przerwań) zwiększenie liczby dostępnych bitów zwiększa pobór energii
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
wykorzystywane nie wykorzystywane
wykorzystywane nie wykorzystywane
w rejestrach priorytetów bity 4:0 są zawsze równe wartości zerowej
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)
przy odczycie (brak zmiany wartości tych bitów przy zapisie)
dostępne programowalne priorytety: 0x00 (najwyższy), 0x20, 0x40,
dostępne programowalne priorytety: 0x00 (najwyższy), 0x40, 0x80 i
0x60, 0x80, 0xA0, 0xC0 i 0xE0 (najniższy)
0xC0 (najniższy)
Cortex-M0/M0+ Cortex-M0/M0+
Funkcje CMSIS dostępu do NVIC [1#3] Funkcje CMSIS dostępu do NVIC [2#3]
UM10398. LPC11xx User Manual. UM10398. LPC11xx User Manual.
NXP, Rev. 12.3 10 June 2014, p.69 NXP, Rev. 12.3 10 June 2014, p.69
PM0223. Programming manual STM32L0 Series Cortex-M0+ programming manual. PM0223. Programming manual STM32L0 Series Cortex-M0+ programming manual.
STMicroelectronics , DocID025763 Rev 1 , April 2014, p.82 STMicroelectronics , DocID025763 Rev 1 , April 2014, p.82
void NVIC_SetPendingIRQ(IRQn_Type IRQn)
ustawienie statusu wyjątku/przerwania w tryb oczekiwania
void NVIC_EnableIRQ(IRQn_Type IRQn)
odblokowanie wyjątku / przerwania
void NVIC_ClearPendingIRQ(IRQn_Type IRQn)
skasowanie trybu oczekiwania dla wyjątku/przerwania
void NVIC_DisableIRQ(IRQn_Type IRQn)
zablokowanie wyjątku / przerwania
uint32_t NVIC_GetPendingIRQ(IRQn_Type IRQn)
odczyt statusu wyjątku/przerwania (1 oznacza tryb oczekiwania)
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
Cortex-M0/M0+ J. Yiu: The Definitive Guide to the ARM Cortex-M0.
Elsevier Inc. 2011, p.143
SysTick_Config
Funkcje CMSIS dostępu do NVIC [3#3] File: core_cm0.h
UM10398. LPC11xx User Manual.
void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority)
NXP, Rev. 12.3 10 June 2014, p.69
The lower the value, the greater the priority
NVIC_SetPriority ( 1, 3);
PM0223. Programming manual STM32L0 Series Cortex-M0+ programming manual.
of the corresponding interrupt.
STMicroelectronics , DocID025763 Rev 1 , April 2014, p.82
File LPC11xx.h (line 59):
SysTick_IRQn = 1 // 15 System Tick Timer
__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) {
void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority)
programowanie priorytetu dla podanego typu przerwania 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);
NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) 1);
uint32_t NVIC_GetPriority(IRQn_Type IRQn)
// set Priority for Systick Interrupt
/* set Priority for Systick Interrupt */
odczyt priorytetu dla podanego typu przerwania
SysTick->VAL = 0; /* Load the SysTick Counter Value */
File LPC11xx.h (line 104):
SysTick->CTRL= SysTick_CTRL_CLKSOURCE_Msk |
#define __NVIC_PRIO_BITS 2 // Number of Bits used for Priority Levels
SysTick_CTRL_TICKINT_Msk |
SysTick_CTRL_ENABLE_Msk;
/* Enable SysTick IRQ and SysTick Timer */
return (0); /* Function successful */
}
9
StartUp_LPC11xx.s StartUp_LPC11xx.s
UM10398. LPC111x/LPC11Cxx User manual. UM10398. LPC111x/LPC11Cxx User manual.
NXP, Rev. 12.3 10 June 2014, p.466 NXP, Rev. 12.3 10 June 2014, p.466
Cortex-M0 (LPC1114)
Cortex-M0 (LPC1114)
SysTick Timer Interrupt [3#3]
SysTick Timer Interrupt [1#3]
; Vector Table Mapped to Address 0 at Reset
; Vector Table Mapped to Address 0 at Reset
Exception IRQ number
EXPORT __Vectors
address
number Exception
IRQ number
EXPORT __Vectors
address
number
__Vectors DCD __initial_sp ; Top of Stack 0x0000 0000
__Vectors DCD __initial_sp ; Top of Stack 0x0000 0000
DCD Reset_Handler ; 1 / Reset Handler 0x0000 0004
DCD Reset_Handler ; 1 / Reset Handler 0x0000 0004
DCD NMI_Handler ; 2 / 14 NMI Handler 0x0000 0008
DCD NMI_Handler ; 2 / 14NMI Handler 0x0000 0008
.........................................................................................................................
.....................................................................................
DCD SysTick_Handler ; 15 / 1 SysTick Handler 0x0000 003C
DCD SysTick_Handler; 15 / 1 SysTick Handler 0x0000 003C
.........................................................................................................................
.....................................................................................
SysTick_Handler PROC
wpisanie do LR identyfikatora przerwanego trybu pracy 0xFFFF FFF1 (Handler EXPORT SysTick_Handler [WEAK]
Mode, MSP), 0xFFFF FFF9 (Thread Mode, MSP), 0xFFFF FFFD (Thread Mode, PSP) B .
ENDP
procedura stacking, ochrona na stosie rejestrów: R0 R3, R12, LR, xPSR, PC
procesor w trybie Handler Mode
void SysTick_Handler (void) { // IRQ_file.c
wskaznik stosu SP = MSP
ticks++;
wykonanie programu obsługi przerwania SysTick_Handler
}
Unstacking
procedura unstacking, powrót do właściwego trybu (Handler/Thread Mode)
i przerwanego programu
Przerwania - wspomaganie sprzętowe (1/2) Przerwania - wspomaganie sprzętowe (2/2)
strukturalne opóznienia
dane
wynik port odczyt
odczyt
Px.y
pomiaru wejściowy danych
danych
koniec zgłoszenie kontroler przetwarzanie przetwarzanie
MCU
A/C
pomiaru przerwania przerwań A/C (1) A/C (2)
wykonaj wykonaj
początek
wykonaj zgłoszenie przyjęcie zgłoszenie przyjęcie
pomiar pomiar
licznik
pomiaru
pomiar przerwania przerwania przerwania przerwania
strukturalne opóznienia
strukturalne opóznienia
odczyt odczyt
odczyt
odczyt
danych danych
danych
danych
1 2
przetwarzanie przetwarzanie
przetwarzanie przetwarzanie
A/C (1) A/C (2)
A/C (1) A/C (2)
wykonaj
wykonaj wykonaj
zgłoszenie przyjęcie
pomiary
zgłoszenie przyjęcie zgłoszenie przyjęcie
pomiar pomiar
przerwania przerwania
przerwania przerwania przerwania przerwania
THS1206. 12-BIT, 4 ANALOG INPUT, 6 MSPS,
SIMULTANEOUS SAMPLING ANALOG-TO-DIGITAL CONVERTERS.
Texas Instruments, SLAS217H JULY 2003
Problemy i pytania
Przerwania
1. Jaki jest cel stosowania przerwań ?
THS1206
2. Jak rozwinąć pojęcie ISR ?
MCU 3. Czy się różnią metody: polling oraz interrupt ?
przetwornik A/C
4. Jak zachowuje się procesor po zgłoszeniu przerwania ?
16 1
dane
15 2
wyniki pomiarów port
Px.y
5. Czym się różnią przerwania maskowalne od niemaskowalnych ?
14 3
w buforze FIFO wejściowy
wskaznik
13 4 6. Na czym polega maskowanie przerwań ?
odczytu
koniec zgłoszenie kontroler
12 5 wskaznik 7. Jaki jest powód stosowania przerwań niemaskowlnych ?
5
5
pomiaru przerwania przerwań
zapisu
11 6
8. W jakim celu w procesorach jest stosowane przerwanie programowe SWI ?
początek
wykonaj
10 7 licznik
pomiaru 9. Jak w procesorach Cortex-Mx jest interpretowane pojęcie przerwania
9 8 pomiar
np. THS1206 (TI)
wektorowego ?
10. Jakie są zródła przerwań w mikrokontrolerach ?
strukturalne opóznienia
odczyt odczyt
11. Jak w mikrokontrolerach są identyfikowane zródła przerwań ?
danych danych
12. Co to jest tablica wektorów przerwań ?
1 2
przetwarzanie przetwarzanie
13. Czym się różnią przerwania jednopoziomowe od wielopoziomowych ?
A/C (1) A/C (2)
14. Co oznacza pojęcie zagnieżdżenie przerwań ?
wykonaj
zgłoszenie przerwania przyjęcie przerwania
pomiary
15. Jakie czasy definiują reakcję procesora po przyjęciu przerwania ?
10
Wyszukiwarka
Podobne podstrony:
2 Architektura 15 www7 Stos 15 www4 Typy instrukcji Tryby?resowania 15 www (1)3 Przetw?nych Typy proces 15 www (1)12 DMA 15 www13 Power 15 www6 Pamieci ROM RAM 15 www9 Liczniki 15 www5 Architektura MCU 15 www (1)www livemocha com angielski lekcja audio15 315więcej podobnych podstron