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; ///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
效果



