[方案相关] 【分享】HC32F072 四通道双边沿中断(一)

[复制链接]
1261|5
 楼主| caizhiwei 发表于 2020-4-23 11:32 | 显示全部楼层 |阅读模式
在官网domo上修改加工的。

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

  2. /* 4个IO口设置为边沿中断检测,再读取电平状态,从而解析格雷码*/
  3. void BSP_IOInput_Init(void)
  4. {
  5.     stc_gpio_cfg_t stcGpioCfg;
  6.    
  7.     ///< 打开GPIO外设时钟门控
  8.     Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE);
  9.    
  10.     ///< 端口方向配置->输入
  11.     stcGpioCfg.enDir = GpioDirIn;
  12.        
  13.     ///< 端口驱动能力配置->高驱动能力
  14.     ///stcGpioCfg.enDrv = GpioDrvL;
  15.        
  16.     ///< 端口上下拉配置->无
  17.     stcGpioCfg.enPu = GpioPuDisable;
  18.     stcGpioCfg.enPd = GpioPdDisable;
  19.     ///< 端口开漏输出配置->开漏输出关闭
  20.     stcGpioCfg.enOD = GpioOdDisable;
  21.     ///< 端口输入/输出值寄存器总线控制模式配置->AHB
  22.     stcGpioCfg.enCtrlMode = GpioAHB;
  23.     ///< GPIO IO USER KEY初始化
  24.    
  25.         Gpio_Init(GpioPortA, GpioPin0, &stcGpioCfg);

  26.         Gpio_Init(GpioPortA, GpioPin1, &stcGpioCfg);
  27.        
  28.         Gpio_Init(GpioPortA, GpioPin2, &stcGpioCfg);
  29.        
  30.         Gpio_Init(GpioPortA, GpioPin3, &stcGpioCfg);
  31.        
  32.         /* 双边沿触发中断*/
  33.         Gpio_EnableIrq(GpioPortA, GpioPin0, GpioIrqFalling);       
  34.         Gpio_EnableIrq(GpioPortA, GpioPin0, GpioIrqRising);
  35.        
  36.         /* 双边沿触发中断*/
  37.         Gpio_EnableIrq(GpioPortA, GpioPin1, GpioIrqFalling);       
  38.         Gpio_EnableIrq(GpioPortA, GpioPin1, GpioIrqRising);
  39.        
  40.         /* 双边沿触发中断*/
  41.         Gpio_EnableIrq(GpioPortA, GpioPin2, GpioIrqFalling);       
  42.         Gpio_EnableIrq(GpioPortA, GpioPin2, GpioIrqRising);
  43.        
  44.         /* 双边沿触发中断*/
  45.         Gpio_EnableIrq(GpioPortA, GpioPin3, GpioIrqFalling);       
  46.         Gpio_EnableIrq(GpioPortA, GpioPin3, GpioIrqRising);
  47.        
  48.            ///< 使能端口PORTA系统中断
  49.     EnableNvic(PORTA_IRQn, IrqLevel3, TRUE);
  50. }


  51. ///< PortA中断服务函数
  52. void PortA_IRQHandler(void)
  53. {
  54.         if(TRUE == Gpio_GetIrqStatus(GpioPortA, GpioPin0))
  55.     {            

  56.                 if (FALSE == Gpio_GetInputIO(GpioPortA, GpioPin0))
  57.                 {
  58.                          ///< LED点亮
  59.                         Gpio_SetIO(EVB_LEDR_PORT, EVB_LEDR_PIN);
  60.                 }
  61.                 else
  62.                 {       
  63.                            ///< LED关闭
  64.                         Gpio_ClrIO(EVB_LEDR_PORT, EVB_LEDR_PIN);
  65.                 }

  66.         Gpio_ClearIrq(GpioPortA, GpioPin0);   
  67.     }

  68.         if(TRUE == Gpio_GetIrqStatus(GpioPortA, GpioPin1))
  69.     {            

  70.                 if (FALSE == Gpio_GetInputIO(GpioPortA, GpioPin1))
  71.                 {
  72.                          ///< LED点亮
  73.                         Gpio_SetIO(EVB_LEDY_PORT, EVB_LEDY_PIN);
  74.                 }
  75.                 else
  76.                 {       
  77.                            ///< LED关闭
  78.                         Gpio_ClrIO(EVB_LEDY_PORT, EVB_LEDY_PIN);
  79.                 }
  80.         Gpio_ClearIrq(GpioPortA, GpioPin1);   
  81.     }

  82.         if(TRUE == Gpio_GetIrqStatus(GpioPortA, GpioPin2))
  83.     {            

  84.                 if (FALSE == Gpio_GetInputIO(GpioPortA, GpioPin2))
  85.                 {
  86.                          ///< LED点亮
  87.                         Gpio_SetIO(EVB_LEDG_PORT, EVB_LEDG_PIN);
  88.                 }
  89.                 else
  90.                 {       
  91.                            ///< LED关闭
  92.                         Gpio_ClrIO(EVB_LEDG_PORT, EVB_LEDG_PIN);
  93.                 }
  94.         Gpio_ClearIrq(GpioPortA, GpioPin2);   
  95.     }

  96.         if(TRUE == Gpio_GetIrqStatus(GpioPortA, GpioPin3))
  97.     {            

  98.                 if (FALSE == Gpio_GetInputIO(GpioPortA, GpioPin3))
  99.                 {
  100.                          ///< LED点亮
  101.                         Gpio_SetIO(EVB_LEDB_PORT, EVB_LEDB_PIN);
  102.                 }
  103.                 else
  104.                 {       
  105.                            ///< LED关闭
  106.                         Gpio_ClrIO(EVB_LEDB_PORT, EVB_LEDB_PIN);
  107.                 }
  108.         Gpio_ClearIrq(GpioPortA, GpioPin3);   
  109.     }
  110. }  






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 | 显示全部楼层
非常感谢楼主分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

100

主题

856

帖子

16

粉丝
快速回复 在线客服 返回列表 返回顶部