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