概述
CC2530系统时钟:
16MHz(内部RC振荡器)、32MHz(外部晶振)
上电模式16MHz 精度:内部<外部晶振 无线必须使用32MHz!!!
上电模式16MHz——>等待 稳定后——>切换到32MHz
CLKCONCMD :时钟控制命令寄存器(设置是16MHz还是32MHz)
CLKCONSTA :时钟控制状态寄存器<只读 >(通过读取寄存器判断外部晶振稳定)
16MHz————>32MHz:
CLKCONCMD &= ~0x40; //OSC位清0,选择系统时钟源为32MHz晶振
while(CLKCONSTA & 0x40); //等待外部晶振稳定
CLKCONCMD &= ~0x07; //设置当前系统时钟的速度为32MHz
32MHz————>16MHz:
CLKCONCMD |= 0x40; //OSC位清0,选择系统时钟源为16MHz晶振
while(!(CLKCONSTA & 0x40));//等待外部晶振稳定
CLKCONCMD |= 0x01;//设置当前系统时钟的速度为16MHz
#include "ioCC2530.h"
#define D6 P1_4
#define sw2 P0_1
unsigned char F_clk = 16;
void Delay(unsigned int t)
{
while(t--);
}
void Init_prot()
{
P1SEL &= ~0x1b;
P1DIR |= 0x1b;
P1 &= ~0x1b;
}
void Set_Clock(unsigned char clk)
{
switch(clk)
{
case 16:
CLKCONCMD |= 0x40;
while(!(CLKCONSTA & 0x40));
CLKCONCMD |= 0x01;
break;
case 32:
CLKCONCMD &= ~0x40;
while(CLKCONSTA & 0x40);
CLKCONCMD &= 0x70;
break;
}
}
void Scan_keys()
{
if(sw2 == 0)
{
Delay(200);
if(sw2 == 0)
{
while(sw2 == 0)
if(F_clk == 16)
{
Set_Clock(32);
F_clk = 32;
}
else if(F_clk == 32)
{
Set_Clock(16);
F_clk = 16;
}
}
}
}
void main()
{
Init_prot();
while(1)
{
D6 = 1;
Delay(60000);
Scan_keys();
Delay(60000);
Scan_keys();
D6 = 0;
Delay(60000);
Scan_keys();
Delay(60000);
Scan_keys();
}
}
最后
以上就是有魅力西牛为你收集整理的CC2530系统时钟的全部内容,希望文章能够帮你解决CC2530系统时钟所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复