你好,
我们有一个需要微秒延迟的传感器才能访问它。SDK中或外部是否有一个函数,我们可以产生1微秒的延迟?
我们有很多延时函数,但都是以毫秒为单位的。你能给freertos提供一个同样的解决方案吗
感谢和问候,Sandeep。
嗨Sandeep,
感谢您的在线提问和对我们的BLE解决方案感兴趣。不幸的是,设置毫秒延迟是不可能的,因为OS计时器的粒度是1.98msec ~= 2msec。请检查FreeRTOSConfig.h中的以下宏
#define configSYSTICK_CLOCK_HZ ((TickType_t) 512) #define TICK_PERIOD ((configSYSTICK_CLOCK_HZ / configTICK_RATE_HZ))
谢谢,PM_Dialog
我有一个传感器绝对需要微秒的延迟。没有这个,传感器接口将无法工作。我也在其他微控制器上测试过。你能给我一个解决这个问题的办法吗?
感谢和问候,
Sandeep。
让我在公司内部查一下,然后很快回复你。
您可以使用hw_clk_delay_usec(),它位于hw_clk.h。这个函数获取当前时钟源,并添加N ussecond的延迟。由于您使用的是传感器,DA1469x应处于主动模式,因此系统将运行32MHz时钟。
文档说明
/ * ** \brief添加N个usecs的延迟。** \param[in] usec等待的usec个数。** \返回空** \warning系统时钟周期中最小延迟为HW_CLK_DELAY_OVERHEAD_CYCLES。*以系统时钟时钟为单位,分辨率为HW_CLK_CYCLES_PER_DELAY_REP。*应用AHB分频器后计算系统时钟滴答。*/
#定义HW_CLK_DELAY_OVERHEAD_CYCLES (72)#定义HW_CLK_CYCLES_PER_DELAY_REP (4)
你能解释一下最小延迟的计算方法吗?
它能产生1个我们吗?
当使用XTAL32M时钟运行时,可以创建的最小延迟是3us。不可能创建1us运行32MHz时钟,因为代码执行的开销大于延迟。1uS延迟只有在PLL 96MHz运行时才能实现。要做到这一点,您应该在调用hw_clk_delay_usec(1)之前将时钟航向更改为PLL。
嗨Sandeep,
感谢您的在线提问和对我们的BLE解决方案感兴趣。不幸的是,设置毫秒延迟是不可能的,因为OS计时器的粒度是1.98msec ~= 2msec。请检查FreeRTOSConfig.h中的以下宏
谢谢,PM_Dialog
我有一个传感器绝对需要微秒的延迟。没有这个,传感器接口将无法工作。我也在其他微控制器上测试过。你能给我一个解决这个问题的办法吗?
感谢和问候,
Sandeep。
嗨Sandeep,
让我在公司内部查一下,然后很快回复你。
谢谢,PM_Dialog
嗨Sandeep,
您可以使用hw_clk_delay_usec(),它位于hw_clk.h。这个函数获取当前时钟源,并添加N ussecond的延迟。由于您使用的是传感器,DA1469x应处于主动模式,因此系统将运行32MHz时钟。
谢谢,PM_Dialog
你好,
文档说明
/ * *
* \brief添加N个usecs的延迟。
*
* \param[in] usec等待的usec个数。
*
* \返回空
*
* \warning系统时钟周期中最小延迟为HW_CLK_DELAY_OVERHEAD_CYCLES。
*以系统时钟时钟为单位,分辨率为HW_CLK_CYCLES_PER_DELAY_REP。
*应用AHB分频器后计算系统时钟滴答。
*/
#定义HW_CLK_DELAY_OVERHEAD_CYCLES (72)
#定义HW_CLK_CYCLES_PER_DELAY_REP (4)
你能解释一下最小延迟的计算方法吗?
它能产生1个我们吗?
感谢和问候,
Sandeep。
嗨Sandeep,
当使用XTAL32M时钟运行时,可以创建的最小延迟是3us。不可能创建1us运行32MHz时钟,因为代码执行的开销大于延迟。1uS延迟只有在PLL 96MHz运行时才能实现。要做到这一点,您应该在调用hw_clk_delay_usec(1)之前将时钟航向更改为PLL。
谢谢,PM_Dialog