Contiki学习笔记之时钟初始化

  在platform/contiki-main.c源文件下的main函数数的第一行代码就是实现clock的初始化,以下是其函数体

/*---------------------------------------------------------------------------*/
/*
 * There is some ambiguity between TI cc2530 software examples and information
 * in the datasheet.
 *
 * TI examples appear to be writing to SLEEPCMD, initialising hardware in a
 * fashion semi-similar to cc2430
 *
 * However, the datasheet claims that those bits in SLEEPCMD are reserved
 *
 * The code here goes by the datasheet (ignore TI examples) and seems to work.
 */
void clock_init(void)
{
  /* Make sure we know where we stand */
  1.CLKCONCMD = CLKCONCMD_OSC32K | CLKCONCMD_OSC;

  /* Stay with 32 KHz RC OSC, Chance System Clock to 32 MHz */
  2.CLKCONCMD &= ~CLKCONCMD_OSC;
  3.while(CLKCONSTA & CLKCONCMD_OSC);

  /* Tickspeed 500 kHz for timers[1-4] */
 4.CLKCONCMD |= CLKCONCMD_TICKSPD2 | CLKCONCMD_TICKSPD1;
  while(CLKCONSTA != CLKCONCMD);

  /* Initialize tick value */
 5.timer_value = ST0;
 6timer_value += ((unsigned long int)ST1) << 8;
 75. timer_value += ((unsigned long int)ST2) << 16;
 86.timer_value += TICK_VAL;
 9.ST2 = (unsigned char)(timer_value >> 16);
10. ST1 = (unsigned char)(timer_value >> 8);
11. ST0 = (unsigned char)timer_value;

12. STIE = 1; /* IEN0.STIE interrupt enable */
}

函数第1句是对时钟控制命令寄存器进行初始化.cc2530设备有一个内部系统时钟或主时钟。该系统时钟的源既可以用16 MHz RC 振荡器,也可以采用32 MHz 晶体振荡器。时钟的控制可以使用CLKCONCMD SFR 寄存器执行。还有一个32 KHz 时钟源,可以是RC振荡器或晶振,也由CLKCONCMD 寄存器控制(

xosc是指外部的晶振给系统提供clock,rcosc是指单片机内部的RC震荡电路提供系统clock)。如图1所示:
图1
图2
 
CLKCONSTA寄存器是一个只读寄存器,用于读取当前定时器的状态.从CC2530手册上关于用CLKCONCMD 的描述可知第一句是让32KHz的RCOSC作为32kHz时钟的源(注意设置这个位的时候系统时钟要选择16MHz的RCOSC)。第二句是让系统时钟从16MHZ(上电系统默认时钟是这个时钟) 的RCOSC转换到32MHZ的XOSC.第三句是等待这个状态的完成.函数的第4句用于设置定时器1-4的Tick speed 为500Khz
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值