cc2530有四個晶振,兩個內部(16m rc晶振,32k rc晶振),兩個外部(32.768k的石英晶振,32m的石英晶振),石英晶振的精度高,耗電大,啟動慢。rc晶振精度低一點,耗電小,啟動快。在上電時,預設是使用內部的兩個晶振,因為內部這兩個rc晶振速度快。外部的32.768石英晶振也可以不接。兩個低頻晶振不能同時上電,即不能同時起振。
cc2530資料手冊上sleepcmd這個暫存器的第2位(從第0位開始計)說明是錯誤,該位的正確說明,應當看cc2430的資料手冊sleep暫存器的第2位。當該位為0時,將兩個高頻晶振同時上電;該位為1時,將clkconcmd.osc位沒有選擇的高頻晶振關閉。同樣的,cc2530資料手冊sleepsta這個暫存器的第6位和第5位說明是錯誤,這兩位的正確說明,應當看cc2430的資料手冊sleep暫存器的第6位和5位。附圖如下:
cc2530的sleepcmd
cc2530的sleepsta
對應cc2430中只有sleep暫存器
if(source ==0)//選擇32m的石英晶振
clkconcmd = (usc32k_bm | 0x00);
else //選擇32m的rc晶振
clkconcmd = (usc32k_bm | 0x40 | (0x01<<3) | 0x01);
//等待設定穩定下來
uint16 cmd = clkconcmd;
while(1)
sleepcmd |= 0x04; //去掉沒有選擇的高頻晶振
}void delay(uint16 n)
led1 = 1;
delay(50000);
hal_set_mainclock(1);
for(int i=0;i<10;i++)}}
#include
#include #define led1 p1_0
#define uint16 unsigned int
void hal_init_mcu(void)
clkconcmd = 0x00;
sleepcmd |= 0x04;
}void hal_init_led(void)
void hal_set_mainclock(uint16 source)
if(source ==0)//選擇32m的石英晶振
clkconcmd = (usc32k_bm | 0x00);
else //選擇32m的rc晶振
clkconcmd = (usc32k_bm | 0x40 | (0x01<<3) | 0x01);
//等待設定穩定下來
uint16 cmd = clkconcmd;
while(1)
sleepcmd |= 0x04; //去掉沒有選擇的高頻晶振
}void delay(uint16 n)
led1 = 1;
delay(50000);
hal_set_mainclock(1);
for(int i=0;i<10;i++)}}
簡述CC2530晶振 振盪器與時鐘
cc2530一共有4個晶振 上電時預設使用 16m rc晶振 32k rc晶振 兩個低頻晶振不能同時上電,即不能同時起振。32.768k 石英晶振 可以不接 32m 石英晶振 耗電小 啟動快,但是精度略低 精度高 耗電大 啟動慢 cc2530有四個振盪器 32khz內部rc振盪器 低頻 16mhz內...
CC2530之時鐘源
系統時鐘 相關暫存器 32 mhz 晶振 16 mhzrc振盪器 注意 2mhz晶振啟動時間對一些應用程式來說可能比較長 16mhzrc振盪器功耗低於晶振,但是由於不像晶振那麼精確,不能用於rf收發器操作 32 khz 晶振 32 khzrc振盪器 注意 相對於32 khzxosc解決方案32 kh...
CC2530 系統時鐘初始化
系統時鐘 系統時鐘是從所選的主系統時鐘源獲得的,主系統時鐘源可以是32 mhz xosc或 16 mhz rcosc。clkconcmd.osc 位選擇主系統時鐘的源。注意要使用 rf 收發器,必須選擇高速且穩定的 32 mhz 晶振。注意改變 clkconcmd.osc 位不會立即改變系統時鐘。時...