Zigbee学习日记(五)时钟与串口
goJhou 发布于2017-12 浏览:3266 回复:2
2
收藏

CC2530存在一个高频时钟信号,主要为CPU供给,保证程序运行。

低频时钟信号,主要是给偏上外设资源,如看门狗、睡眠定时器。

 

时钟信号的来源

高频信号有2个,芯片内部有16M RC电路;外接32M石英晶振

低频信号有2个,芯片内部有32K RC电路;外接32.768K石英晶振

CC2530芯片默认上电时,是内部的2个RC电路作为时钟来源。

我们在使用串口,特别是无线通信时,必须要使用32M的石英晶振作为高频时钟来源。

高频时钟可以同时起振,产生高频时钟信号,但只能有一个供给CPU

而低频时钟只能有一个起振,并供给CC2530

 

系统高频时钟源的切换步骤:

1.让2个高频时钟源起振

使用SLEEPCMD寄存器,设该寄存器第2位为0

2.等待目标时钟源震荡稳定

使用SLEEPSTA寄存器,该寄存器第6位为0时表示未稳定,1表示32M时钟已经稳定。

3.延时一小段时间

超过63微秒延时

4.不分频输出

把CLKCONCMD寄存器的低3位设置为000 表示32MHz不分频。 若为001则为16M 2分频,010是8M 4分频。此处只能000

5.选中目标高频时钟源作为系统主时钟

把CLKCONCMD寄存器的第6位设为0 表示使用32MHz。1为16MHz

6.确认当前工作系统时钟是否为所选时钟源

CLKCONSTA寄存器的第6位如果为0,则当前系统主时钟已经是32MHz了,1为16MHz。

 

void Init32M(){
    //1
    SLEEPCMD &= 0xFB; //1111 1011 开启2个高频时钟源
    
    //2
    while(0==(SLEEPSTA & 0x40)); //0010 0000 等待32M稳定
    
    //3
    char c=64;
    while(c--);// 超过63us的骚操作
    
    //4
    CLKCONCMD &=0xF8; // 1111 1000 低3位清0 不分频
    
    //5
    CLKCONCMD &= 0xBF; // 1011 1111 设置32M为主时钟
    
    //6
    while(CLKCONSTA & 0x40) //0100 0000 等待成功
    
    SLEEPCMD &= 0xFF;//1111 1111 关闭闲置的另一个高频时钟源 节省能量
}

16MHz的处理速度是32MHz的一半

 

CC2530有2个串口

第一个串口可以设置在P0上或P1上
P0_2为RX
P0_3为TX
或者
P1_4为RX
P1_5为TX

第二个串口可以设置在
P0_4为TX
P0_5为RX
或者
P1_6为TX
P1_7为RX

如何设置需要代码实现

串口配置流程

1.指定串口的IO位置

2.相应IO配置成偏上外设功能

3.8个数据位、1个停止位、无流控、无校验确立。

4.波特率设置

5.开CPU中断、对应串口接收中断

 

//一定要记得把时钟改成32M


//基于32M晶振时钟源 原生配置串口0 波特率为115200
void UartCfg(){
    PERCFG &= ~0x01; //指定串口0在备用位置1
    P0SEL |= 0x0C; //0000 1100 设置成偏上外设
    U0CSR |= 0xC0; //8个数据位、1个停止位、无流控、无校验确立。
    
    U0GCR=11;  //波特率设置 详情可从手册中获取
    U0BAUD=216; //波特率设置
    
    //波特率9600
    //U0GCR=8;
    //U0BAUD=59;
    
    URX0IE=1; //串口接收中断
    EA=1; //CPU中断
}

//串口接收中断函数 这里模拟了学舌的效果 
#pragma vector=URX0_VECTOR
__interrupt void URX0_ISR(void)
{
    char ch;
    URX0IF = 0; //串口0来数据时的标志位,硬件会置1,软件清0
    ch = U0DBUF; //取数据
    
    //如果要通过串口实现些什么可在这里写
    
    U0DBUF = ch; //送数据 虽然是同名的缓存器,但用途不同
    while(UTX0IF == 0); //数据发送完了
    UTX0IF = 0; //软件清0
}
收藏
点赞
2
个赞
共2条回复 最后由用户已被禁言回复于2022-04
#3goJhou回复于2018-10
#2 liguanghui2588回复
这个是TI的芯片,属于硬件了

是啊,Zigbee主流芯片,TI的CC2530

0
#2liguanghui2588回复于2018-10

这个是TI的芯片,属于硬件了

0
TOP
切换版块