C8051F340系統(tǒng)時(shí)鐘配置
//使能外部振蕩器后,至少要等待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)論