嗨对话框
我正在实现一个功能,通过操作GPIO电平翻转来推动运动,每秒输出一个波形。此波形持续约10ms +。我使用systick中断产生第二个事件,并使用time0控制gpio电平翻转输出波形。在sleep off的情况下,它可以输出我期望的波形,但在下一个sleep模式下,它不能输出波形,但调试我看到程序确实运行到time0 isr和操作gpio。但是gpio级别没有改变。
ps 1:为了不去睡觉的输出波形,我在
在user_app_on_system_powered()中,检查这个波形动作是否完成。如果不是,返回KEEP_POWERED。
PS 2:我最初使用的项目是sdk5.04, pxp,芯片是da14580。
这是什么原因,因为系统没有醒来,所以我不能操作gpio?你有什么建议吗?
谢谢!
关键词:
设备:
嗨zyosintek,
我不完全确定你试图完成什么,所以请尽量描述更清楚你的要求。请记住,在睡眠模式下,所有外围域(包括timer0)都将关闭。您可以通过BLE定时器同步地唤醒设备,也可以通过外部中断(输入)异步地唤醒设备。为此,您可以使用app_easy_timer()来唤醒设备并生成第二个事件,而不是使用systick中断。
当使用app_on_system_powered时,你不应该在那里停留太久。如果您的过程需要时间才能完成,那么您可以将其划分为更小的过程并返回KEEP_POWERED,以便再次强制schedule_while_ble_on()重新运行。通过这种方式,调度程序将运行任何其他将要发生的BLE事件,然后SDK将运行.app_on_system_powered。因此,您应该返回KEEP_POWERED,直到您的过程完成,然后您应该返回GOTO_SLEEP。
通常,没有一个标准的延迟可以添加到user_app_system_powered()中,但是您不应该在那里停留太久。您必须确保user_app_system_powered()中的延迟将让调度程序运行队列中的所有事件。为了实现这一点,您必须将过程划分为可以附加到app_on_system_powered回调的更小的过程,并返回KEEP_POWERED,只要有更多的过程要执行。因此,设备将一块一块地执行整个过程,而不会延迟调度其他事件的调度器。
谢谢,PM_Dialog