systick_wait ()

⚠️
大家好. .谢谢你来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台,它将提供更好的功能,包含在主对话网站中。所有岗位和账户都已迁移。我们现在只接受新论坛的流量-请在上面发布任何新帖子//www.wsdof.com/support.我们将在未来几天修复bug /优化搜索和标记。
8个帖子/ 0个新
最后发表
apogostin
离线
最后看到:1个月1个星期前
加入: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)的系统等待时间增加了5微秒,最终达到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
离线
最后看到:11小时52分钟前
工作人员
加入:2018-02-08 11:03
嗨apogostin,

嗨apogostin,

传递给systick_wait函数的参数以微秒为单位。所以你能确保GPIO在20us后切换吗?另外,你能解释一下你想要完成的任务吗?您想要切换GPIO一次还是让它闪烁?

谢谢,PM_Dialog

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

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

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

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

谢谢你的帮助,

亚历克斯

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

嗨apogostin,

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

谢谢,PM_DIalog

apogostin
离线
最后看到:1个月1个星期前
加入: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
离线
最后看到:11小时52分钟前
工作人员
加入: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
离线
最后看到:1个月1个星期前
加入:2015-02-17 01:37

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

谢谢你!

亚历克斯

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

嗨apogostin,

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

谢谢,PM_Dialog