Interrupt and Exception Programming Chapter 6 Interrupt and Exception Programming
Polling vs. Interrupts
NVIC in ARM Cortex-M
Going from Reset to Boot Program
Interrupt Vector Table for ARM Cortex-M Memory Location (Hex) Stack Pointer initial value 0x00000000 1 Reset 0x00000004 2 NMI 0x00000008 3 Hard Fault 0x0000000C 4 Memory Management Fault 0x00000010 5 Bus Fault 0x00000014 6 Usage Fault (undefined instructions, divide by zero, unaligned memory access,...) 0x00000018 7 Reserved 0x0000001C 8 0x00000020 9 0x00000024 10 0x00000028 11 SVCall 0x0000002C 12 Debug Monitor 0x00000030 13 0x00000034 14 PendSV 0x00000038 15 SysTick 0x0000003C 16 IRQ 0 for peripherals 0x00000040 17 IRQ 1 for peripherals 0x00000044 … 255 IRQ 239 for peripherals 0x000003FC
ARM Cortex-M Stack Frame upon Interrupt
Main Program gets interrupted
Interrupt Priority for Arm Cortex-M Priority Level Stack Pointer initial value 1 Reset -3 Highest 2 NMI -2 3 Hard Fault -1 4 Memory Management Fault Programmable 5 Bus Fault 6 Usage Fault (undefined instructions, divide by zero, unaligned memory access,....) 7 Reserved 8 9 10 11 SVCall 12 Debug Monitor 13 14 PendSV 15 SysTick 16 IRQ 0 for peripherals 17 IRQ 1 for peripherals … 255 IRQ 239 for peripherals
IRQ assignment in MSP432P401R INT# IRQ# Vector location Device 1-15 None 0000 0000 to 0000 003C CPU Exception(set by ARM) 16 0000 0040 PSS 17 1 0000 0044 CS 18 2 0000 0048 PCM 19 3 0000 004C WDT_A 20 4 0000 0050 FPU_INT 21 5 0000 0054 Flash Controller 22 6 0000 0058 COMP_E1 23 7 0000 005C COMP_E2 24 8 0000 0060 TIMERA0 25 9 0000 0064 26 10 0000 0068 TIMERA1 27 11 0000 006C 28 12 0000 0070 TIMERA2 29 13 0000 0074 30 14 0000 0078 TIMERA3
IRQ assignment in MSP432P401R INT# IRQ# Vector location Device 31 15 0000 007C TIMERA3 32 16 0000 0080 eUSCI_A0 33 17 0000 0084 eUSCI_A1 34 18 0000 0088 eUSCI_A2 35 19 0000 008C eUSCI_A3 36 20 0000 0090 eUSCI_B0 37 21 0000 0094 eUSCI_B1 38 22 0000 0098 eUSCI_B3 39 23 0000 009C eUSCI_B4 40 24 0000 00A0 ADC14 41 25 0000 00A4 TIMER32_INT1 42 26 0000 00A8 TIMER32_INT2 43 27 0000 00AC TIMER32_INTC 44 28 0000 00B0 AES256 45 29 0000 00B4 RTC_C 46 30 0000 00B8 DMA_ERR
Interrupt enabling at all 3 levels