1,ZigBee切换系统高频时钟步骤
一,让2个高频时钟源启振
二,等待目标时钟源震荡稳定
三,延时63us以上
四,设置输出分频(一般不分频)
五,选中目标高频时钟源作为系统主时钟
六,确认一下当前工作的系统时钟是不是所选的高频时钟
知道这些之后我们就来认识一下涉及到的寄存器
好了,有了以上寄存器我们就可以配置时钟了!下面就看看代码上的实现。
#include "ioCC2530.h"
#define uint8_t unsigned char
#define uint16_t unsigned int
#define LED P1_0
void delay_us(uint16_t us)
{
uint16_t i;
for(i = 0;i<us;i++);
}
void delay_ms(uint16_t ms)
{
uint16_t i,j;
for(i = 0;i<ms;i++)
{
for(j = 0;j<16;j++);
}
}
void Init_ClOCK(void)
{
SLEEPCMD &=~0x04; //1111 1011 开启2个高频时钟源
while((SLEEPSTA & 0x40) == 0); //0100 0000 等待32M稳定
delay_us(100); //最少延时63us
CLKCONCMD &=~0x07; //1111 1000 不分频输出
CLKCONCMD &=~0x40; //1011 1111 设置32M作为系统主时钟,第六位清零
while((CLKCONSTA & 0x40) == 0); //0100 0000 等待32M成为系统主时钟
}
void LED_Config(void)
{
P1SEL &=~ 0x01; //置0,表示普通IO口
P1DIR |= 0x01; //置1,表示输出
P1INP |= 0x01; //置1,表示浮空
}
void main(void)
{
Init_ClOCK();
LED_Config();
while(1)
{
LED = 1;
delay_us(1);
LED = 0;
delay_us(1);
}
}
2,串口的使用步骤
串口会用到的寄存器不太多,常用的下面列出来!
PERCFG 外设控制寄存器
U0CSR USART 0 控制和状态
U0GCR USART 0 通用控制
U0BAUD USART 0 波特率控制
还有一张配置波特率时需要用到的表
好了,寄存器看完了我们就来看看代码!
下面是串口0初始化函数
void USART0_Config(void)
{
PERCFG &=~0x01; //1111 1110 选中串口0 串口备用位置1
P0SEL |= 0x0C; //0000 1100 置1,0表示普通IO口,1表示片上外设
U0CSR |=0xC0; //USART 0 控制和状态寄存器 ,设置UART模式,并使能接收
U0GCR = 11; //USART 0 通用控制,设置波特率指数值
U0BAUD = 216; //USART 0 波特率控制,设置波特率小数部分的值,波特率,115200
EA = 1; //打开总中断
URX0IE = 1; //打开串口0接收中断
}
然后就是串口接收中断函数
#pragma vector=URX0_VECTOR
__interrupt void USART0_IRQ(void)
{
uint8_t Temp = 0;
Temp = U0DBUF;
U0DBUF = Temp;
while(UTX0IF == 0); //串口发送标志位,发送完置1
UTX0IF = 0; //发送完毕,清零
URX0IF = 0; //清除标志位
}
这个代码的现象就是发送什么,就会返回什么!
好了,以上就是时钟的切换和串口的配置,需要注意的是,串口必须要32M时钟下工作!而且官方给的配置波特率什么的都是在32M时钟的的基础上的!