1.hc32 中断函数
hd_exti.c
#include "ddl.h"
#include "gpio.h"
#include "hd_exti.h"
#include "interrupts_hc32l19x.h"
void GPIO_In_Init(en_gpio_port_t enPort, en_gpio_pin_t enPin)
{
stc_gpio_cfg_t stcGpioCfg;
///< 打开GPIO外设时钟门控
Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE);
///< 端口方向配置->输入
stcGpioCfg.enDir = GpioDirIn;
stcGpioCfg.enPu = GpioPuDisable; //关闭上拉电阻
stcGpioCfg.enPd = GpioPdEnable; //使能下拉电阻
stcGpioCfg.enOD = GpioOdDisable; //关闭开漏
Gpio_Init(enPort, enPin, &stcGpioCfg); //初始化GPIO
}
void GPIO_EXIT_Init(en_gpio_port_t enPort, en_gpio_pin_t enPin)
{
stc_gpio_cfg_t stcGpioCfg;
///< 打开GPIO外设时钟门控
Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE);
///< 端口方向配置->输入
stcGpioCfg.enDir = GpioDirIn;
///< 端口驱动能力配置->低驱动能力
stcGpioCfg.enDrv = GpioDrvL;
///< 端口上下拉配置->无
stcGpioCfg.enPu = GpioPuDisable;
stcGpioCfg.enPd = GpioPdDisable;
///< 端口开漏输出配置->开漏输出关闭
stcGpioCfg.enOD = GpioOdDisable;
///< 端口输入/输出值寄存器总线控制模式配置->AHB
stcGpioCfg.enCtrlMode = GpioAHB;
///< GPIO初始化
Gpio_Init(enPort, enPin, &stcGpioCfg);
// 设置中断触发类型(根据需要选择)
Gpio_EnableIrq(enPort, enPin, GpioIrqFalling); // 下降沿触发
// 使能对应端口的中断并设置优先级
EnableNvic(PORTA_IRQn, IrqLevel3, TRUE); // 示例为PORTD/A中断
}
// 以PortA中断为例
void PortA_IRQHandler(void)
{
if(TRUE == Gpio_GetIrqStatus(GpioPortA, GpioPin7)) // 检查具体哪个引脚触发中断
{
if(Gpio_GetInputIO(GpioPortA, GpioPin7) == 0) // 再次确认引脚状态
{
printf("\nexit ok!! ");
}
Gpio_ClearIrq(GpioPortA, GpioPin7); // 清除中断标志
}
}
hd_exti.h
#ifndef __HD_EXTI_H__
#define __HD_EXTI_H__
#include "gpio.h"
void GPIO_In_Init(en_gpio_port_t enPort, en_gpio_pin_t enPin);
void GPIO_EXIT_Init(en_gpio_port_t enPort, en_gpio_pin_t enPin);
#endif
效果
