ZigBee切换系统高频时钟+串口的使用

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时钟的的基础上的!

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章