- #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);
- }
- }