- stc_gpio_cfg_t stcGpioCfg;//配置
-
- ///< 打开GPIO外设时钟门控
- Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE);//首先打开GPIO的时钟。
- ///< 端口方向配置->输入
- stcGpioCfg.enDir = GpioDirIn;//配置为输出
- ///< 端口驱动能力配置->高驱动能力
- stcGpioCfg.enDrv = GpioDrvL;//配置驱动能力
- ///< 端口上下拉配置->无
- stcGpioCfg.enPu = GpioPuDisable;//上下拉关闭
- stcGpioCfg.enPd = GpioPdDisable;//上下拉关闭
- ///< 端口开漏输出配置->开漏输出关闭
- stcGpioCfg.enOD = GpioOdDisable;//开漏输出关闭
- ///< 端口输入/输出值寄存器总线控制模式配置->AHB
- stcGpioCfg.enCtrlMode = GpioAHB;//总线控制模式是AHB
- ///< GPIO IO USER KEY初始化
- Gpio_Init(STK_USER_PORT, STK_USER_PIN, &stcGpioCfg); //初始化
-
输入:
1.设置时钟
2.设置输入输出
3.设置驱动能力
4.上下拉关闭
5.开漏输出关闭
6.AHB模式
7.初始化
- stc_gpio_cfg_t stcGpioCfg;//配置IO引脚
- Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE);//设置GPIO的外设时钟
- ///< 端口方向配置->输出(其它参数与以上(输入)配置参数一致)
- stcGpioCfg.enDir = GpioDirOut;//配置为输出
- < 端口上下拉配置->无
- stcGpioCfg.enPu = GpioPuDisable;
- stcGpioCfg.enPd = GpioPdDisable;
stc_gpio_cfg_t
typedef struct
{
en_gpio_dir_t enDir; ///< 端口方向配置//端口方向
en_gpio_drv_t enDrv; ///< 端口驱动能力配置//驱动能力//电流相关的
en_gpio_pu_t enPu; ///< 端口上拉配置
en_gpio_pd_t enPd; ///< 端口下拉配置
en_gpio_od_t enOD; ///< 端口开漏输出配置
en_gpio_ctrl_mode_t enCtrlMode; ///< 端口输入/输出值寄存器总线控制模式配置//配置模式
}stc_gpio_cfg_t;
- 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(STK_USER_PORT, STK_USER_PIN, &stcGpioCfg);
- ///< 打开并配置USER KEY为下降沿中断
- Gpio_EnableIrq(STK_USER_PORT, STK_USER_PIN, GpioIrqFalling);//下降沿
- ///< 使能端口PORTA系统中断
- EnableNvic(PORTA_IRQn, IrqLevel3, TRUE);//中断号//中断优先级//这个怎么确认
- ///< PortA中断服务函数
- void PortA_IRQHandler(void)
- {
- if(TRUE == Gpio_GetIrqStatus(STK_USER_PORT, STK_USER_PIN))
- {
- ///< LED点亮
- Gpio_SetIO(STK_LED_PORT, STK_LED_PIN);
-
- delay1ms(2000);
-
- ///< LED关闭
- Gpio_ClrIO(STK_LED_PORT, STK_LED_PIN);
-
- Gpio_ClearIrq(STK_USER_PORT, STK_USER_PIN);
- }
-
- }
简单总结一下:
1.进行端口设置
2.端口下降沿的使能
3.配置中断向量号以及中断优先级
4.配置中断服务函数
插入
中断响应过程
- 中断源发出中断请求
- 判断处理器是否允许中断,以及该中断源是否被屏蔽
- 中断优先级排队
- 处理器暂停当前程序,保护断点地址和处理器的当前状态,根据中断类型号,查找中断向量表,转到对应的中断服务程序
- 执行中断服务程序
- 恢复被保护的状态,执行中断返回指令,回到被中断的程序
- 多个中断同时出现时,处理器先响应高优先级的中断
- 低优先级中断的ISR执行时,可以被高优先级中断再次打断
- ISR比App Code拥有更高的执行优先级
- typedef struct
- {
- boolean_t bOutputVal; ///< 默认端口输出电平
- en_gpio_dir_t enDir; ///< 端口方向配置
- en_gpio_drv_t enDrv; ///< 端口驱动能力配置
- en_gpio_pu_t enPu; ///< 端口上拉配置
- en_gpio_pd_t enPd; ///< 端口下拉配置
- en_gpio_od_t enOD; ///< 端口开漏输出配置
- en_gpio_ctrl_mode_t enCtrlMode; ///< 端口输入/输出值寄存器总线控制模式配置
- }stc_gpio_cfg_t;