LPC11C14(Cortex-M0)微控制器采用的是NVIC(Nested Vectored InterruptController)中断控制器
NVIC中断控制器有一下特点:
NVIC是ARM Cortex-M0的一个集成部分
紧耦合的方式中断延迟低
可控制系统的异常及外设中断
NVIC中断控制器支持32个中断源
4个带硬件优先级屏蔽的可编程中断优先级
可以产生软中断
根据NVIC的特点,我们能够知道,采用紧耦合的方式比普通的中断向量方式相应更快。如何实现紧耦合的中断方式,我们需要看看NVIC的相关信息。
查看LPC11C14的用户手册,对于中断控制器的中断源有如下描述
当产生外部中断时,中断源由NVIC处理后再递交给Cortex-M0内核处理。
中断源如下表所示:
从表中可以看到NVIC支持的32个外部中断源。
LPC11C14中断优先级如下所示
下图所示的是LPC11C14的中断向量表,由于采用的是紧耦合的中断方式,所以对应的地址和中断源的ISR地址已经在向量表中确定下来,当有中断产生时,可以根据向量表中ISR地址直接跳到ISR中做相应的中断处理。
我们在Cortex-M0启动的时候,需要对其中断向量表进行初始化。根据手册上面的向量表图,我们依次填入每个中断源的ISR地址(也就是中断服务函数名)
__Vectors DCD __initial_sp ; Top of Stack
DCD Reset_Handler ; Reset Handler
DCD NMI_Handler ; NMI Handler
DCD HardFault_Handler ; Hard Fault Handler
DCD MemManage_Handler ; MPU Fault Handler
DCD BusFault_Handler ; Bus Fault Handler
DCD UsageFault_Handler ; Usage Fault Handler
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD SVC_Handler ; SVCall Handler
DCD DebugMon_Handler ; Debug Monitor Handler
DCD 0 ; Reserved
DCD PendSV_Handler ; PendSV Handler
DCD SysTick_Handler ; SysTick Handler
; External Interrupts
DCD WAKEUP_IRQHandler ; 15 wakeup sources for all the
DCD WAKEUP_IRQHandler ; I/O pins starting from PIO0 (0:11)
DCD WAKEUP_IRQHandler ; all 40 are routed to the same ISR
DCD WAKEUP_IRQHandler
DCD WAKEUP_IRQHandler
DCD WAKEUP_IRQHandler
DCD WAKEUP_IRQHandler
DCD WAKEUP_IRQHandler
DCD WAKEUP_IRQHandler
DCD WAKEUP_IRQHandler
DCD WAKEUP_IRQHandler
DCD WAKEUP_IRQHandler
DCD WAKEUP_IRQHandler ; PIO1 (0:11)
DCD CAN_IRQHandler ; CAN
DCD SSP1_IRQHandler ; SSP1
DCD I2C_IRQHandler ; I2C
DCD TIMER16_0_IRQHandler ; 16-bit Timer0
DCD TIMER16_1_IRQHandler ; 16-bit Timer1
DCD TIMER32_0_IRQHandler ; 32-bit Timer0
DCD TIMER32_1_IRQHandler ; 32-bit Timer1
DCD SSP0_IRQHandler ; SSP0
DCD UART_IRQHandler ; UART
DCD USB_IRQHandler ; USB IRQ
DCD USB_FIQHandler ; USB FIQ
DCD ADC_IRQHandler ; A/D Converter
DCD WDT_IRQHandler ; Watchdog timer
DCD BOD_IRQHandler ; Brown Out Detect
DCD FMC_IRQHandler ; IP2111 Flash Memory Controller
DCD PIOINT3_IRQHandler ; PIO INT3
DCD PIOINT2_IRQHandler ; PIO INT2
DCD PIOINT1_IRQHandler ; PIO INT1
DCD PIOINT0_IRQHandler ; PIO INT0