单片机cc2530延迟函数实测解析

单片机cc2530延迟函数实测解析,第1张

  cc2530开发板,ZigBee是基于IEEE802.15.4无线标准研制开发的有关组网、安全和应用软件方面的技术标准。其特点是近距离、低复杂度、自组织、低功耗、低数据速率、低成本。ZigBee的技术特性决定它将是无线传感器网络的最好选择,广泛用于物联网,自动控制和监视等诸多领域。

  检测不同的波形,所以对时间要求很高,但是发现Zstack本身提供的微秒级的延时其实有误差。

  因此特地写了测试函数

  先说CC2530与普通8051单片机时钟的不同,CC2530的每个指令是一个时钟,而标准的8051的指令周期是12个时钟。

  若选用32MHZ的时钟频率,那么时钟周期是1/32 us,一个指令也就是1/32us.

  然后我们需要确定ZStack中使用的时钟频率,找到ZMain.c文件中的 int main (void)函数,在

  HAL_BOARD_INIT();

  中可以看到选择的是32MHZ的时钟频率。同时也可以读取CLKCONCMD中第6位的值,如果为0则为32MHZ。

  ZStack中大多使用的延时函数如下:

  void Delay_us(uint16 value){

  while (value--)

  {

  asm(“NOP”); //一个指令周期占用一个时钟周期

  asm(“NOP”);

  asm(“NOP”);

  }

  }

  用示波器测试的不同的参数,其时间值如下表:

  单片机cc2530延迟函数实测解析,单片机cc2530延迟函数实测解析,第2张

  这个时间经过实际检测是准确的。

  延迟函数: 函数功能是软件延时,执行5 次0 到n 的空循环来实现软件延时。延时时间约为:(n“18*5) /时钟频率,单位是秒。在。我们的例子中,n 的值为10000,时钟频率为16M(即16000000。因此延的时间大约是; (10000*18*5)/16M = 0 05625(单位秒)。

  单片机cc2530延迟函数实测解析,单片机cc2530延迟函数实测解析,第3张

  初始化函数:初始化LED灯。

  单片机cc2530延迟函数实测解析,单片机cc2530延迟函数实测解析,第4张

  单片机cc2530延迟函数实测解析,单片机cc2530延迟函数实测解析,第5张

  LED灯自动闪烁函数:依次打开红绿黄蓝灯,再依次关闭红绿黄蓝灯,如此反复,无限循环

 单片机cc2530延迟函数实测解析,单片机cc2530延迟函数实测解析,第6张

  Delay_us()函数中,一次循环+3个Nop指令的汇编代码如下图:

 单片机cc2530延迟函数实测解析,单片机cc2530延迟函数实测解析,第7张

  每条指令都用红色标记表明其需要的时钟周期,也就是一次循环需要21个时钟周期,如果按照一个时钟1/32us的话,当参数值为75时,时间长为75X21/32=49.2us.

  这与实际测试时不符合的,实际为100us.

  我暂时猜测为在ZStack在不同功能处理下也许时钟周期不同,或者有中断等的干扰,但如果时钟为16MHZ的话,那计算时间和实际测试时间则是一致的。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/dianzi/2717226.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-17
下一篇 2022-08-17

发表评论

登录后才能评论

评论列表(0条)

保存