caizhiwei 发表于 2020-4-23 11:32

【分享】HC32F072 四通道双边沿中断(一)

在官网domo上修改加工的。

1. 配置中断IO:
#include "bsp_decode.h"

/* 4个IO口设置为边沿中断检测,再读取电平状态,从而解析格雷码*/
void BSP_IOInput_Init(void)
{
    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 IO USER KEY初始化
   
        Gpio_Init(GpioPortA, GpioPin0, &stcGpioCfg);

        Gpio_Init(GpioPortA, GpioPin1, &stcGpioCfg);
       
        Gpio_Init(GpioPortA, GpioPin2, &stcGpioCfg);
       
        Gpio_Init(GpioPortA, GpioPin3, &stcGpioCfg);
       
        /* 双边沿触发中断*/
        Gpio_EnableIrq(GpioPortA, GpioPin0, GpioIrqFalling);       
        Gpio_EnableIrq(GpioPortA, GpioPin0, GpioIrqRising);
       
        /* 双边沿触发中断*/
        Gpio_EnableIrq(GpioPortA, GpioPin1, GpioIrqFalling);       
        Gpio_EnableIrq(GpioPortA, GpioPin1, GpioIrqRising);
       
        /* 双边沿触发中断*/
        Gpio_EnableIrq(GpioPortA, GpioPin2, GpioIrqFalling);       
        Gpio_EnableIrq(GpioPortA, GpioPin2, GpioIrqRising);
       
        /* 双边沿触发中断*/
        Gpio_EnableIrq(GpioPortA, GpioPin3, GpioIrqFalling);       
        Gpio_EnableIrq(GpioPortA, GpioPin3, GpioIrqRising);
       
           ///< 使能端口PORTA系统中断
    EnableNvic(PORTA_IRQn, IrqLevel3, TRUE);
}


///< PortA中断服务函数
void PortA_IRQHandler(void)
{
        if(TRUE == Gpio_GetIrqStatus(GpioPortA, GpioPin0))
    {            

                if (FALSE == Gpio_GetInputIO(GpioPortA, GpioPin0))
                {
                       ///< LED点亮
                        Gpio_SetIO(EVB_LEDR_PORT, EVB_LEDR_PIN);
                }
                else
                {       
                           ///< LED关闭
                        Gpio_ClrIO(EVB_LEDR_PORT, EVB_LEDR_PIN);
                }

      Gpio_ClearIrq(GpioPortA, GpioPin0);   
    }

        if(TRUE == Gpio_GetIrqStatus(GpioPortA, GpioPin1))
    {            

                if (FALSE == Gpio_GetInputIO(GpioPortA, GpioPin1))
                {
                       ///< LED点亮
                        Gpio_SetIO(EVB_LEDY_PORT, EVB_LEDY_PIN);
                }
                else
                {       
                           ///< LED关闭
                        Gpio_ClrIO(EVB_LEDY_PORT, EVB_LEDY_PIN);
                }
      Gpio_ClearIrq(GpioPortA, GpioPin1);   
    }

        if(TRUE == Gpio_GetIrqStatus(GpioPortA, GpioPin2))
    {            

                if (FALSE == Gpio_GetInputIO(GpioPortA, GpioPin2))
                {
                       ///< LED点亮
                        Gpio_SetIO(EVB_LEDG_PORT, EVB_LEDG_PIN);
                }
                else
                {       
                           ///< LED关闭
                        Gpio_ClrIO(EVB_LEDG_PORT, EVB_LEDG_PIN);
                }
      Gpio_ClearIrq(GpioPortA, GpioPin2);   
    }

        if(TRUE == Gpio_GetIrqStatus(GpioPortA, GpioPin3))
    {            

                if (FALSE == Gpio_GetInputIO(GpioPortA, GpioPin3))
                {
                       ///< LED点亮
                        Gpio_SetIO(EVB_LEDB_PORT, EVB_LEDB_PIN);
                }
                else
                {       
                           ///< LED关闭
                        Gpio_ClrIO(EVB_LEDB_PORT, EVB_LEDB_PIN);
                }
      Gpio_ClearIrq(GpioPortA, GpioPin3);   
    }
}






coshi 发表于 2020-5-5 15:24

非常感谢楼主分享

aoyi 发表于 2020-5-5 15:25

真的很详细

drer 发表于 2020-5-5 15:25

感谢分享 正需要

gwsan 发表于 2020-5-5 15:25

期待楼主的更新

kxsi 发表于 2020-5-5 15:25

非常感谢楼主分享
页: [1]
查看完整版本: 【分享】HC32F072 四通道双边沿中断(一)