在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);
谢谢你的帮助,
亚历克斯
设备:
嗨,阿波戈斯汀,
传递给Systick_Wait函数的参数具有微秒的单位。那么,您能确保GPIO在20US之后切换吗?另外,您能澄清要完成的工作吗?您想一次切换GPIO还是眨眼?
谢谢,pm_dialog
当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?
谢谢你的帮助,
亚历克斯
嗨,阿波戈斯汀,
您能请让我知道您正在从事哪个SDK项目?您是否有BLE活动,或者您正在使用SDK的任何非简单示例?我要的原因是要尝试复制您的问题。
谢谢,pm_dialog
正如我在上一篇文章中所说的那样,我正在使用Vanilla SDK 5.0.4 SDK-除了添加用户模板以外,没有其他修改。我正在使用您的文档(DA1458X软件开发人员指南UM-B-050,日期为2016年7月22日)来创建用户模板。请参阅第9章创建您的BLE应用程序。我使用这些说明创建了用户模板。
再次 - 感谢您的帮助,
亚历克斯
嗨,阿波戈斯汀,
我试图复制您的问题,您是对的。有了您发布的代码,我得到了18.08 USEC延迟。原因是因为等待期(2 USEC)极低。您可以通过明确写入GPIO寄存器来减少等待时间,而不致电GPIO_SETACTIVE() / gpio_setinactive()API。使用以下代码段,我将时间从18.08 USEC减少到9.083 U SEC:
谢谢,pm_dialog
感谢您的确认。我可以在gpio_setactive()中看到开发_debug宏的使用(使用cfg_development_debug设置为true)。用开发_debug宏设置为false编译和运行代码会很有趣吗?无论如何,即使直接设置/清除GPIO寄存器,它仍然无法解释您的缺失〜9US。但是,您能够复制此问题,这再次非常有用,我现在可以解决它。
谢谢,
亚历克斯
嗨,阿波戈斯汀,
如果定义了cfg_development_debug,您将能够调试固件,并且可以在无需编程OTP内存的情况下模拟深度睡眠模式。通过UNDEDENDED CFG_DEVEVELMENT_DEBUG,您可以禁用调试模式,因此您将无法加热调试器并获取调试信息。例如,如果要发生硬板或NMI,您将无法捕获它。
谢谢,pm_dialog