⚠️
大家好. .感谢来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台的过程中,它将提供更好的功能,并包含在主对话网站。所有的帖子和账号已经迁移。我们现在只接受新论坛的流量-请发布任何新的帖子在//www.xmece.com/support.我们会在接下来的几天修复bug /优化搜索和标记。
8个职位/ 0个新职位
最后发表
apogostin
离线
最后看到:3个月6天前
加入:2015-02-17 01:37
systick_wait ()

在DA14580上使用SDK 5.0.4。不能让systick_wait()在15us下工作。下面的代码将GPIO调高为15us。我尝试了使用回调异常(在systick.c中使用systick_register_callback()),看到了相同的结果。我可以通过systick_wait(7)将GPIO设置为20us。因此,systick_wait(2)的最小系统等待时间为15us,而systick_wait(7)的最小等待时间为20us。这是一个普通的SDK 5.0.4版本-没有修改任何代码,除了添加了一个用户模板。

GPIO_SetActive (GPIO_PORT_0 GPIO_PIN_2);

systick_wait (2);

GPIO_SetInactive (GPIO_PORT_0 GPIO_PIN_2);

谢谢你的帮助,

亚历克斯

设备:
PM_Dialog
离线
最后看到:16小时10分钟前
工作人员
加入:2018-02-08 11:03
嗨apogostin,

嗨apogostin,

传递给systick_wait函数的参数以微秒为单位。所以,你能确保GPIO在20us之后还在切换吗?另外,你能说明一下你的目标是什么吗?您想切换GPIO一次或闪烁它?

谢谢,PM_Dialog

apogostin
离线
最后看到:3个月6天前
加入:2015-02-17 01:37
当设置systick_wait()时

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

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

也许在Systick_Wait()得到维修时会影响其他中断?我看到中断向量表中的SVC_Handler(ARM SVCALL)和PENDSV_HANDLER(ARM PENDSV)。也许这些处理程序正在使用15us?

谢谢你的帮助,

亚历克斯

PM_Dialog
离线
最后看到:16小时10分钟前
工作人员
加入:2018-02-08 11:03
嗨apogostin,

嗨apogostin,

请问您现在在做SDK的哪个项目?你是否有BLE活动或者你正在使用SDK的非BLE示例?我问你的原因是想复制你的问题。

谢谢,PM_DIalog

apogostin
离线
最后看到:3个月6天前
加入:2015-02-17 01:37

正如我在之前的文章中所说,我使用的是一个香草SDK 5.0.4 SDK——除了添加一个用户模板之外没有任何修改。我正在使用您的文档(DA1458x Software Developer's Guide UM-B-050,日期为2016年7月22日)创建用户模板。请参见第9章创建BLE应用程序。我使用了这些说明来创建用户模板。

再次感谢你的帮助,

亚历克斯

PM_Dialog
离线
最后看到:16小时10分钟前
工作人员
加入:2018-02-08 11:03
嗨apogostin,

嗨apogostin,

我想复制你的问题,你是对的。用你发布的代码,我得到18.08 uSec的延迟。原因是等待时间(2 uSec)非常低。你可以通过显式写入GPIO寄存器而不调用GPIO_SetActive() / GPIO_SetInactive() api来减少等待时间。通过下面的代码片段,我将时间从18.08 uSec减少到9.083 uSec:

SetWord16(P0_SET_DATA_REG, 1 << GPIO_PIN_2);systick_wait (2);SetWord16(P0_RESET_DATA_REG, 1 << GPIO_PIN_2);

谢谢,PM_Dialog

apogostin
离线
最后看到:3个月6天前
加入:2015-02-17 01:37

谢谢你的确认。我可以在GPIO_SetActive()中看到develop_debug宏的使用(使用CFG_DEVELOPMENT_DEBUG设置为true)。如果将DEVELOPMENT_DEBUG宏设置为false,编译并运行代码会很有趣。无论如何,它仍然不能解释您丢失的~9us -即使直接设置/清除GPIO寄存器。但是,再次感谢您能够复制这个问题,我现在可以围绕它工作了。

谢谢你!

亚历克斯

PM_Dialog
离线
最后看到:16小时10分钟前
工作人员
加入:2018-02-08 11:03
嗨apogostin,

嗨apogostin,

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

谢谢,PM_Dialog