标签:
CC2541有四个振荡器,分别是:
1 /**************************************************************** 2 *函 数 名:InitClock 3 *功 能:系统时钟初始化 4 *入口参数:无 5 *出口参数:无 6 *****************************************************************/ 7 void InitClock(void) 8 { 9 CLKCONCMD &= ~0x40; // 设置系统时钟源为 32MHZ晶振 10 while(CLKCONSTA & 0x40); // 等待晶振稳定 11 CLKCONCMD &= ~0x47; // 设置系统主时钟频率为 32MHZ 12 }
但是实际调试时,调用该函数,总是得不到32MHz的时钟,16MHz的工作时钟始终不变,找了很久,不知道为什么,调试的时候程序一直停在第10行代码那。后来用馒头科技的时钟程
序,调试成功,系统工作时钟变为32MHz,以后就用这个程序了,程序代码如下:
1 /**************************************************************** 2 *函 数 名:SysStartXOSC 3 *功 能:系统时钟初始化 4 *入口参数:无 5 *出口参数:无 6 *****************************************************************/ 7 void SysStartXOSC(void) 8 { 9 SLEEPCMD &= ~0x04; // 启动所有晶振 10 while (!(SLEEPSTA & 0x40)); // 等待晶振稳定 11 12 CLKCONCMD = (CLKCONCMD & 0x80) | 0x49; // 使用16M晶振作为主时钟 13 while ((CLKCONSTA & ~0x80) != 0x49 ); // 等待主时钟切换到16M晶振 14 15 CLKCONCMD = (CLKCONCMD & ~0x80) ; // 使用外部32K晶振作为休眠时钟 16 while ( (CLKCONSTA & 0x80) != 0 ); // 等待睡眠时钟切换到外部32K晶振 17 18 CLKCONCMD = (CLKCONCMD & 0x80) ; // 使用32M晶振作为主时钟 19 while ( (CLKCONSTA & ~0x80) != 0 ); // 等待主时钟切换到32M晶振 20 21 SLEEPCMD |= 0x04; // 关闭未使用的晶振 22 }
标签:
原文地址:http://www.cnblogs.com/chenzhao207/p/4506764.html