飞思卡尔k60从零开始之PLL
在大學,參加過飛思卡爾比賽。當時校內賽都沒有過,當時沒有老師教,沒有教學視頻看,不知道怎么查找資料。僅僅學過一點51,就上手飛思卡爾的MK60DN512ZVLQ這款芯片,難度可想而知。現在畢業了,工作中也在用K60,STM32等芯片。K60和stm32總體差不多,會一個另一個也會很快上手。所以,今天就把我的經驗和大家分享下,讓新手好盡快上手這款芯片。本人是笨鳥中的菜鳥,如果有哪里講的不對的地方,希望大家指出。
K60的時鐘相比51復雜很多很多,但是我們一般常用的時鐘就是經過鎖相環(PLL)計算出來的時鐘,因為他用的是外部晶振,比芯片內部的晶振要準確,長時間不會產生飄逸等等優點。建議新手對照手冊,看一篇配置步驟即可,沒有必要弄的很通透,知道分頻是多少,倍頻是多少,最后設置出來的內核時鐘是多少即可。因為往后的其他所有的外圍模塊都會涉及到時鐘,會讓你一點點明白它的。
閑話少說,先上代碼:
? ? MCG->C1 = MCG_C1_CLKS(2) ;//選擇外部時鐘
? ??MCG->C5 = MCG_C5_PRDIV(pll_prdiv);//分頻后結果控制在2M`4M之間 ? ? ??? ? ? ???
? ? ///設置系統分頻器
? ? //MCG=PLL, core = MCG, bus = MCG/2, FlexBus = MCG/3, Flash clock= MCG/8
? ? SIM->CLKDIV1 = SIM_CLKDIV1_OUTDIV1(0) | SIM_CLKDIV1_OUTDIV2(1)?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| SIM_CLKDIV1_OUTDIV3(2) | SIM_CLKDIV1_OUTDIV4(7); ? ? ??
? ? MCG->C6 = MCG_C6_PLLS_MASK | MCG_C6_VDIV(pll_vdiv); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? while (!(MCG->S & MCG_S_PLLST_MASK)){}; // wait for PLL status bit to set ? ?
? ? while (!(MCG->S & MCG_S_LOCK_MASK)){}; // Wait for LOCK bit to set ? ??
? ? MCG->C1=MCG_C1_CLKS(0) ;//選擇PLL時鐘輸出
? ? //等待時鐘狀態位更新
? ? while (((MCG->S & MCG_S_CLKST_MASK) >> MCG_S_CLKST_SHIFT) != 0x3){};
? ?// 內核時鐘(系統時鐘)=外部時鐘(50M晶振頻率)/ (pll_prdiv+1)*(pll_vdiv+24);
? ? core_clk=50000000/(pll_prdiv+1)*(pll_vdiv+24);
? ? bus_clk =core_clk/2;
? 以上兩個紅色的就是分頻和倍頻。手冊上寫分頻后的頻率要在2~4M之間。經我實際測試,可以有出入。
最后兩句是我計算出來的內核時鐘和總線時鐘,和單片機寄存器配置無關,可以刪掉,是為了給大家看看具體計算的過程用的。
為什么計算prdiv和vdiv都要加1和24,理由如下:
prdiv這個寄存器內,寫入1,實際計算的是2,寫2,實際計算的是3.
vdiv寫0,實際用于計算的是24,寫1,計算用的是25.依此類推。
以我用的是50M的外部晶振,要配置內核時鐘為100M為例:
就是? ? ? ? ? ? pll_prdiv ? ? ? = 24;//官方推薦頻率100M
? ? ? ? ? ? pll_vdiv ? ? ? ?= 26;
內核時鐘=50M/(24+1)*(26+24)=100M;
K60官方推薦的頻率是100M,很多同學喜歡超頻,喜歡更高的頻率,實際意義不大。首先超頻會簡短芯片壽命,其次,超頻到到臨界點時,頻率是很快,但是會不穩定,比如震動,靜電,會很容易讓MCU復位或者程序跑飛。
本人實測:100腳的K60,大概能超頻到180M。144引腳,DN系列K60能超頻到200左右,FN系列能超頻到220左右。
本人不是大神,可定有哪里講的不好的,不對的地方,希望大家指出,指教。可以加 飛思卡爾智能車恩智浦 254833542這個群,大家一起討論下。
總結
以上是生活随笔為你收集整理的飞思卡尔k60从零开始之PLL的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 图解TCPIP(第5版)
- 下一篇: 【送书】2021年哪些好书值得读(小姐姐