GPIO中断简介
RT1064的中断有很多,每个中断请求都有一个固定的标号,也就是中断号。
中断号定义在MIMXRT1064.h这个文件中。
GPIO每组有两个中断编号,其中低位的16个引脚(GPIOx_n, n为0到15)共用一个中断号,高位的16个引脚(GPIOx_n, n为16到31)共用一个中断号。
我们使用的按钮是GPIO5_IO00,对应的中断号是88,也就是GPIO5_Combined_0_15_IRQn。
每个中断都写好了一个中断服务函数,只是这些中断服务函数都是为空,实际的中断服务函数需要重新编写。中断服务函数的函数名必须跟启动文件里面预先设置的一样。
预先写好的中断服务函数在startup_mimxrt1064.c文件中,本文中所用的函数是GPIO5_Combined_0_15_IRQHandler。通用名字是GPIOx_Combined_x_x_IRQHandler,使用别的引脚把名字中x换一下即可。
#define EXAMPLE_SW_IRQ GPIO5_Combined_0_15_IRQn
#define EXAMPLE_GPIO_IRQHandler GPIO5_Combined_0_15_IRQHandler
每组
GPIO
拥有各自的中断相关寄存器,包括一个中断屏蔽寄存器(
GPIOx_IMR
),一个中断状
态寄存(
GPIOx_ISR
),两个中断配置寄存器(
GPIOx_ICR1
、
GPIOx_ICR2
)。
官方的SDK库已经做了封装,不需要挨个配置寄存器。