systick_wait()

⚠️
嗨,那里..感谢您参加论坛。激动人心的消息!现在,我们正在转到我们的新论坛平台,该平台将提供更好的功能,并包含在主话网站中。所有帖子和帐户都已迁移。我们现在仅在新论坛上接受流量 - 请在https://www.dialog-spoomendonductor.com/support。我们将在未来几天修复错误 /优化搜索和标记。
8帖子 / 0新
最后一篇文章
阿波戈斯汀
离线
最后一次露面:3个月1周前
加入:2015-02-17 01:37
systick_wait()

在DA14580上使用SDK 5.0.4。无法让Systick_Wait()在15US下工作。下面的代码将GPIO High切换为15US。我已经尝试使用回调异常(在systick.c中使用systick_register_callback(),并查看相同的结果。我可以将GPIO设置为使用Systick_Wait(7)切换20U。因此,与Systick_wait(2)(2)的最低系统等待似乎最小的Systick等待,并与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
离线
最后一次露面:3天1小时前
职员
加入:2018-02-08 11:03
嗨,阿波戈斯汀,

嗨,阿波戈斯汀,

传递给Systick_Wait函数的参数具有微秒的单位。那么,您能确保GPIO在20US之后切换吗?另外,您能澄清要完成的工作吗?您想一次切换GPIO还是眨眼?

谢谢,pm_dialog

阿波戈斯汀
离线
最后一次露面:3个月1周前
加入:2015-02-17 01:37
设置systick_wait()

当Systick_wait()设置为2US时,GPIO切换为15US。我可以确认我正在查看正确的PIN,因为当我将Systick_Wait()设置为其他值时,我可以看到切换更改的持续时间。例如,当将Systick_Wait()设置为7时,我会看到GPIO切换为20US。我已经使用O-Scope进行了几次测试。

使用systick_wait()时,似乎有15US的最小间隔。我以毫秒间隔(〜8ms)触发代码。因此,每〜8毫秒,我应该看到GPIO为2U的切换,但其切换为15US。

也许还有其他中断会影响Systick_Wait()得到服务?我在中断矢量表中看到了一个svc_handler(ARM SVCALL)和PENDSV_HANDLER(ARM PENDSV)。也许这些处理程序正在使用15US?

谢谢你的帮助,

亚历克斯

pm_dialog
离线
最后一次露面:3天1小时前
职员
加入:2018-02-08 11:03
嗨,阿波戈斯汀,

嗨,阿波戈斯汀,

您能请让我知道您正在从事哪个SDK项目?您是否有BLE活动,或者您正在使用SDK的任何非简单示例?我要的原因是要尝试复制您的问题。

谢谢,pm_dialog

阿波戈斯汀
离线
最后一次露面:3个月1周前
加入:2015-02-17 01:37

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

再次 - 感谢您的帮助,

亚历克斯

pm_dialog
离线
最后一次露面:3天1小时前
职员
加入: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个月1周前
加入:2015-02-17 01:37

感谢您的确认。我可以在gpio_setactive()中看到开发_debug宏的使用(使用cfg_development_debug设置为true)。用开发_debug宏设置为false编译和运行代码会很有趣吗?无论如何,即使直接设置/清除GPIO寄存器,它仍然无法解释您的缺失〜9US。但是,您能够复制此问题,这再次非常有用,我现在可以解决它。

谢谢,

亚历克斯

pm_dialog
离线
最后一次露面:3天1小时前
职员
加入:2018-02-08 11:03
嗨,阿波戈斯汀,

嗨,阿波戈斯汀,

如果定义了cfg_development_debug,您将能够调试固件,并且可以在无需编程OTP内存的情况下模拟深度睡眠模式。通过UNDEDENDED CFG_DEVEVELMENT_DEBUG,您可以禁用调试模式,因此您将无法加热调试器并获取调试信息。例如,如果要发生硬板或NMI,您将无法捕获它。

谢谢,pm_dialog