CC2541之电源管理和时钟

2019-07-13 23:30发布

一、电源管理

CC2541有五种不同的供电模式,分别为主动模式、空闲模式、PM1、PM2和PM3。其中主动模式是一般模式,而PM3具有最低的功耗。

(注:BOD  布朗输出探测器                     POR  上电复位)低功耗部分
1.如何总是在PM1
  osal_pwrmgr_device( PWRMGR_ALWAYS_ON );
2.如何进入PM2
  osal_pwrmgr_device( PWRMGR_BATTERY );在空闲的时候就会进入到PM2模式
3.如何进入PM3
  存在连接就断开连接,存在广播就停掉广播,并确认自己创建的所有定时任务都已关闭,
  则系统应该就会进入PM3模式,只能进行外部中断唤醒
各模式具体功耗电流
1.主动模式RX: 17.9mA
2.主动模式(TX)为0 dBm:18.2mA
3.PM1(4微妙唤醒):270uA
4.PM2: 1uA
5.PM3: 0.5uA
主动模式下,通过使能PCON.IDLE位,CPU内核停止运行,进入空闲模式。空闲模式下,CPU内核能被任何使能的中断唤醒(即进入主动模式)。PM1模式下,进入就运行一个掉电序列,当等待唤醒时间小于3ms时,可使用PM1模式。PM2模式下,当使用睡眠定时器作为唤醒时间,并结合外部中断时,唤醒时间大于3ms时,可使用PM2模式。PM3模式下,当等待外部事件时,睡眠时间超过3ms时应该使用PM3获得超低功耗。


二、时钟

CC2541有四个振荡器,分别是:
  • 32MHz外部晶振           为内部时钟提供时钟源和用于RF收发器
  • 16MHz内部RC振荡器   为内部时钟提供时钟源,但不可用于RF收发器,因为RC内部振荡器功耗小但是精度差
  • 32kHz外部晶振            运行在32.768KHz上,为系统需要的时间精度提供一个稳定的时钟信号
  • 32kHz内部RC振荡器    运行在32.753kHz上,功耗小,但是精度低
注意:系统上电,默认的是使用内部16Mhz时钟和内部32kHz振荡器,两个32KHz振荡器不能同时运行。

注意:改变CLKCONCMD.OSC位不会立即改变系统时钟,时钟源的改变首先在CLKCONSTA.OSC==CLKCONCMD.OSC的时候生效。所以在程序里,要加一个等待的语句,防止时钟未稳定的程序执行错误/**************************************************************** *函 数 名:SysStartXOSC *功 能:系统时钟初始化 *入口参数:无 *出口参数:无 *****************************************************************/ void SysStartXOSC(void) { CLKCONCMD = (CLKCONCMD & 0x80) | 0x49; // 使用16M晶振作为主时钟 while ((CLKCONSTA & ~0x80) != 0x49 ); // 等待主时钟切换到16M晶振 CLKCONCMD = (CLKCONCMD & ~0x80) ; // 使用外部32K晶振作为休眠时钟 while ( (CLKCONSTA & 0x80) != 0 ); // 等待睡眠时钟切换到外部32K晶振 CLKCONCMD = (CLKCONCMD & 0x80) ; // 使用32M晶振作为主时钟 while ( (CLKCONSTA & ~0x80) != 0 ); // 等待主时钟切换到32M晶振 }