新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > C8051F340系統(tǒng)時(shí)鐘配置

C8051F340系統(tǒng)時(shí)鐘配置

作者: 時(shí)間:2016-11-28 來源:網(wǎng)絡(luò) 收藏
//C8051F340包含一個(gè)可編程內(nèi)部高頻振蕩器,該振蕩器在系統(tǒng)內(nèi)復(fù)位后默認(rèn)為系統(tǒng)時(shí)鐘。該高頻振蕩器為12MHz。

//使能外部振蕩器后,至少要等待1ms,再來判斷外部晶體振蕩器是否穩(wěn)定工作。
//使能時(shí)鐘乘法器后需要等待5us,再來初始化時(shí)鐘乘法器,之后來判斷時(shí)鐘乘法器是否穩(wěn)定工作。

使用外部晶振的時(shí),【P0MDIN &= 0x3F;】語(yǔ)句一定要在ClockInit()函數(shù)調(diào)用之前執(zhí)行。
原因:C8051F340的IO口默認(rèn)都是數(shù)字輸出。
【P0MDIN &= 0x3F;】語(yǔ)句含義:P0.6(XTAL1),P0.7(XTAL2)配置為模擬輸入。

//函數(shù)名: ClockInit()
//描述 : 系統(tǒng)時(shí)鐘和USB時(shí)鐘初始化
//時(shí)鐘來源為外部振蕩器——12MHz晶振
void ClockInit(void)
{
unsigned int Temp; //臨時(shí)變量
OSCXCN = 0x67; //外部振蕩器為晶體振蕩器方式,外部晶體振蕩器頻率在[10MHz,30MHz]
for (Temp=0;Temp<3000;Temp++); //等待1ms
while ((OSCXCN&0x80) == 0); //判斷晶體振蕩器工作是否穩(wěn)定
FLSCL = 0x90; //flash相關(guān)頻率配置
CLKMUL |= 0x81; //時(shí)鐘乘法器使能,時(shí)鐘乘法器的時(shí)鐘來源為外部振蕩器,即12MHz晶振
for(Temp=0;Temp<200;Temp++); //等待5us初始化
CLKMUL |= 0xC0; //初始化時(shí)鐘乘法器
while ((CLKMUL & 0x20) == 0); //判斷時(shí)鐘乘法器是否穩(wěn)定

CLKSEL = 0x03; //USB時(shí)鐘來源為時(shí)鐘乘法器,系統(tǒng)時(shí)鐘來源為時(shí)鐘乘法器,即都為48MHz

本文引用地址:http://m.butianyuan.cn/article/201611/322675.htmOSCICN = 0x00; //禁止內(nèi)部高頻振蕩器 ,此語(yǔ)句在系統(tǒng)時(shí)鐘完全配置好了后執(zhí)行
}


//函數(shù)名: ClockInit()
//描述 : 系統(tǒng)時(shí)鐘和USB時(shí)鐘初始化
//時(shí)鐘來源為內(nèi)部振蕩器——12MHz晶振
void ClockInit( void )
{
unsigned int Temp;
OSCICN |= 0x80; //使能內(nèi)部高頻振蕩器
CLKMUL = 0x00; //復(fù)位時(shí)鐘乘法器,時(shí)鐘乘法器時(shí)鐘來源為內(nèi)部高頻振蕩器
CLKMUL |= (1<<7); //使能時(shí)鐘乘法器
for(Temp=0;Temp<200;Temp++); //延時(shí)5us
CLKMUL |= (1<<6)|(1<<7); //初始化時(shí)鐘乘法器
for(Temp=0;Temp<2000;Temp++);
while(!(CLKMUL&(1<<5))); //等待時(shí)鐘乘法器準(zhǔn)備好
CLKSEL = 0x03; //USB時(shí)鐘來源為時(shí)鐘乘法器,系統(tǒng)時(shí)鐘來源為時(shí)鐘乘法器,即都為48MHz
}


評(píng)論


技術(shù)專區(qū)

關(guān)閉