Cortex-M0 LPC11C14中断控制器

来源:互联网 发布:率土之滨数据修改器 编辑:程序博客网 时间:2024/04/30 12:41

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

0 0