预备知识
-
CC2530在正常运行的时候需要一个高频时钟信号和一个低频的时钟信号
高频时钟信号,主要供给CPU,保证程序的运行。
低频时钟信号,主要供给看门狗、睡眠定时器等偏上外设。
-
CC2530时钟信号的来源:
-
高频信号有2个,芯片内部的16M RC电路;外接的32M石英晶振
-
低频信号也有2个来源,芯片内部的32K RC电路,外接的32.768K石英晶振。
-
-
CC2530芯片默认上电的时候,是内部的2个RC电路作为高频和低频的时钟来源。
- 如果使用串口,特别是无线通信的时候,必须要用32M的石英晶振作为高频时钟来源。
-
高频时钟源特点:
-
2高频时钟源可以同时起振产生高频时钟信号;
-
2个低频时钟源,某一时刻只能有1个起振,并且起振的这个时钟源供给CC2530.
-
系统时钟转换
系统高频时钟源切换的步骤:
让2个高频时钟源起振(SLEEPCMD)
等待目标时钟源振荡稳定(SLEEPSTA )
延时一小段时间63us
不分频输出(CLKCONCMD )
选中目标高频时钟源作为系统主时钟(CLKCONCMD )
确认一下当前工作的系统时钟是不是所选的高频时钟(CLKCONSTA)
配置实现
1、让SLEEPCMD的第2位为0;
2、SLEEPSTA寄存器的第6位为1表示32M 时钟源稳定
3、超过63微秒延时
4、把寄存器CLKCONCMD的低3位 设置为000,表示不分频输出
5、把寄存器CLKCONCMD的第6位 清0,设置32M作为系统主时钟
6、如果读CLKCONSTA这个寄存器的第6位为0,表示32M的时钟源已经作为了当前的系统主时钟,程序可以往下运行了。
void Init32M()
{
SLEEPCMD &= 0xFB;//1111 1011 开启2个高频时钟源
while(0==(SLEEPSTA & 0x40));// 0100 0000 等待32M稳定
delayus();
CLKCONCMD &= 0xF8;//1111 1000 不分频输出
CLKCONCMD &= 0XBF;//1011 1111 设置32M作为系统主时钟
while(CLKCONSTA & 0x40); //0100 0000 等待32M成功成为当前系统主时钟
}
相关寄存器
SLEEPCMD寄存器
SLEEPSTA寄存器
CLKCONCMD寄存器
系统时钟的源既可以用 16 MHzRC 振荡器,也可以采用 32 MHz晶振。时钟的控制使用CLKCONCMD寄存器执行
PCON.IDLE在默认状态下处于供电模式
如果当进入供电模式(设置 PCON.IDLE)且 CLKCONCMD.OSC = 0 时,自动变为 32 MHz。
如果当进入供电模式设置了 PCON.IDLE 且 CLKCONCMD.OSC = 1,它继续运行在 16 MHz。
CLKCONSTA寄存器
CLKCONSTA 寄存器是一个只读的寄存器,用于获得当前时钟状态
串口通信
配置实现
初始化配置:
指定串口的IO位置;
相应IO配置成偏上外设功能:
8个数据位、1个停止位、无流控、无校验确立。
波特率:
开CPU中断、对应串口接收中断:
中断配置:
- 清除接收中断标志位
- 接收数据
- 等待发送完成
- 清除发送完成标志位
void USART_Init(){
//串口0的备用位置1配置成波特率9600
PERCFG &= 0xFE; //1111 1110 选中串口0的的备用位置1
P0SEL |= 0x0C; //0000 1100 P0_2 p0_3为片上外设功能
U0CSR |= 0Xc0;
U0GCR = 8;
U0BAUD= 59;
EA = 1;
URX0IE = 1;
}
#pragma vector=URX0_VECTOR
__interrupt void USART0_INT(void)
{
URX0IF=0;//串口0来数据的标志位,硬件会置1,我们软件要清0
ch=U0DBUF;//从接受寄存器里取字节存入变量ch
U0DBUF=ch;//把变量ch里的值赋给串口0发送数据寄存器
while(0==UTX0IF);//等待发送完成
UTX0IF=0;//发送完成标志位,硬件置1,软件清0
}
相关寄存器
引脚映射
PERCFG寄存器
U0CSR寄存器
U0CSR是USART0控制和状态寄存器,其各个位的作用如下:
(1)Bit[7]表示USART模式,值为0表示SPI模式,值为1表示UART模式。
(2)Bit[6]表示是否启用UART接收器,值为0表示禁用接收器,值为1表示启动接收器。
(3)Bit[5]表示SPI 主机或者从机模式,值为0表示SPI主模式,值为1表示SPI从模式。
(4)Bit[4]表示UART 帧的停止位错误状态,值为0表示无错误,值为1表示有错误。
(5)Bit[3]表示UART奇偶错误状态,值为0无错误,值为1表示有错误。
(6)Bit[2]表示传送字节状态,值为0表示没有收到字节,值为1表示准备好接收字节。
(7)Bit[1]表示传送字节状态,值为0表示字节没有被传送,值为1表示写到数据缓存寄存器的最后字节被传送。
(8)Bit[0],USART传送/接收主动状态、在 SPI 从模式下该位等于从模式选择,0:USART 空闲 ,1:USART 忙碌。
波特率配置
IEN0中断使能寄存器
其他中断相关寄存器
URX0IF是串口0 RX中断标志寄存器,1用于USART0接收中断标志位。
UTX0IF是USART0的TX中断标志标志寄存器,值为0表示无中断未决,值为1表示中断未决。
U0DBUF是USART0的缓存寄存器,用于接收或发送数据时的缓存。