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