72
3307
9933
技术达人
一、简介
本文以SimpleBLEPeripheral为例,解析协议栈的晶振初始化过程。
二、实验平台
协议栈版本:BLE-CC254x-1.4.0
编译软件:IAR 8.20.2
硬件平台:Smart RF开发板(主芯片CC2541)
使用特权
解析代码
1、代码位置
在2541的协议栈初始化最开头的HAL_BOARD_INIT处,协议栈对晶振进行了初始化。
然而我去查找CC254X的芯片手册,发现SLEEPCMD没有OSC_PD(第2位)、SLEEPSTA也没有XOSC_STB(第6位),如下图:
于是参考CC2430的datasheet:
协议栈在这里将OSC_PD清零,也就是同时起震内部16M的RC振荡器和外部的32M晶振。
然后判断XOSC_STB状态位,等待外部晶振起震并稳定。
其中第一行代码是让CLKCONCMD寄存器的第7位保持、其他位清零,然后第6、3、0位置1,也就是值变成x100 1001。
参照datasheet来看:
也就是不改变32k小晶振的配置、只切换到内部16M的RC振荡器。
这么做的意义在于:在切换32k小晶振前,必须先将OSC配置为16M。
所以接下来就可以配置32k小晶振了。
4)SET_OSC_TO_XOSC()(重新切换到32M外部晶振)
内部的32K的RC振荡电路已经配置好,所以这时候系统时钟即可配置为最快的外部32M晶振。
5)STOP_HSOSC()(停止内部16M的RC振荡器)
内部的16M的RC振荡电路已经没用了,即可关掉,省电。
1180
3万
11万
版主
5
2936
8824
发表回复 本版积分规则 回帖后跳转到最后一页
等级类勋章
发帖类勋章
时间类勋章
人才类勋章
3
扫码关注 21ic 官方微信
扫码关注嵌入式微处理器
扫码关注21ic项目外包
扫码关注21ic视频号
扫码关注21ic抖音号
本站介绍 | 申请友情链接 | 欢迎投稿 | 隐私声明 | 广告业务 | 网站地图 | 联系我们 | 诚聘英才 | 论坛帮助
京公网安备 11010802024343号