
本文共 1757 字,大约阅读时间需要 5 分钟。
开发平台
- Board:野火RT1052-MINI
- IDE:Keil 5.28
RT1052的中断介绍
- 文档参考 :《cortex_m7_trm》 在学习STM32的时候,中断用得不少,不管是STM32F1\F4\H7?还是现在用得RT1052,实际都是属于Cortex-M的MCU,因此在对于中断的控制上,少不了有NVIC的运用。
什么是NVIC?(摘自野火I.MX RT库开发实战指南)
NVIC 是嵌套向量中断控制器,控制着整个芯片中断相关的功能,它跟内核紧密耦合,是内核里面的一个外设。但是各个芯片厂商在设计芯片的时候会对 Cortex-M7 内核里面的 NVIC 进行裁剪,把不需要的部分去掉,所以说 RT1052 的 NVIC 是 Cortex-M7 的 NVIC 的一个子集。
其实也就看起来复杂,而我们只需要将它当做是MCU上的一个内核外设就可以了,这个外设可以控制、配置RT1052的中断,比如说让对应的中断使能?失能?或者是配置这个中断的优先级?(包括抢占优先级和子优先级),用得比较多的也就这些功能了。
NXP的SDK对NVIC的支持
我们在使用ST的标准库的时候,其实也会用到NVIC相关的函数的,但是那并不是直接由CMSIS封住起来的函数接口,而是经过ST官方二次封装过的API,因此在标准库上,会有一个文件,叫做xxx_misc.c,xxx_misc.h,如果用过标准库的,都应该知道这个文件,而且建立工程的时候,这个文件是不能少的。实际上关于中断的定义以及功能函数,在头文件“core_cm7.h”(因为是CORE_M7内核,其余的是M4的就换成m4就好了)。、
同样的,NXP的SDK里面,也对NVIC进行了封装和支持,为了让开发者快速上手,SDK对NVIC的封装并没有修改得太复杂。

RT1052的GPIO中断配置
现在要配置一个按键中断,首先我们需要知道,按键中断的配置需要些啥?
- 1、我们需要知道按键按下后是高电平有效还是低电平有效,从而配置进入中断的方式。
- 2、我们需要了解GPIO的中断分组,怎么使能对应的GPIO的中断。
- 3、要知道怎么编写对应的GPIO中断服务函数。
一个个来看:
按键的电路分析
由野火的原理图来看,按键是低电平有效,原因是按键按下后直接接地了,而地的电压不会高于1.5V,所以按键是低电平有效。
RT1052 的GPIO中断
RT1052 并没有为每个输入输出引脚分配一个中断号,而是为每组GPIO 分配两个中断编号,其中低 16 个输入输出引脚(GPIOx_n, x 取 1 到 5, n 取 0 到 15)共用一个中断编号,高 16 个输入输出引脚使用另外一个中断编号。每组 GPIO 拥有各自的中断相关寄存器,包括一个中断屏蔽寄存器(GPIOx_IMR),一个中断状态寄存(GPIOx_ISR),两个中断配置寄存器( GPIOx_ICR1、 GPIOx_ICR2)。通过配置这些寄存器我们可以灵活的设置每一个输入输出引脚是否使用中断、中断触发条件、以及当前中断状态。
上面这段话来自野火的教程,其实说得挺明白的,但是需要配合代码来看,看下图:
RT1052的中断服务函数
知道了对应的中断向量表,那样在启动文件上,就可以直接找到进行了弱定义的中断服务函数了:


static inline void GPIO_PortClearInterruptFlags(GPIO_Type *base, uint32_t mask){ base->ISR = mask;}
其实就是清除对应位的中断标志,很明显的。
发表评论
最新留言
关于作者
