如何在开启HAL_SLEEP时通过GPIO中断让CH57X_LowPower及时退出?

你好,我这边需要让CH573在外部中断到来时及时和外部芯片通讯,之前没有开启HAL_SLEEP,通讯非常正常,加上数据准备的时间,也就37us就可以响应了。

无sleep响应速度.png


但是加上了HAL_SLEEP后就不能正常工作了。

有sleep.png

程序配置了下降沿中断,还调用了PWR_PeriphWakeUpCfg( ENABLE, RB_SLP_GPIO_WAKE, Edge_LongDelay );

我在CH57X_LowPower的入口和所有return前面加入IO操作来检查CH57X_LowPower的执行时间,发现GPIO中断可以快速被执行,但是中断执行完后CH57X_LowPower不会退出,约11ms后才退出,让主循环可以运转,向TMOS发事件。但是过这么久外设已经超时,无法正常工作。


请问有没有办法让中断触发后立刻退出CH57X_LowPower并返回主循环?我测试过使用Edge_ShortDelay,但系统会进入重启循环,暂时没搞清什么原因。


尝试,把sleep.c里面的 下面如图框框的代码,使用简单的delay代替

image.png


非常感谢,我仔细研究了/index.php/bbs/thread-81865-1.html 。确实是在这个Idle花了时间,即使IO唤醒,这个IDLE也会睡到预设时间。


还有个小问题:


非RTC唤醒的情况下,函数的返回值应该是什么?/index.php/bbs/thread-73139-1.html  里提到返回值应该是告诉协议栈是否真的睡眠过,那么请问睡了但是没睡足,应该算哪种?



但凡进入过sleep, 都应该return 0, 

建议是无论如何都return 0, 因为这部分处理的时间是非常短的,us级别


只有登录才能回复,可以选择微信账号登录