在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);
谢谢你的帮助,
亚历克斯
设备:
嗨爱好道,
传递给Systick_Wait函数的参数具有微秒的单位。那么,你能否确保GPIO在20起后转折?此外,你能澄清你想要完成的事情吗?你想把gpio切换一次或闪烁吗?
谢谢,PM_DIALOG.
当Systick_Wait()设置为2US时,GPIO即可为15us切换。我可以确认我正在查看正确的引脚,因为当我将systick_wait()设置为其他值时,我可以看到切换更改的持续时间。例如,当设置Systick_Wait()到7时,我会看到GPIO切换20US。我使用O-Scope几次测试了这一点。
使用Systick_Wait()时似乎有15us最小的间隔。我以毫秒间隔触发代码(〜8ms)。所以每〜8ms我应该看到GPIO切换2U起,但它的切换15us。
也许有其他中断影响什么时候systick_wait()得到服务?我在中断向量表中看到SVC_Handler (ARM SVCall)和PendSV_Handler (ARM PendSV)。也许这些联络人用的是15us?
谢谢你的帮助,
亚历克斯
嗨爱好道,
请问你能告诉我在哪个SDK的项目中都在努力?您是否有活动,或者您正在使用SDK的任何非BLE示例?我要求的原因是尝试复制您的问题。
谢谢,PM_DIALOG.
正如我在上一篇文章中所说的那样,我正在使用Vanilla SDK 5.0.4 SDK - 没有添加用户模板以外的修改。我正在使用您的文档(DA1458X软件开发人员指南UM-B-050,日期为22-jul-2016)来创建用户模板。请参阅第9章创建BLE应用程序。我用这些说明来创建用户模板。
再次 - 感谢您的帮助,
亚历克斯
嗨爱好道,
我试图复制你的问题,你是对的。使用您发布的代码,我得到了18.08 USEC延迟。这是因为等待期间(2 USEC)极低。您可以通过显式写入GPIO寄存器来减少等待期,而不调用GPIO_SetActive()/ gpio_setInactive()API。通过以下代码片段,我将时间从18.08 USEC减少到9.083 U SEC:
谢谢,PM_DIALOG.
谢谢你的确认。我可以在gpio_setactive()中使用development_debug宏(使用cfg_development_debug设置为true)。使用development_debug宏设置为false会将其编译和运行代码是有趣的吗?无论如何,它仍然没有解释你的缺失〜9us - 即使是直接设置/清除GPIO寄存器。但是,它再次极大地夸大了,你能够复制这个问题,我现在可以解决它。
谢谢,
亚历克斯
嗨爱好道,
如果定义了CFG_Development_debug,则可以调试固件,您可以在不编程OTP内存的情况下模拟深度睡眠模式。通过拒绝cfg_development_debug,您可以禁用调试模式,因此您无法热热连接调试器并获得调试信息。例如,如果将发生硬肢或NMI,则无法捕获它。
谢谢,PM_DIALOG.