RT1052 GPIO中断配置

开发平台

  • 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)。通过配置这些寄存器我们可以灵活的设置每一个输入输出引脚是否使用中断、中断触发条件、以及当前中断状态。
上面这段话来自野火的教程,其实说得挺明白的,但是需要配合代码来看,看下图:
在这里插入图片描述
这是在MIMXRT1052.h里面对中断向量号的定义。可以发现,GPIO的中断,一个GPIO口被分割成了两组中断入口,也就是高16位和低16位的区分。所以要写某一个IO口的中断的时候,必须先知道它属于哪个分组,比如GPIO1_05,就选择GPIO1_Combined_0_15_IRQn,因为05在0-15的范围内,应该还很好理解。

RT1052的中断服务函数

知道了对应的中断向量表,那样在启动文件上,就可以直接找到进行了弱定义的中断服务函数了:
在这里插入图片描述
那样就跟以往的中断服务函数一样用就可以了,
在这里插入图片描述
当然,进入中断服务函数后,需要清除中断标志位,不然不会退出中断服务函数,而这个属于GPIO的,所以在fsl_gpio.h上有提供相应的函数。
函数原型:

static inline void GPIO_PortClearInterruptFlags(GPIO_Type *base, uint32_t mask)
{
    base->ISR = mask;
}

其实就是清除对应位的中断标志,很明显的。

发布了45 篇原创文章 · 获赞 52 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_42312125/article/details/103101168