systick_wait()

⚠️
你好。。谢谢你来到论坛。令人兴奋的消息!我们现在正在迁移到新的论坛平台,该平台将提供更好的功能,并包含在主对话网站中。所有员额和帐户都已迁移。我们现在只接受新论坛的流量-请在//www.wsdof.com/support. 我们将在未来几天内修复bug/优化搜索和标记。
8个员额/0个新员额
最后一篇文章
阿朴戈斯汀
离线
最后一次见到:3个月3周前
加入:2015-02-17 01:37
systick_wait()

在DA14580上使用SDK 5.0.4。无法让systick_wait()在15秒内工作。下面的代码将GPIO高电平切换为15us。我尝试过使用回调异常(在systick.c中使用systick\u register\u callback())并看到了相同的结果。我可以使用systick_wait(7)将GPIO设置为切换为20us。因此,使用systick_wait(2)时,systick_wait的最小等待时间为15us,使用systick_wait(7)时,再加上5微秒,就可以达到20us。这是一个普通的SDK 5.0.4版本-除了添加用户模板之外,不修改任何代码。

GPIO_设置激活(GPIO_端口0、GPIO_引脚2);

systick_wait(2);

GPIO_设置不活动(GPIO_端口_0,GPIO_引脚_2);

谢谢你的帮助,

亚历克斯

设备:
PM_对话框
离线
最后一次见到:21小时59分钟前
工作人员
加入:2018-02-08 11:03
嗨,apogostin,

嗨,apogostin,

传递给systick_wait函数的参数以微秒为单位。那么,您能确保GPIO在20秒后切换吗?另外,你能澄清一下你想要完成什么吗?您想切换GPIO一次还是闪烁它?

谢谢,下午好

阿朴戈斯汀
离线
最后一次见到:3个月3周前
加入:2015-02-17 01:37
设置systick_wait()时

当systick_wait()设置为2us时,GPIO切换为15us。我可以确认我看到的是正确的pin,因为当我将systick_wait()设置为其他值时,我可以看到切换更改的持续时间。例如,当将systick_wait()设置为7时,我看到GPIO切换为20us。我已经用o型示波器测试过好几次了。

使用systick_wait()时,似乎有15秒的最小间隔。我以毫秒间隔(~8毫秒)触发代码。所以每8毫秒我应该看到GPIO切换为2us,但它切换为15us。

也许有其他中断影响什么时候systick_wait()得到服务?我在中断向量表中看到SVC_Handler (ARM SVCall)和PendSV_Handler (ARM PendSV)。也许这些联络人用的是15us?

谢谢你的帮助,

亚历克斯

PM_对话框
离线
最后一次见到:21小时59分钟前
工作人员
加入:2018-02-08 11:03
嗨,apogostin,

嗨,apogostin,

你能告诉我你在SDK的哪个项目上工作吗?您是否有可扩展的活动或正在使用任何不可扩展的SDK示例?我这样问的原因是试图复制你的问题。

谢谢,下午好

阿朴戈斯汀
离线
最后一次见到:3个月3周前
加入:2015-02-17 01:37

正如我在上一篇文章中所述,我使用的是香草SDK 5.0.4 SDK-除了添加用户模板之外,没有其他修改。我正在使用您的文档(日期为2016年7月22日的DA1458x软件开发人员指南UM-B-050)创建用户模板。请参阅第9章创建您的BLE应用程序。我已经使用这些说明创建了用户模板。

再次感谢你的帮助,

亚历克斯

PM_对话框
离线
最后一次见到:21小时59分钟前
工作人员
加入:2018-02-08 11:03
嗨,apogostin,

嗨,apogostin,

我试图复制你的问题,你是对的。根据您发布的代码,我得到了18.08 uSec延迟。原因是等待时间(2 uSec)极低。您可以通过显式写入GPIO寄存器而不调用GPIO_SetActive()/GPIO_SetInactive()API来缩短等待时间。通过以下代码片段,我将时间从18.08 uSec缩短到9.083 u Sec:

SetWord16(P0\U SET\U DATA\U REG,1<

谢谢,下午好

阿朴戈斯汀
离线
最后一次见到:3个月3周前
加入:2015-02-17 01:37

谢谢你的确认。我可以在GPIO_SetActive()中看到DEVELOPMENT_DEBUG宏的使用(通过CFG_DEVELOPMENT_DEBUG设置为true)。在DEVELOPMENT_DEBUG宏设置为false的情况下编译和运行代码会很有趣吗?无论如何,它仍然无法解释您丢失的~9us–即使直接设置/清除GPIO寄存器。但是,再次非常感谢您能够复制这个问题,我现在可以解决它了。

非常感谢。

亚历克斯

PM_对话框
离线
最后一次见到:21小时59分钟前
工作人员
加入:2018-02-08 11:03
嗨,apogostin,

嗨,apogostin,

如果定义了CFG_DEVELOPMENT_DEBUG,您将能够调试固件,并且可以模拟深度睡眠模式,而无需编程OTP内存。通过取消定义CFG_DEVELOPMENT_DEBUG,可以禁用调试模式,因此无法热连接调试器并获取调试信息。例如,如果发生硬故障或NMI,您将无法捕获它。

谢谢,下午好