1
Interrupts and Exceptions
Embedded Operating Systems HPI
2
Outline Basic Input / Output Interrupt hardware architecture - - PDF document
Interrupts and Exceptions Outline Basic Input / Output Interrupt hardware architecture Prioritized Interrupts Interrupt Vectors Interrupt Handling Interrupt Service Routines Interrupt Service Threads The Shared Data
Embedded Operating Systems HPI
2
Embedded Operating Systems HPI
3
Embedded Operating Systems HPI
4
Embedded Operating Systems HPI
5
Addresses for the registers in I/O devices Normal memory read / write instructions can be used
Embedded Operating Systems HPI
6
Embedded Operating Systems HPI
7
Save: Stack Pointer, Program Counter, Context
Embedded Operating Systems HPI
8
interrupt request interrupt acknowledge data / address
Embedded Operating Systems HPI
9
Embedded Operating Systems HPI
10
Embedded Operating Systems HPI
11
Embedded Operating Systems HPI
12
L1 L2 … Ln
Embedded Operating Systems HPI
13
Embedded Operating Systems HPI
14
interrupt acknowledge
interrupt vector table head
:CPU :device
Interrupt request interrupt acknowledge Interrupt vector T I M E
Embedded Operating Systems HPI
15
Embedded Operating Systems HPI
16
Embedded Operating Systems HPI
17
Embedded Operating Systems HPI
18
Signal from I/O device Async Always returns to next instruction
Intentional exception
Always returns to next instruction
Potentially recoverable error
Might return to current instruction
Nonrecoverable error
Never returns
Embedded Operating Systems HPI
19
User program
Control passes to handler after current instruction finishes
Interrupt handler
Interrupt pin goes high during execution of current instruction
Icurr Inext
Interrupt handler runs Handler returns to next instruction
Embedded Operating Systems HPI
20
User program
Control passes to handler
Trap handler
Application makes a system call
syscall
Inext
Trap handler runs Handler returns to next instruction
Embedded Operating Systems HPI
21
User program
Control passes to handler
Fault handler
Current instruction causes a fault
Icurr
Fault handler runs
Handler either reexecutes current instruction
abort
Embedded Operating Systems HPI
22
User program
Control passes to handler
Abort handler
Fatal hardware error occurs
Icurr
Abort handler runs Handler returns to abort routine abort
Embedded Operating Systems HPI
23
Embedded Operating Systems HPI
24
Embedded Operating Systems HPI
25
Embedded Operating Systems HPI
26
Embedded Operating Systems HPI
27
Embedded Operating Systems HPI
28
Embedded Operating Systems HPI
29
Embedded Operating Systems HPI
30
Embedded Operating Systems HPI
31
Embedded Operating Systems HPI
32
Embedded Operating Systems HPI
33
Embedded Operating Systems HPI
34
Actual worst case latency Device Service Time
D P K P
P D P
P D
Embedded Operating Systems HPI
35
Embedded Operating Systems HPI
36
Embedded Operating Systems HPI
37
dsr_thread() { while(1) { wait_for_signal_from_isr(); process_data_of_ISR(); } } interrupt_handler() { reset_hardware(); do_isr_stuff(); send_signal_to_wake_up_dsr(); re_enable_interrupts(); }
Embedded Operating Systems HPI
38
Embedded Operating Systems HPI
39
fread read
I/O read
device read
IST ISR
system ISR
Application Library I/O Subsystem Device driver ISR
return triggers SW interrupt call device driver Initiate hardware access
Hardware
return if data available interrupt blocked wake calls schedule return
Embedded Operating Systems HPI
40
Embedded Operating Systems HPI
41
Embedded Operating Systems HPI
42
Embedded Operating Systems HPI
43
void cyg_exception_set_handler( cyg_code_t exception_number, cyg_exception_handler_t *new_handler, cyg_addrword_t new_data, cyg_exception_handler_t **old_handler, void **old_data); void cyg_exception_clear_handler( cyg_code_t exception_number); void cyg_exception_call_handler( cyg_handle_t thread, cyg_code_t exception_number, cyg_addrword_t exception_info );
Embedded Operating Systems HPI
44
#define CYGNUM_HAL_VECTOR_DIV0 0 #define CYGNUM_HAL_VECTOR_DEBUG 1 #define CYGNUM_HAL_VECTOR_NMI 2 #define CYGNUM_HAL_VECTOR_BREAKPOINT 3 #define CYGNUM_HAL_VECTOR_OVERFLOW 4 #define CYGNUM_HAL_VECTOR_BOUND 5 #define CYGNUM_HAL_VECTOR_OPCODE 6 #define CYGNUM_HAL_VECTOR_NO_DEVICE 7 #define CYGNUM_HAL_VECTOR_DOUBLE_FAULT 8 #define CYGNUM_HAL_VECTOR_INVALID_TSS 10 #define CYGNUM_HAL_VECTOR_SEGV 11 #define CYGNUM_HAL_VECTOR_STACK_FAULT 12 #define CYGNUM_HAL_VECTOR_PROTECTION 13 #define CYGNUM_HAL_VECTOR_PAGE 14 #define CYGNUM_HAL_VECTOR_FPE 16 #define CYGNUM_HAL_VECTOR_ALIGNMENT 17
Embedded Operating Systems HPI
45
Embedded Operating Systems HPI
46
Option Name Use Separate Stack For Interrupts CDL Name CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK
Description: Allows a separate stack, maintained by the HAL, during interrupt processing. This eliminates the need for every thread stack to allow space for interrupt handlers. This option is enabled by default.
Option Nam Interrupt Stack Size CDL Name CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE
Description: Specifies, in bytes, the stack size for the interrupt stack. This is the stack that will be used for all interrupts when Use Separate Stack For Interrupts is enabled. The value for this
ration options, such as interrupt nesting. This stack is also used during the HAL startup
Option Name Allow Nested Interrupts CDL Name CYGSEM_HAL_COMMON_INTERRUPTS_ALLOW_NESTING
Description Causes the HAL default interrupt VSR to re-enable interrupts prior to invoking the interrupt handler. This allows other interrupts, typically of higher priority, to occur and be processed. This
Option Name
Embedded Operating Systems HPI
47
Embedded Operating Systems HPI
48
Embedded Operating Systems HPI
49
Embedded Operating Systems HPI
50
l Updates the CurMSec keeping time for the OS l Check to see if a reboot address has been registered
(RebootHandler)
l The ISR checks to see if an alarm has expired
(SYSINTR_RTC_ALARM)
l Call the Interrupt chain (NKCallIntrChain) l Sets the return value from the NKCallIntrChain to the return value l If the interrupt chain did not claim the interrupt: (SYSINTR_CHAIN)
Map the current hardware interrupt (OEMTranslateIRQ)
Embedded Operating Systems HPI
51
l If the interrupt was registered with HookInterrupt in OEMInit l Return the SYINTR value from OEMTranslateIRQ l If the interrupt was not registered return SYSINTR_NOP l Enables all but the current interrupt. (PICEnableInterrupt) l Does the proper end of interrupt to signal the PIC that the interrupt
is done (EOI)
Embedded Operating Systems HPI
52
Embedded Operating Systems HPI
53
Embedded Operating Systems HPI
54
Embedded Operating Systems HPI
55
Embedded Operating Systems HPI
56
Start of highest priority IST =
Embedded Operating Systems HPI
57