systick_wait()

⚠️
嗨,...感谢您来论坛。令人兴奋的消息!我们现在正在迁至我们的新论坛平台,将提供更好的功能,并包含在主对话框网站中。所有帖子和帐户都已迁移。我们现在只接受新论坛上的流量 - 请发布任何新线程https://www.dialog-seminile.com/support.。我们将在未来几天修复错误/优化搜索和标记。
8个帖子/ 0新
最后一篇
爱好多
离线
最后一次露面:3个月3周前
加入:2015-02-17 01:37
systick_wait()

在DA14580上使用SDK 5.0.4。无法获得15us的Systick_Wait()工作。下面的代码将GPIO降高15US。我尝试使用回调异常(使用systick_register_callback()在systick.c中),并查看相同的结果。我可以将GPIO设置为Systick_Wait(7)切换20us。因此,似乎有一个最小的Systick等待15us的Systick_wait(2),并添加5个与Systick_Wait(7)添加5个微秒的10US。这是Vanilla 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.
离线
最后一次露面:2小时4分钟前
职员
加入:2018-02-08 11:03
嗨爱好道,

嗨爱好道,

传递给Systick_Wait函数的参数具有微秒的单位。那么,你能否确保GPIO在20起后转折?此外,你能澄清你想要完成的事情吗?你想把gpio切换一次或闪烁吗?

谢谢,PM_DIALOG.

爱好多
离线
最后一次露面:3个月3周前
加入:2015-02-17 01:37
当systick_wait()设置时

当Systick_Wait()设置为2US时,GPIO即可为15us切换。我可以确认我正在查看正确的引脚,因为当我将systick_wait()设置为其他值时,我可以看到切换更改的持续时间。例如,当设置Systick_Wait()到7时,我会看到GPIO切换20US。我使用O-Scope几次测试了这一点。

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

也许还有其他中断影响当systick_wait() gets serviced? I see a SVC_Handler (ARM SVCall) and PendSV_Handler (ARM PendSV) inside the interrupt vector table. Maybe these handlers are using the 15us?

谢谢你的帮助,

亚历克斯

PM_DIALOG.
离线
最后一次露面:2小时4分钟前
职员
加入:2018-02-08 11:03
嗨爱好道,

嗨爱好道,

请问你能告诉我在哪个SDK的项目中都在努力?您是否有活动,或者您正在使用SDK的任何非BLE示例?我要求的原因是尝试复制您的问题。

谢谢,PM_DIALOG.

爱好多
离线
最后一次露面:3个月3周前
加入:2015-02-17 01:37

正如我在上一篇文章中所说的那样,我正在使用Vanilla SDK 5.0.4 SDK - 没有添加用户模板以外的修改。我正在使用您的文档(DA1458X软件开发人员指南UM-B-050,日期为22-jul-2016)来创建用户模板。请参阅第9章创建BLE应用程序。我用这些说明来创建用户模板。

再次 - 感谢您的帮助,

亚历克斯

PM_DIALOG.
离线
最后一次露面:2小时4分钟前
职员
加入:2018-02-08 11:03
嗨爱好道,

嗨爱好道,

我试图复制你的问题,你是对的。使用您发布的代码,我得到了18.08 USEC延迟。这是因为等待期间(2 USEC)极低。您可以通过显式写入GPIO寄存器来减少等待期,而不调用GPIO_SetActive()/ gpio_setInactive()API。通过以下代码片段,我将时间从18.08 USEC减少到9.083 U SEC:

setword16(p0_set_data_reg,1 << gpio_pin_2);systick_wait(2);setword16(p0_reset_data_reg,1 << gpio_pin_2);

谢谢,PM_DIALOG.

爱好多
离线
最后一次露面:3个月3周前
加入:2015-02-17 01:37

谢谢你的确认。我可以在gpio_setactive()中使用development_debug宏(使用cfg_development_debug设置为true)。使用development_debug宏设置为false会将其编译和运行代码是有趣的吗?无论如何,它仍然没有解释你的缺失〜9us - 即使是直接设置/清除GPIO寄存器。但是,它再次极大地夸大了,你能够复制这个问题,我现在可以解决它。

谢谢,

亚历克斯

PM_DIALOG.
离线
最后一次露面:2小时4分钟前
职员
加入:2018-02-08 11:03
嗨爱好道,

嗨爱好道,

如果定义了CFG_Development_debug,则可以调试固件,您可以在不编程OTP内存的情况下模拟深度睡眠模式。通过拒绝cfg_development_debug,您可以禁用调试模式,因此您无法热热连接调试器并获得调试信息。例如,如果将发生硬肢或NMI,则无法捕获它。

谢谢,PM_DIALOG.