在DA14580上使用SDK 5.0.4。无法让systick_wait()在15秒内工作。下面的代码将GPIO高电平切换为15us。我尝试过使用回调异常(在systick.c中使用systick\u register\u callback())并看到了相同的结果。我可以使用systick_wait(7)将GPIO设置为切换为20us。因此,使用systick_wait(2)时,systick_wait的最小等待时间为15us,使用systick_wait(7)时,再加上5微秒,就可以达到20us。这是一个普通的SDK 5.0.4版本-除了添加用户模板之外,不修改任何代码。
GPIO_设置激活(GPIO_端口0、GPIO_引脚2);
systick_wait(2);
GPIO_设置不活动(GPIO_端口_0,GPIO_引脚_2);
谢谢你的帮助,
亚历克斯
设备:
嗨,apogostin,
传递给systick_wait函数的参数以微秒为单位。那么,您能确保GPIO在20秒后切换吗?另外,你能澄清一下你想要完成什么吗?您想切换GPIO一次还是闪烁它?
谢谢,下午好
当systick_wait()设置为2us时,GPIO切换为15us。我可以确认我看到的是正确的pin,因为当我将systick_wait()设置为其他值时,我可以看到切换更改的持续时间。例如,当将systick_wait()设置为7时,我看到GPIO切换为20us。我已经用o型示波器测试过好几次了。
使用systick_wait()时,似乎有15秒的最小间隔。我以毫秒间隔(~8毫秒)触发代码。所以每8毫秒我应该看到GPIO切换为2us,但它切换为15us。
也许有其他中断影响什么时候systick_wait()得到服务?我在中断向量表中看到SVC_Handler (ARM SVCall)和PendSV_Handler (ARM PendSV)。也许这些联络人用的是15us?
谢谢你的帮助,
亚历克斯
嗨,apogostin,
你能告诉我你在SDK的哪个项目上工作吗?您是否有可扩展的活动或正在使用任何不可扩展的SDK示例?我这样问的原因是试图复制你的问题。
谢谢,下午好
正如我在上一篇文章中所述,我使用的是香草SDK 5.0.4 SDK-除了添加用户模板之外,没有其他修改。我正在使用您的文档(日期为2016年7月22日的DA1458x软件开发人员指南UM-B-050)创建用户模板。请参阅第9章创建您的BLE应用程序。我已经使用这些说明创建了用户模板。
再次感谢你的帮助,
亚历克斯
嗨,apogostin,
我试图复制你的问题,你是对的。根据您发布的代码,我得到了18.08 uSec延迟。原因是等待时间(2 uSec)极低。您可以通过显式写入GPIO寄存器而不调用GPIO_SetActive()/GPIO_SetInactive()API来缩短等待时间。通过以下代码片段,我将时间从18.08 uSec缩短到9.083 u Sec:
谢谢,下午好
谢谢你的确认。我可以在GPIO_SetActive()中看到DEVELOPMENT_DEBUG宏的使用(通过CFG_DEVELOPMENT_DEBUG设置为true)。在DEVELOPMENT_DEBUG宏设置为false的情况下编译和运行代码会很有趣吗?无论如何,它仍然无法解释您丢失的~9us–即使直接设置/清除GPIO寄存器。但是,再次非常感谢您能够复制这个问题,我现在可以解决它了。
非常感谢。
亚历克斯
嗨,apogostin,
如果定义了CFG_DEVELOPMENT_DEBUG,您将能够调试固件,并且可以模拟深度睡眠模式,而无需编程OTP内存。通过取消定义CFG_DEVELOPMENT_DEBUG,可以禁用调试模式,因此无法热连接调试器并获取调试信息。例如,如果发生硬故障或NMI,您将无法捕获它。
谢谢,下午好