123 MPC5634M系統時鐘配置學習

2021-09-24 04:06:04 字數 1497 閱讀 8508

其實這部分功能我大致是會的,之前工作中在類似晶元上也實現過。今天想整理一下主要是因為我覺得我想整理一下學習的思路,可以作為其他人的乙個參考。

我覺得學習與開發在實際的操作上應該是有較大區別的。開發的目的很純粹,就是讓功能可用。但是,學習的目的與之不同,應該是以點窺面,能夠從系統觀、大局觀上掌握相應物件的全部功能並且探索使用場景。

如果是進行系統時鐘,或者說是整個fmpll的功能配置,或許開發中只是能夠實現其執行即可,但是學習我得找到一種方**。

以下是mcu手冊中的乙個機理圖:

我們需要的是最後的輸出,而向前找,其實是vco的輸出。而這個是有乙個範圍要求的,因此我們需要在這個約束條件下進行我們相應功能的探索。

而這個設計又有乙個關鍵的點,其實在於暫存器的取值約束。

綜合上面的兩個條件約束,結合手冊中給出的公式,其實這個配置就非常容易了。

既然,增強模式是手冊中推薦的,自然應該採用增強模式。而這個模式下,其實還有乙個調製的功能可以用。針對系統時鐘而言,最簡單的實現還是上述兩個約束條件加上三組公式中的後兩組。

核心設計**如下:

uint8_t fmpll_init(uint8_t ref_clock, uint8_t system_clk)}}

} }ret = fmpll_set_failed;

set_system_clk:

fmpll.esyncr1.b.clkcfg = 0b001;

fmpll.esyncr1.b.emode = 0b1;

fmpll.esyncr1.b.eprediv = eprediv;

fmpll.esyncr1.b.emfd = emfd;

fmpll.esyncr2.b.erfd = erfd;

siu.sysdiv.b.bypass = 1;

fmpll.esyncr1.b.clkcfg = 7;

while(fmpll.synsr.b.lock == 0)

/* clear loss of lock flag */

fmpll.synsr.b.lolf = 1;

/* normal mode with crystal reference */

fmpll.esyncr1.b.clkcfg = 0b111;

return ret;

}

可以通過pit的中斷看一下準確度。為了測試,我加了乙個led閃爍,簡單秒錶統計了一下。

40m:pass

50m:pass

60m:pass

70m:pass

80m:pass

有意思的是,手冊中描述了這個晶元的最高時鐘是80m,但是實際的使用中我使用了120m居然依然可以正常工作,而且計時準確。

開源工程 mpc

mpc peter lee 2008 06 05 一 簡介 遺憾的是mpc工程在2006年04月停止了更新,同時所幸的是有兩個開源工程在mpc的基礎上繼續更新,乙個是mpc2,主要是clsid2在維護,主要是修正mpc原工程中的一些bug,不新增新功能 另乙個mpc home cinema比較強了,...

控制理論 MPC(二)

假設我們車輛的制動延遲是 100ms100ms 本文中模型採用10步 每步間隔為 50ms50ms 即模型 的前兩步實際上是制動延遲的時間內,即實際上這兩步中車輛仍然在執行上乙個狀態的制動指令,那麼為了讓模型更加貼近實際,我們就約束這2步的制動指令,即 a,deltaf a,deltaf 為上一狀態...

MPC初學2(數學建模)

模型 控制系統是基於數學建模,這種模型被稱為狀態 空間模型。通過狀態 空間模型,能用當前的狀態變數和操縱變數 偏差值 來表示未來狀態量。接下裡我們舉乙個單輸入 單輸出的例子,它可以被如下描述 xm k 1 amxm k bmu k y k cmxm k 其中u k 是操縱變數,作為輸入 xm k 是...