时序操作goio输出波形

⚠️
大家好. .感谢来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台的过程中,它将提供更好的功能,并包含在主对话网站。所有的帖子和账号已经迁移。我们现在只接受新论坛的流量-请发布任何新的帖子在//www.xmece.com/support.我们会在接下来的几天修复bug /优化搜索和标记。
2个职位/ 0个新职位
最后发表
zyosintek
离线
最后看到:7个月1个星期前
加入:2020-03-26 12:15
时序操作goio输出波形

嗨对话框

我正在实现一个函数,它通过操作GPIO电平翻转来每秒输出一个波形来推动一个动作。此波形持续约10ms +。我使用systick中断来产生第二个事件,并使用time0来控制gpio电平来反转输出波形。在睡眠关闭的情况下,它可以输出我所期望的波形,但在下一次睡眠模式下,它不能输出波形,但调试我看到,程序确实运行到time0 isr和操作gpio。但是gpio级别没有改变。

ps 1:为了在输出波形期间不去睡觉,我在
在user_app_on_system_powered()中,检查这个波形动作是否已经完成。如果不是,返回KEEP_POWERED。
PS 2:我最初使用的项目是sdk5.04, pxp,芯片是da14580。

这是什么原因,因为系统没有唤醒,所以无法操作gpio?你有什么建议吗?

谢谢!

关键词:
设备:
PM_Dialog
离线
最后看到:4天13小时前
工作人员
加入:2018-02-08 11:03
嗨zyosintek,

嗨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