CC254x的SLEEPSTA在手册上标示的位定义如下:
7 OSC32K_CALDIS 0 R
6:5 – 00 R
4:3 RST[1:0] XX R
2:1 – 00 R
0 CLK32K 0 R
TI的BLE协议栈1.4中的SimpleBLEPeripheral开头的初始化代码中执行
HAL_BOARD_INIT();
展开后的代码如下:
/* Set to 16Mhz to set 32kHz OSC, then back to 32MHz */ \
START_HSOSC_XOSC(); \
SET_OSC_TO_HSOSC(); \
SET_32KHZ_OSC(); \
SET_OSC_TO_XOSC(); \
STOP_HSOSC(); \
\
/* Enable cache prefetch mode. */ \
PREFETCH_ENABLE();
其中大部分都用到SLEEPSTA寄存器,如:
#define START_HSOSC_XOSC() \
{ \
SLEEPCMD &= ~OSC_PD; \
while (!(SLEEPSTA & XOSC_STB)); \
}
而宏 XOSC_STB在halmcu.h当中定义如下:
/* SLEEPSTA bit definitions */
#define XOSC_STB BV(6) /* XOSC: powered, stable=1 */
#define HFRC_STB BV(5) /* HFRCOSC: powered, stable=1 */
TI的源码是说bit6是XOSC的稳定标示位.但是手册中却说bit6是保护位(标示Reserved)
不可写,只读.
(我也注意到另外一个寄存器CLKCONSTA,它的bit指示当前使用的时钟源.)
最大的奇怪是,代码编译后,功能正常.
望高手指点一二.
多谢. |