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

效果