原理
NVIC(Nested Vectored Interrupt Controller)嵌套向量中断控制器,属于 M3 内核的一个外设,控制着芯片的中断相关功能。
在配置中断时,通常使用的只有 ISER、 ICER 和 IP 这三个寄存器, ISER 是中断使能寄存器,ICER 是中断清除寄存器,IP 是中断优先级寄存器。
有关NVIC 中断相关的库函数都在库文件 misc.c 和 misc.h 中,所以当使用到中断时,一定要记得把 misc.c 和 misc.h 添加到工程组中。
STM32F103 芯片支持 60 个可屏蔽中断通道,每个中断通道都具备自己的中断优先级控制字节,用于表达优先级的高 4 位又被分组成抢占式优先级和响应优先级。高抢占式优先级的中断事件会打断当前的主程序或者中断程序运行,俗称中断嵌套。
STM32F103 中指定中断优先级的寄存器位有 4 位,这 4 位的分组方式如下图所示:
步骤
- 使能外设中断:具体由外设相关中断使能位来控制,比如定时器有溢出中断,这个可由定时器的控制寄存器中相应中断使能位来控制。
- 设置中断优先级分组:初始化 NVIC_InitTypeDef 结构体,设置抢占优先级和响应优先级,使能中断请求。
- 编写中断服务函数:中断服务函数有固定的函数名,可以在 startup_stm32f10x_hd.s 启动文件查看,具体实现什么功能还需要自己编写,
typedef struct
{
uint8_t NVIC_IRQChannel; //中断源
uint8_t NVIC_IRQChannelPreemptionPriority; //抢占优先级
uint8_t NVIC_IRQChannelSubPriority; //响应优先级
FunctionalState NVIC_IRQChannelCmd; //中断使能或失能
} NVIC_InitTypeDef;
?
?
|