Input Interrupt
该示例使用 GPIO 中断功能,检测 GPIO 的输入信号。
需要将 GPIO 配置为输入模式并启用中断功能。当输入信号发生变化时,会触发 GPIO 的中断,在中断服务处理函数内打印输入电平信息。
用户可以通过不同的宏配置来修改引脚信息。具体宏配置详见 配置选项。
环境需求
该示例的环境需求,可参考 环境需求。
硬件连线
连接 P4_0 和外部输入信号。
配置选项
可配置如下宏修改引脚定义。
#define INPUT_PIN P4_0
编译和下载
该示例的编译和下载流程,可参考 编译和下载。
测试验证
当 EVB 启动后,在 Debug Analyzer 工具内观察 log。
Start input interrupt test!
控制外部输入信号从高电平变为低电平,P4_0 检测到下降沿信号触发中断,中断处理函数
GPIO_Input_Handler
中显示如下 log。enter GPIO_Pin_Handler success
代码介绍
该章节主要介绍示例中的初始化和相应功能实现的代码和流程说明。
源码路径
工程文件和源码路径如下:
工程路径:
sdk\samples\peripheral\gpio\input_interrupt\proj
源码路径:
sdk\samples\peripheral\gpio\input_interrupt\src
初始化
外设的初始化流程可参考 General Introduction 中的 初始化流程 部分。
调用
Pad_Config()
与Pinmux_Config()
,配置对应引脚的 PAD 和 PINMUX 。void board_gpio_init(void) { Pad_Config(INPUT_PIN, PAD_PINMUX_MODE, PAD_IS_PWRON, PAD_PULL_UP, PAD_OUT_ENABLE, PAD_OUT_HIGH); Pinmux_Config(INPUT_PIN, DWGPIO); }
调用
RCC_PeriphClockCmd()
,开启 GPIO 时钟。对 GPIO 外设进行初始化:
定义
GPIO_InitTypeDef
类型GPIO_InitStruct
,调用GPIO_StructInit()
将GPIO_InitStruct
预填默认值。根据需求修改
GPIO_InitStruct
参数,GPIO 的初始化参数配置如下表。调用GPIO_Init()
,初始化 GPIO 外设。
GPIO Hardware Parameters |
Setting in the |
GPIO |
---|---|---|
GPIO pin |
|
|
GPIO direction |
||
GPIO interrupt |
||
GPIO interrupt trigger |
||
GPIO interrupt polarity |
||
Debounce function |
||
Debounce clock source |
||
Debounce clock divide |
||
Debounce Limit |
31 |
功能实现
当 P4_0 检测到外部有下降沿信号输入时,进入中断服务处理函数 GPIO_Pin_Handler
。打印中断信息。
在中断处理函数中需要先关闭并屏蔽中断,退出中断函数时清除中断标志位、取消屏蔽和重新使能中断。
/* Mask and disable interrupt */
GPIO_INTConfig(GPIO_PORT, GPIO_PIN, DISABLE);
GPIO_MaskINTConfig(GPIO_PORT, GPIO_PIN, ENABLE);
DBG_DIRECT("enter GPIO_Pin_Handler success");
/* Clear int flag, unmask and enable interrupt */
GPIO_ClearINTPendingBit(GPIO_PORT, GPIO_PIN);
GPIO_MaskINTConfig(GPIO_PORT, GPIO_PIN, DISABLE);
GPIO_INTConfig(GPIO_PORT, GPIO_PIN, ENABLE);