最近在做一个数据采集的项目,相同的数据有几种不同的采集途径,为了数据的统一需要做一个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
}
}
运行下来,效果挺好的,总算可以满足要求了。
分享给需要的朋友们,希望少走弯路!! |