查看: 8017|回复: 6

Zstack 时间戳的获取

[复制链接]
ankjoy 发表于 2011-4-21 23:52:35 | 显示全部楼层 |阅读模式
最近在做一个数据采集的项目,相同的数据有几种不同的采集途径,为了数据的统一需要做一个zigbee的同步时钟。想到在协调器上面运行一个时钟(有加外部RTC校正),自然地想用定时器模拟,把CC2530的定时器基础实验又重新做了一遍。碰到了一个问题,T3的 modulo mode 无法产生中断,折腾了好久,到网上一搜,在TI的官网上面找到了答案,有兴趣的朋友可以浏览一下http://e2e.ti.com/support/low_power_rf/f/158/p/35332/125220.aspx
   没办法就用Up/Down Mode了,做起来还是比较简单的,运行一下,效果不是一般的差,运行3分钟就慢了将近10秒钟,考虑到中断响应的延时,在中断服务函数里面读出TxCNT的值,对TxCC0的值补偿重载,效果还是没什么改善,没辙!、
   后来想到Zstack的系统时钟,做起来更简单,OSAL_Clock.c中的函数一改就好了,
  static void osalClockUpdate( uint16 elapsedMSec )
   {
       volatile uint8 elapsedSeconds;
       // Add elapsed milliseconds to the saved millisecond portion of time
       timeMSec += elapsedMSec;

       // Roll up milliseconds to the number of seconds
       if ( timeMSec > 1000 )
      {
           elapsedSeconds=timeMSec / 1000;
           OSAL_timeSeconds += elapsedSeconds;
          //    OSAL_timeSeconds += timeMSec / 1000;
          timeMSec = timeMSec % 1000;
          halTimerClockIncrement(elapsedSeconds);//时钟计时递增
         #if defined ( LCD_SUPPORTED )
          halTimerClockPrint();//LCD显示时钟
         #endif
     }
  }
  运行下来,效果挺好的,总算可以满足要求了。
分享给需要的朋友们,希望少走弯路!!
763966787 发表于 2011-4-22 08:18:19 | 显示全部楼层
楼主说的运行3分钟慢10秒的问题,其实是z-stack程序中设置硬件定时器计数寄存器的公式有问题,在函数halTimerSetCount()中,我计算的是差不多每分钟慢2秒多,楼主好好检查下。
wangzeyue 发表于 2011-4-22 12:40:11 | 显示全部楼层
只是在协调上运行时钟吗?协调和其他路由节点的时钟如何保持同步?
zxjane 发表于 2011-4-27 09:19:40 | 显示全部楼层
我也想问楼上那个问题
lizheng86312 发表于 2012-8-29 13:28:22 | 显示全部楼层
学到东西了。顶。。。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表