HC32 中断实现
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;///< 端口输入/输出值寄存器总线控制模式配置->AHBstcGpioCfg.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
效果