GPIO输入:
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.初始化
GPIO输出
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;
GPIO_IRQ
先配置为输入。
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;