Cortex-M0 提供中断控制器,作为异常模式的组成部分,称之为“ “ “ “ 嵌套向量中断控制器
(NVIC)” ” ” ”。 。 它与 微控制器 内核紧密联系 , 并具有以下特性: : 支持嵌套和向量中断 、 自动保存
和恢复 微控制器 状态 、 可动态改变优先级 、 简化的精确的中断延迟 。
� � � � 开关全局中断用到的函数为 __enable_irq() 、 __disable_irq() 。
� � � � C NVIC 支 持 末 尾 连 锁 “ “ “ “ Tail Chaining” ” ” ” , 有 效 处 理 背 对 背 中 断 “ “ “ “ back-to-back
interrupts” ” ” ”, , 前 即无需保存和恢复当前状态从而减少从当前 R ISR 结束切换到挂起的 R ISR 的
延迟时间。 C NVIC 还支持晚到“ “ “ “ e Late Arrival” ” ” ” ,改善同时发生的 R ISR 的效率。当较高优先级
前 中断请求发生在当前 R ISR 开始执行之前 ( 保存 微控制器 状态和获取起始地址阶段) ) , C NVIC 将立
即选择处理更高优先级的中断,从而提高了实时性。
� � � � 于 关于 C NVIC 的相关信息,当微控制器有中断请求时,如何进入编写好的中断服务函数呢?由 于
s startup_M051.s 都是官方帮我们配置好的,因此,编写代码时向量地址和异常号并不是重
要关注的部分, ,是 需要关注的部分就是 D DCD 对应的程序标号, , 例如 “ DCD TMR0_IRQHandler ” ”
器 可 以 知 道 定 时 器 0 0 0 0 是 的 中 断 服 务 函 数 名 称 是 “ “ r TMR0_IRQHandler ” ,“ “ DCD
UART0 _IRQHandler ”口 可以知道串口 0 0 0 0 的中断服务函数名称是 “ UART0 _IRQHandler” ” ,其
他中断服务函数名称亦然。
� � � � 当任何中断被响应时,微控制器会自动从内存的向量表中获取中断服务程序( ISR )的起始地
址 。对 对 , ARMv6-M, 向量表的基地址固定在 0x00000000 。 向量表包括复位后栈指针的初始值 , ,
所有异常处理数的入口地址。
� � � � 通过写相应中断使能设置寄存器或清使能寄存器位域 ,能 可以使能 C NVIC 中断或禁用 C NVIC 中断 , ,
写 这些寄存器通过写 1 1 1 1 使能和写 1 1 1 1 清零,读取这两种寄存器均返回当前相应中断的使能状态 。 当
某一个中断被禁用时,中断声明将使该中断挂起,然而,该中断不会被激活。如果某一个中断
在被禁用时处于激活状态,该中断就保持在激活状态,直到通过复位或异常返回来清除。清使
能位可以阻止相关中断被再次激活。
|