可以在中断程序服务里面的标志位,然后在主循环里关闭后查标志位
如:
无效gpio_interrupt_init(无效){
//初始化位输入上拉
GPIOB_ModeCfg(GPIO_Pin_8, GPIO_ModeIN_PU);
//开启沿沿
GPIOB_ITModeCfg(GPIO_Pin_8,GPIO_ITMode_FallEdge);
//开启GPIO的唤醒,如果需要的话
PWR_PeriphWakeUpCfg(启用,RB_SLP_GPIO_WAKE);
//开启GPIO中断
NVIC_EnableIRQ(GPIO_IRQn);
}
//中断服务程序
无效GPIO_IRQHandler(无效){
GPIOB_ClearITFlagBit(GPIO_Pin_8);
button_detected = 真;
}
然后在主循环里面查这个标志位然后调用tmos的相关api:
uint32_t irq_status;
而(1){
TMOS_SystemProcess();
SYS_DisableAllIrq( &irq_status );
如果(真 == button_detected){
tmos_set_event(Peripheral_TaskID, BUTTON_EVENT);
button_detected = 假;
}
SYS_RecoverIrq(irq_status);
}
可以在中断程序服务里面的标志位,然后在主循环里关闭后查标志位
如:
无效gpio_interrupt_init(无效){
//初始化位输入上拉
GPIOB_ModeCfg(GPIO_Pin_8, GPIO_ModeIN_PU);
//开启沿沿
GPIOB_ITModeCfg(GPIO_Pin_8,GPIO_ITMode_FallEdge);
//开启GPIO的唤醒,如果需要的话
PWR_PeriphWakeUpCfg(启用,RB_SLP_GPIO_WAKE);
//开启GPIO中断
NVIC_EnableIRQ(GPIO_IRQn);
}
//中断服务程序
无效GPIO_IRQHandler(无效){
GPIOB_ClearITFlagBit(GPIO_Pin_8);
button_detected = 真;
}
然后在主循环里面查这个标志位然后调用tmos的相关api:
uint32_t irq_status;
而(1){
TMOS_SystemProcess();
SYS_DisableAllIrq( &irq_status );
如果(真 == button_detected){
tmos_set_event(Peripheral_TaskID, BUTTON_EVENT);
button_detected = 假;
}
SYS_RecoverIrq(irq_status);
}
举报