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時鐘的的基礎上的!

 

 

 

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