新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > C8051F340系統時鐘配置

        C8051F340系統時鐘配置

        作者: 時間:2016-11-28 來源:網絡 收藏
        //C8051F340包含一個可編程內部高頻振蕩器,該振蕩器在系統內復位后默認為系統時鐘。該高頻振蕩器為12MHz。

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

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

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

        CLKSEL = 0x03; //USB時鐘來源為時鐘乘法器,系統時鐘來源為時鐘乘法器,即都為48MHz

        本文引用地址:http://www.104case.com/article/201611/322675.htmOSCICN = 0x00; //禁止內部高頻振蕩器 ,此語句在系統時鐘完全配置好了后執行
        }


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


        評論


        技術專區

        關閉
        主站蜘蛛池模板: 会昌县| 文化| 顺昌县| 岢岚县| 邵阳县| 叙永县| 淳安县| 清苑县| 永福县| 运城市| 海口市| 四平市| 郯城县| 旬邑县| 巴林右旗| 金溪县| 正定县| 凤城市| 大渡口区| 手游| 宁安市| 黑山县| 宜春市| 吉水县| 桂阳县| 渝中区| 石嘴山市| 岢岚县| 子洲县| 随州市| 驻马店市| 米易县| 扶沟县| 新沂市| 宣汉县| 吉水县| 拜城县| 宿迁市| 建水县| 开原市| 蒙阴县|