Interrupt

Transkrypt

Interrupt
Documentation
PICmicro MID-RANGE MCU FAMILY. Microchip Technology,
December 1997, 33023a.pdf
Podstawy techniki
mikroprocesorowej
ETEW006
Przerwania
ST7. 8-BIT MCU FAMILY USER GUIDE. STMicroelectronics, July 2002.
MSP430x300 Family User’s Guide. Texas Instruments, SLAU012A,
2002.
MCS@51 MICROCONTROLLER FAMILY USER’S MANUAL. Intel,
February 1994
C515C 8-Bit CMOS Microcontroller. User’s Manual. Infineon, Nov.
2000
Andrzej Stępień
Katedra Metrologii Elektronicznej i Fotonicznej
Przerwania
(Interrupt)
Steve Furber: ARM System-on-Chip Architecture, 2nd Edition.
Addison Wesley, 2001, ISBN-10: 0-201-67519-6.
Po co komu przerwania
czym jest przerwanie
typy przerwań
źródła zgłaszania przerwań
identyfikacja przerwań
kolejność/priorytety przerwań
szybkość reakcji na przerwanie
procedury obsługi przerwań:
• adresy początkowe procedur
• zachowanie stanu procesora
• zakończenie procedur
Jak powinien reagować procesor:
• na zjawiska (sygnały) periodyczne lub aperiodyczne, wewnętrzne
lub zewnętrzne ?
• przy różnej szybkości pracy procesora i urządzeń zewnętrznych ?
• przy wymaganiu wielozadaniowości (multitasking) ?
jak usprawnić obsługę przerwań
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
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)
USB Interrupt Data Transfers
(Polling)
used for characters or coordinates with human-perceptible echo or
feedback response characteristics
interrupt transfer type is designed to support those devices that need to
send or receive data infrequently but with bounded service periods
(periodic)
requesting a pipe with an interrupt transfer type provides:
• guaranteed maximum service period for the pipe (time between
transactions the requester, 1 ms = minimum time for Full Speed
transmission)
• retry of transfer attempts at the next period, in the case of
occasional delivery failure due to error on the bus
1
Przerwania
(Interrupt)
Przerwanie (interrupt)
→ zawieszenie (przerwanie) wykonywanego programu, najczęściej po
spełnieniu dodatkowych warunków, zapamiętanie wszystkich danych
niezbędnych do kontynuowania zawieszonego programu
typy przerwań
zgłaszanie przerwań
źródła/identyfikacja przerwań
→ wykonanie podprogramu (ISR - Interrupt Service Routine)
obsługi zdarzenia (sygnału) żądającego (wymagającego)
obsługi
kolejność/priorytety przerwań
szybkość reakcji na przerwanie
← kontynuacja zawieszonego programu
procedury obsługi przerwań:
• adresy początkowe procedur
• zachowanie stanu procesora
• zakończenie procedur
odtworzenie
stanu procesora
zachowanie
stanu procesora
czym jest przerwanie
ISR
program
t
jak usprawnić obsługę przerwań
żądanie przerwania
Typy przerwań
Hardware Reset w procesorach
przerwanie sprzętowe niemaskowalne (NMI – Non - Maskable
Interrupt) rozpoczęcie wykonywania obsługi przerwania bez warunków
wstępnych (zawsze)
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 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)
zerowanie / ustawienie licznika rozkazów
blokada przerwań
zerowanie / ustawienie rejestrów specjalnych mikrokontrolerów
wyłączenie trybu użytkownika (przy różnych trybach pracy)
przerwanie programowe (SWI – SoftWare Interrupt)
programowe wywołanie obsługi przerwania
operacja pułapki (Trap)
inicjowana pojawieniem się błędu, np. próba dzielenia przez zero
C51
program
........................
Ext Int 0
0003h
0000h JMP RESET_Proc
RESET_Proc
ST7FLite
ST7FLite Interrupt mapping
0FFFEh RESET_Proc
SWI - Trap
0FFFCh
0FFFAh
0FFF8h
not used
Ext Int 0
.....................
.....................
program
RESET_Proc
MSP430
ARM7
RESET_Proc
0FFFEh RESET_Proc
program
........................
Exception
0000 0004h Undefined Instruction
0000 0000h
RESET_Proc
0FFFCh
NMI_Proc
I/O_Proc
0FFE0h .....................
.....................
.....................
program
0FFFAh
Higher address =
higher priority
Reset - C51, ST7,
MSP430, ARM7
RESET_Proc
2
Wybrane SWI w x86
Nr
Typ przerwania
Nr
00h
01h
02h
03h
04h
05h
08h
09h
0Eh
10h
11h
12h
13h
14h
15h
16h
17h
18h
Dzielenie przez zero
Praca krokowa
Przerwanie niemaskowalne
Pułapka (Breakpoint)
Nadmiar
Wydruk zawartości ekranu
Przerwanie zegara
Przerwanie klawiatury
Przerwanie kontrolera dysków
Obsługa monitora
Konfiguracja komputera
Rozmiar pamięci
Obsługa dysków
Obsługa złącza szeregowego
Dodatkowe funkcje AT
Obsługa klawiatury
Obsługa drukarki
Uruchomienie BASIC-a z ROM
19h
Gorący restart systemu
1Ah
Obsługa drukarki
1Bh
CTRL + BREAK
1Ch
Przerwanie zegarowe użytkownika
1Dh
Tabela trybów wyświetlania
1Fh
Tablica wzorców znaków
20h
Zakończenie programu
21h
Funkcje MS-DOS
22h
Zakończenie programu
23h
CTRL + C (CTRL + BREAK)
24h
Błąd krytyczny urządzenia
25h
Czytanie sektora dyskowego
26h
Pisanie sektora dyskowego
................................................................
2Fh
Obsługa równoczesnych procesów
33h
Obsługa myszy
41h
Tablica parametrów
46h
dysku twardego 0/1
Typ przerwania
Źródła przerwań w mikrokontrolerach
Wewnętrzne:
kontrolery DMA,
liczniki (Match, Capture, Reload, PWM),
RTC (Real Time Clock),
kontrolery interfejsów (UART, I2C-Bus, SPI, CAN, USB, Ethernet, ..)
przetworniki (A/C i C/A),
BOD (Brown Out Detect),
WDT (WatchDog Timer),
próba wykonania zabronionej instrukcji lub niewłaściwych argumentów
(np. próba dzielenia przez zero, nadmiar, ..)
Core (Embedded ICE).
Przerwania maskowalne
należy programowo
odblokować
Zewnętrzne:
poziom sygnału zewnętrznego,
zbocze sygnału zewnętrznego.
C51 Interrupt Mechanism
IE
Interrupt
Enable
Register
EA
–
ET2
ES
typy przerwań
zgłaszanie przerwań
identyfikacja przerwań
kolejność/priorytety przerwań
szybkość reakcji na przerwanie
procedury obsługi przerwań:
• adresy początkowe procedur
• zachowanie stanu procesora
• zakończenie procedur
jak usprawnić obsługę przerwań
Standard C51 -
EA
IT0
1
P3.2
INT0#
kontroler przerwań
EX0 1
IE0
0
0
IT1
1
P3.2
INT0#
1
EX1 1
IE1
ET0
ET1 1
TF0
TF1
RI
Serial
Port
03h
1
0
High Priority
PX0 1
0
13h
0
PT0 1
0Bh PT1
1Bh
0
0
ES
1
1
TI
ST7 Interrupt
Mechanism
Low Priority
PX1 1
0
0
0
Timer 0
Overflow
Timer 1
Overflow
1
0
PS
when EA
bit is set
to 1, all
interrupts
are
enabled
1
23h
0
0
0
ST7 Condition Code (CC) Register
1 1 1 H
I
N Z C
General Interrupt flag
ET1 EX1 ET0 EX0
An interrupt is requested
when EA bit is set (EA=1),
all interrupts are enabled
Its relative
pending bit is set
EA = 1
Yes
czym jest przerwanie
General interrupt enable
An interrupt is requested
Yes
Przerwania
(Interrupt)
Yes
I = 0 (CC register)
No
Core finishes its current instruktion
PC are pushed onto the stack
EA = 0 (disable interrupt)
PC = address of the interrupt vector
This interrupt will
be serviced when EA = 1
Interrupt
Service
Routine
Clearing I bit (I=0),
all interrupts are enabled
Its relative
pending bit is set
No
This interrupt will
be serviced when I = 0
Yes
Core finishes its current instruktion
PC, X (not Y), A, CC are pushed onto the stack
I = 1 (disable interrupt)
PC = address of the interrupt vector
Interrupt
Service
Routine
3
MSP430 Interrupt Mechanism
Przerwania
(Interrupt)
Status Register
RESERVED
V
SCG SCG OSC CPU
GIE
1
0
Off
Off
N
Z
C
typy przerwań
General interrupt enable
An interrupt is requested
Yes
GIE = 1
Yes
zgłaszanie przerwań
when GIE bit is set (GIE=1),
all interrupts are enabled
Its relative
pending bit is set
czym jest przerwanie
identyfikacja przerwań
kolejność/priorytety przerwań
szybkość reakcji na przerwanie
No
Core finishes its current instruktion
PC, SR are pushed onto the stack
GIE = 0 (disable interrupt)
PC = address of the interrupt vector
This interrupt will
be serviced when GIE = 1
Interrupt
Service
Routine
procedury obsługi przerwań:
• adresy początkowe procedur
• zachowanie stanu procesora
• zakończenie procedur
jak usprawnić obsługę przerwań
Identyfikacja urządzenia
Adresy procedur obsługi przerwań
Programowa / sprzętowa identyfikacja urządzenia / sygnału
zgłaszającego 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
adresu początku obsługi przerwania
• 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
PICmicro MID-RANGE MCU FAMILY
− w tablicy wektorów przerwań (C51):
w tablicy wyłącznie 2 ∗ N bajtów adresów przerwań (16 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.)
ST7FLite Interrupt mapping
Interrupt to CPU
clear GIE bit
addr = 0004h
GIE
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.
Higher address =
higher priority
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.
4
MSP430 Family
MSP4303xx — Interrupt Sources, Flags
and Vectors
Port 0
Dedicated I/O
Interrupt Source
Figure 3–4. Interrupt Priority Scheme
Standard C51
Interrupt Source
and Vectors
Standard
indywidualne,
bezpośrednie adresy
wektorów przerwań
dla RESET tylko 3 bajty
kolejne adresy wektorów
przerwań co 8 bajtów
Interrupt
Interrupt
Vector
Request
Address
Flags
External Interrupt 0 0003H
IE0
Timer 0 Overflow
000BH
TF0
External Interrupt 1 0013H
IE1
Timer 1 Overflow
001BH
TF1
Serial Channel
0023H
RI / TI
Timer 2 Overflow /
/ Ext. Reload
002BH TF2 / EXF2
A/D Converter
0043H
IADC
External Interrupt 2 004BH
IEX2
External Interrupt 3 0053H
IEX3
External Interrupt 4 005BH
IEX4
External Interrupt 5 0063H
IEX5
External Interrupt 6 006BH
IEX6
Wake-up from
power-down mode
007BH
–
CAN controller
008BH
–
External Interrupt 7 00A3H
–
External Interrupt 8 00ABH
–
SSC interface
0093H TC / WCOL
Interrupt System
Flag
Interrupt
Power-up, ext. reset, watchdog WDTIFG Reset
NMI, OSC. Fault
NMIIFG/OFIFG NMI
Dedicated I/O
P0IFG.0 Maskable
Dedicated I/O
P0IFG.1 Maskable
Maskable
Watchdog Timer
WDTIFG Maskable
Timer_A
CCIFG0 Maskable
Timer_A
TAIFG Maskable
USART receive
URXIFG Maskable
USART transmit
UTXIFG Maskable
ADC, Timer/Port
ADCIFG Maskable
Timer/Port
Maskable
Port P2
P2IFG.07 Maskable
Port P1
P1IFG.07 Maskable
Basic timer
BTIFG Maskable
Port 0
P0IFG.27 Maskable
Standard C51 -
Interrupt Source
ARM7:
FIQ , vectored & nonvectored IRQ –
[1/2]
The Vectored Interrupt Controller (VIC) takes 32 interrupt request
inputs and programmably assigns them into 3 categories:
fast interrupt (FIQ):
highest priority
the fastest, short interrupt response time
vectored (IRQ) interrupt:
middle priority
only 16 of the 32 requests can be assigned to this category
non-vectored (IRQ) interrupt:
lowest priority
the slowest, long interrupt response time
P3.2
INT0#
EX0 1
IE0
EX1 1
Type
WDT
−
ARM Core
ARM Core
TIMER0
TIMER1
UART0
RI
0
13h
PWM0
I2C0
SPI0
SPI1
RTC
EINT0
EINT1
EINT2
EINT3
ADC0
I2C1
BOD
ADC1
Low Priority
PX1 1
0
ET0
ET1 1
1
0
PT0 1
0Bh PT1
1Bh
0
0
ES
1
1 23h
PS
0
when EA
bit is set
to 1, all
interrupts
are
enabled
1
0
0
Flag(s)
Watchdog Interrupt (WDINT)
Reserved for Software Interrupts only
Embedded ICE, DbgCommRx
Embedded ICE, DbgCommTX
Match 0 .. 3 (MR0, .. , MR3), Capture 0 .. 3 (CR0, .. , CR3)
Match 0 .. 3 (MR0, .. , MR3), Capture 0 .. 3 (CR0, .. , CR3)
Rx Line Status (RLS), Transmit Holding Register Empty (THRE)
Rx Data Available (RDA), Character Time-out Indicator (CTI)
Rx Line Status (RLS), Transmit Holding Register Empty (THRE)
Rx Data Available (RDA), Character Time-out Indicator (CTI)
Modem Status Interrupt (MSI)[*]
Match 0 .. 6 (MR0, MR1, .. , MR6)
SI (state change)
SPI Interrupt Flag (SPIF)/Mode Fault (MODF)
(SSP) TX FIFO at least half empty (TXRIS), Rx FIFO at least half full
(RXRIS) Receive Timeout condition (RTRIS), Receive overrun (RORRIS)
Counter Increment (RTCCIF)/Alarm (RTCALF)
System Control External Interrupt 0
External Interrupt 1
System Control External Interrupt 2
System Control External Interrupt 3
A/D Converter 0 end of conversion
SI (state change)
Brown Out detect
A/D Converter 1 end of conversion
Interrupt Sources LPC21xx
UART1
High Priority
PX0 1
03h
0
TF0
TF1
TI
1
0
0
Serial
Port
15 (highest)
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0 (lowest)
0
IE1
Timer 0
Overflow
Timer 1
Overflow
1
0
0
IT1
1
P3.2
INT0#
Priority
kontroler przerwań
EA
IT0
1
Word
Address
0FFFEh
0FFFCh
0FFFAh
0FFF8h
0FFF6h
0FFF4h
0FFF2h
0FFF0h
0FFEEh
0FFECh
0FFEAh
0FFE8h
0FFE6h
0FFE4h
0FFE2h
0FFE0h
Mask
0
1
2
3
4
5
6
VIC Channel
0x0000 0001
0x0000 0002
0x0000 0004
0x0000 0008
0x0000 0010
0x0000 0020
0x0000 0040
7
0x0000 0080
8
9
10
11
0x0000 0100
0x0000 0200
0x0000 0400
0x0000 0800
13
14
15
16
17
18
19
20
21
0x0000 2000
0x0000 4000
0x0000 8000
0x0001 0000
0x0002 0000
0x0004 0000
0x0008 0000
0x0010 0000
0x0020 0000
5
Przerwania
(Interrupt)
Jednopoziomowa obsługa przerwań
czym jest przerwanie
typy przerwań
• blokowanie przyjęcia następnego przerwania w przypadku, gdy nie jest
zakończona obsługa poprzedniego przerwania
zgłaszanie przerwań
• wykonanie jednej instrukcji z programu głównego przed rozpoczęciem
obsługi zgłoszonego (czekającego w kolejce) przerwania
identyfikacja przerwań
kolejność/priorytety przerwań
szybkość reakcji na przerwanie
procedury obsługi przerwań:
• adresy początkowe procedur
• zachowanie stanu procesora
• zakończenie procedur
jak usprawnić obsługę przerwań
Wielopoziomowa obsługa 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
priorytet przerwania
przerwania zagnieżdżone
(Nesting of Interrupts )
ISR
program
żądanie
żądanie
przerwania A przerwania A
żądanie przerwania B
żądanie przerwania C
Przerwania w C517
High
External Interrupt 0
IE0
Timer 0 Interrupt
TF0
External Interrupt 1
IE1
Timer 1 Interrupt
TF1
Serial Channel 0 Interrupt
RI0 + TI0
Timer 2 Interrupt
TF2 + EXF2
IP Bit
IP1.0 / IP0.0
IP1.1 / IP0.1
IP1.2 / IP0.2
IP1.3 / IP0.3
IP1.4 / IP0.4
IP1.5 / IP0.5
Serial Channel 1 Interrupt
RI1 + TI1
Compare Timer Interrupt
CTF
Low / High
A/D Converter Interrupt
IADC
External Interrupt 2
IEX2
External Interrupt 3
IEX3
External Interrupt 4
IEX4
External Interrupt 5
IEX5
External Interrupt 6
IEX6
Irq Flag
IE0
TF0
IE1
TF1
RI0 + TI0
TF2 + EXF2
RI1 + TI1
CTF
IEX6
IEX6
priorytet przerwania
ISR
program
żądanie
żądanie
przerwania A przerwania A
żądanie przerwania B
Standard C51 -
żądanie przerwania C
rejestry kontrolera przerwań
IE
Interrupt Enable Register EA
addr = 0A8h, RW = 00h
—
ET2
ES
ET1 EX1 ET0 EX0
TCON
Timer/Counter Control Register TF1 TR1 TF0 TR0
addr = 088h, RW = 00h
IT1
IE0
IT0
SCON
Serial Port Control Register SM0 SM1 SM2 REN TB8 RB8
addr = 098h, RW = 00h
TI
RI
IP
Interrupt Priority Register
addr = 0B8h, RW = 00h
Standard C51 Priorytety sprzętowe:
• IE0
• TF0
• IE1
• TF1
• RI + TI
—
—
PT2
IE1
PS
PT1 PX1 PT0 PX0
priorytety przerwań
najwyższy
adres procedury obsługi = 03h
0Bh
13h
1Bh
23h
najniższy
Priorytety programowe, zmieniane przez użytkownika
Low
IADC
IEX2
IEX3
IEX5
IP
Interrupt Priority Register
addr = 0B8h, RW = 00h
—
—
PT
2
PS
PT PX1 PT PX0
1
0
6
0x0000 001C
0x0000 0018
0x0000 0014
0x0000 0010
0x0000 000C
0x0000 0008
0x0000 0004
0x0000 0000
FIQ
IRQ
(Reserved)
Data Abort
Prefetch Abort
Software Interrupt
Undefined Instruction
Reset
1
(FIQ)
—
WDT
priority & address
VICIntSelect
0
(IRQ)
Adx, BOD
highest
I2Cx, SPx
EINTx
RTC, PLL
TIMERx, PWMx
UARTx, WDT
VICIRQStatus
VICDefVectAddr
VICVectCntl15 VICVectAddr15
............
............
VICVectCntl1 VICVectAddr1
VICVectCntl0 VICVectAddr0
VICVectAddr
address I
priority R
status Q
Interrupt
status
VICRawIntr
• Sets PC to vector address
[2/2]
FIQ status
VICFIQStatus
1 (Enable)
VICIntEnable
VICIntEnClear
1 (Disable)
ARMCore0
Timer0
ARMCore1
FIQ , vectored & nonvectored IRQ –
• Copies CPSR into SPSR_<mode>
• Sets appropriate CPSR bits
– Change to ARM state
– Change to exception mode
– Disable interrupts (if appropriate)
• Stores the return address in LR_<mode>
Przerwania
(Interrupt)
Timer1
UART1
7 6 5 4 3 2 1 0
UART0
I2C0
PWM0
SPI0
SP1 / SSP
RTC
PLL
EINT0
EINT2
EINT1
AD0
EINT3
I2C1
BOD
—
—
—
—
ARM7:
..
ARM7 — Interrupt
When an exception occurs, the ARM:
24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8
AD1
31
Czas reakcji
czym jest przerwanie
typy przerwań
zgłaszanie przerwań
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:
identyfikacja przerwań
• sposobu testowania kolejności zgłoszonych przerwań
kolejność/priorytety przerwań
• liczby cykli maszynowych potrzebnych do zakończenia bieżącej,
wykonywanej instrukcji
szybkość reakcji na przerwanie
procedury obsługi przerwań:
• adresy początkowe procedur
• zachowanie stanu procesora
• zakończenie procedur
jak usprawnić obsługę przerwań
Czas opóźnienia
• typu wykonywanych instrukcji, np. programowania kontrolera
priorytetów przerwań
ISR
program
żądanie przerwania
(Interrupt Request)
reakcja na przerwanie
(Response Time)
rozpoczęcie
wykonywania ISR
Czas opóźnienia i reakcji
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
PICmicro MID-RANGE MCU FAMILY.
przygotowanie
Microchip
doTechnology,
December 1997, 33023a.pdf, 8.3
rozpoczęcia
Interrupt Latency
ISR
(p.132):
reakcja procesora
....
PUSH
PC
CALL
ISR
na żądanielatency
proceduryis defined as the time from the interrupt event
Interrupt
obsługi przerwania
(the interrupt flag bit gets set) to the time that the instruction at address
0004h ISR
starts execution (when that interrupt is enabled).
program
reakcja na żądanie
obsługi przerwania
przygotowania
PUSH PC .... CALL ISR
ISR
program
żądanie przerwania
(Interrupt Request)
opóźnienie (Latency Time)
rozpoczęcie
wykonywania ISR
8-bit Microcontrollers.
reakcja
Databook
na przerwanie
- 1997. Temic Semiconductors, 1997
(Response Time)
rozpoczęcie
żądanie
przerwania
Response
time ... ifopóźnienie
a request is
active and
conditions
are right for
(Latency
Time)
wykonywania
(Interrupt
it to be Request)
acknowledged, a hardware subroutine call to the
requested ISR
service routine will be the next instruction to be executed (polling
cycle + long CALL to interrupt vector address).
7
Standard C51 -
testowanie
S5P2 warunków (polling)
C1
C2
próbkowanie przerwań
zawsze w fazie S5P2
(sampling)
Standard C51 -
przyjęcie przerwania (1/2)
obsługa przerwania
(ISR)
C3
C4
C2
próbkowanie
przerwań zawsze w
fazie S5P2
(sampling)
Skok do adresu wektora
(LCALL to vector address)
Blokada skoku jeśli:
• jest wykonywana obsługa przerwania o równym / wyższym priorytecie
• testowanie jest wykonywane w cyklu, który nie jest ostatnim cyklem
maszynowym instrukcji
• jest wykonywana instrukcja modyfikująca kontroler przerwań (RETI,
modyfikacja: IE, IP, ...)
• jeśli podane warunki są spełnione to wykonywana jest dodatkowo jedna
(neutralna) instrukcja
NXP
obsługa przerwania
(ISR)
testowanie warunków
(polling)
C1
C5
ARM7:
FIQ , vectored & nonvectored IRQ -
S5P2
przyjęcie przerwania (2/2)
C3
C4
C5
opóźnienie
Skok do adresu wektora
(LCALL to vector address)
Czas opóźnienia - czas liczony od momentu zgłoszenia przerwania do
momentu rozpoczęcia wykonywania podprogramu obsługi przerwania
(ISR):
• minimum 3 pełne cykle maszynowe
Czas trwania zewnętrznego sygnału przerywającego nie krótszy niż
1 cykl maszynowy
Przerwania
(Interrupt)
czym jest przerwanie
typy przerwań
FIQ interrupt:
highest priority
the fastest, short interrupt response time
entry to first Instruction, Latency = 12 cycles = 200 ns @ 60MHz
zgłaszanie przerwań
vectored IRQ interrupt:
middle priority
entry to first instruction + Nesting,
Latency = 25 cycles = 416ns @ 60MHz
szybkość reakcji na przerwanie
non-vectored IRQ interrupt:
lowest priority
the slowest, long interrupt response time
identyfikacja przerwań
kolejność/priorytety przerwań
procedury obsługi przerwań:
• adresy początkowe procedur
• zachowanie stanu procesora
• zakończenie procedur
jak usprawnić obsługę przerwań
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, ARM
– 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. C51
Przełączanie danych
C51 – programowe:
• CPU kończy wykonywanie bieżącej instrukcji
• PC przesłane na stos
• EA (EAL) = 0, blokada wszystkich przerwań
• PC = adres procedury obsługi z tablicy wektorów przerwań
???
MSP430 – sprzętowo/programowe:
• CPU kończy wykonywanie bieżącej instrukcji
• PC, SR przesłane na stos
• GIE = 0, blokada wszystkich przerwań
• PC = adres procedury obsługi z tablicy wektorów przerwań
ST7 – sprzętowe:
• CPU kończy wykonywanie bieżącej instrukcji
• PC, X (nie Y), A, CC przesłane na stos
• I = 1, blokada wszystkich przerwań
• PC = adres procedury obsługi z tablicy wektorów przerwań
!!!
8
void TimerT0(void) interrupt 1 using
C51 – programowe
przełączanie danych
C51 — programowe
przełączanie danych
[1/2]
zewnętrzna
pamięć
XDATA
danych
zewnętrzna
pamięć CODE
kodu
programu
DATA
IDATA
0FFh
SFR
wewnętrzna
pamięć
kodu
programu
RAM
wewnętrzna
pamięć
danych
80h
7Fh
IDATA
DATA
0
RAM
rejestry
0
0
ARM7 — Interrupt context switching
When an exception occurs, the ARM:
• Copies CPSR into SPSR_<mode>
• Sets appropriate CPSR bits
– Change to ARM state
– Change to exception mode
– Disable interrupts (if appropriate)
• Stores the return address in LR_<mode>
FIQ
IRQ
(Reserved)
Data Abort
Prefetch Abort
Software Interrupt
Undefined Instruction
Reset
ARM7 — Normal & Fast Interrupt
after executing each instruction, the CPU checks to see whether the
interrupt pins are LOW or internal request is generated:
R14_mod
← address of the next instruction to be executed + 4
SPSR_mod ← CPSR
CPSR[4:0] = M4..M0 ← 0b10010 or 0b10001 enter IRQ or FIQ mode
CPSR[5] = T ← 0
execute in ARM state
CPSR[6] = F ← 1 (for FIQ) or F is unchanged (for IRQ)
CPSR[7] = I ← 1
disable normal interrupts
Register switching (R8 .. R12) only for FIQ
PC = R15
← 0x0000 0018 or 0x0000 001C
the address to continue from is one word (or four bytes) less than that in
LR_<mode>, so the return instruction is:
; R14 = Return address
R7
R6
..............
R1
R0
R7
R6
..............
R1
R0
R7
R6
..............
R1
R0
R7
R6
..............
R1
R0
10h
08h
; odtworzenie DPTR
; odtworzenie PSW
; odtworzenie akumulatora
00h
RB3
RB2
RB1
RB0
ARM7 — Register Set & Modes
Privileged Modes
Exception Modes
System
Supervisor
Abort
Undefined
Fast
Interrupt Interrupt
R0
R1
R2
R3
R4
R5
R6
R7
R8
R9
R10
R11
R12
Saved Program
Status Register
R13 (Stack Pointer)
R14 (Link Register)
Current Program
Status Register
CPSR
CPSR
• Sets PC to vector address
SUBS R15, R14, #4
DPH
DPL
PSW
ACC
20h
18h
IrqInit:
PUSH ACC
; ochrona akumulatora
PUSH PSW ; ochrona rejestru PSW
ANL
PSW, #1110 0111b
ORL
PSW, #0000 1000b ; bank RB1
PUSH DPL
; ochrona DPTR
PUSH DPH
....................... ; zasadnicza część ISR
User
0x0000 001C
0x0000 0018
0x0000 0014
0x0000 0010
0x0000 000C
0x0000 0008
0x0000 0004
0x0000 0000
[2/2]
tylko w odniesieniu do:
• standardowo: A, PSW i DPTR (jeśli występuje
tylko jeden)
• nietypowo: IE, IP itp.
POP
POP
POP
POP
RETI
1{
R8_fiq
R9_fiq
R10_fiq
R11_fiq
R12_fiq
R13_svc
R14_svc
R13_abt
R14_abt
R13_und
R14_und
PC
(Program
Counter)
CPSR_svc
SPSR_svc
CPSR_abt
SPSR_abt
CPSR_und
SPSR_und
Standard C51 -
R13_irq
R14_irq
R13_fiq
R14_fiq
CPSR_irq
SPSR_irq
CPSR_fiq
SPSR _fiq
znaczniki przerwań
Przyjęcie przerwania, rozpoczęcie procedury obsługi przerwania:
• kasuje automatycznie znacznik przerwania jeśli:
– IE0 / IE1 - zewnętrzne przerwania INT0# lub INT1# reagują na
zbocze opadające
– TF0 / TF1 - przepełnienie od licznika T0 lub T1
• nie kasuje automatycznie znacznika przerwania jeśli:
– zewnętrzne przerwania INT0# lub INT1# reagują na poziom niski
– wystąpiło przerwanie z wielu źródeł, np. od nadajnika TI lub
odbiornika RI portu szeregowego itp.
– wyjątki w regule: programowe kasowanie znacznika przerwania od
przetwornika A/C w C515C
9
Koniec procedury obsługi przerwania
Przerwania
(Interrupt)
czym jest przerwanie
typy przerwań
zgłaszanie przerwań
Każdy podprogram obsługi przerwania musi kończyć się właściwą
instrukcją, np.:
identyfikacja przerwań
• MCS 51, MSP430: RETI
kolejność/priorytety przerwań
• PIC17Cxx:
RETFIE
• 68HC7xx :
RTI
• ST7:
IRET
• ARM7:
write to VICVectAddr
SUBS R15, R14, #4
szybkość reakcji na przerwanie
procedury obsługi przerwań:
• adresy początkowe procedur
• zachowanie stanu procesora
• zakończenie procedur
aby odtworzyć stan rejestrów kontrolera priorytetów przerwań
jak usprawnić obsługę przerwań
Standard
C51 K1
Przerwania
sprzętowa praca krokowa
CSEG AT 0
PoczProg:
JMP ProgDalej
P3.2
INT0#
ORG 3
• P3.2/INT0#
IrqINT0:
reaguje na poziom
JNB P3.2, $
niski, LOW
JB
P3.2, $
RETI
• w trakcie obsługi
przerwania,
ProgDalej:
przyjęcie
CLR IT0
kolejnego
SETB EX0
przerwania jest
SETB EA
możliwe po
PracaKrokowa:
wykonaniu
MOV P1, #0FEh
instrukcji RETI i
MOV P1, #0FDh
jednej instrukcji
MOV P1, #0FBh
z programu
.......................
głównego
Przerwania
; oczekiwanie na P3.2/INT0# = High
; oczekiwanie na P3.2/INT0# = Low
A/C
odczyt
danych
przetwarzanie
A/C (2)
wykonaj
przyjęcie
zgłoszenie
pomiar
przerwania
przerwania
przyjęcie
przerwania
przetwarzanie
A/C (2)
zgłoszenie
przerwania
wykonaj
pomiar
przetwarzanie
A/C (1)
wykonaj
pomiar
licznik
przetwarzanie
A/C (2)
zgłoszenie
przerwania
przyjęcie
przerwania
wykonaj
pomiar
zgłoszenie
przerwania
odczyt
danych
2
przyjęcie
przerwania
- wspomaganie sprzętowe (3/3)
MCU
dane
Px.y
port
wejściowy
zgłoszenie
przerwania
kontroler
przerwań
wykonaj
pomiar
np. THS1206 (TI)
przyjęcie
przerwania
MCU
odczyt
danych
przetwornik A/C
16 1
15
2
wyniki pomiarów
14
3
w buforze FIFO
wskaźnik
13
4
odczytu
koniec
12
5 wskaźnik
pomiaru
zapisu
11
6
początek
7
10
pomiaru
9 8
strukturalne opóźnienia
odczyt
danych
1
kontroler
przerwań
strukturalne opóźnienia
Przerwania
- wspomaganie sprzętowe (2/3)
zgłoszenie
przerwania
odczyt
danych
; instrukcje wykonywane krokowa
; cd. programu użytkownika
port
wejściowy
Px.y
koniec
pomiaru
początek
pomiaru
; INT0# reaguje na poziom niski
; odblokowanie INT0#
; odblokowanie wszystkich przerwań
strukturalne opóźnienia
przetwarzanie
A/C (1)
wykonaj
pomiary
dane
wynik
pomiaru
odczyt
danych
przetwarzanie
A/C (1)
wykonaj
zgłoszenie
pomiar
przerwania
- wspomaganie sprzętowe (1/3)
licznik
strukturalne opóźnienia
przetwarzanie
A/C (1)
wykonaj
pomiary
przetwarzanie
A/C (2)
zgłoszenie przerwania
odczyt
danych
1
odczyt
danych
2
przyjęcie przerwania
10

Podobne dokumenty