CIU32M010、CIU32M030華大電子MCU通用輸入輸出、同步串行接口
參考價(jià): | 面議 |
- 產(chǎn)品型號(hào)
- 品牌
- 代理商 廠商性質(zhì)
- 沈陽市 所在地
訪問次數(shù):377更新時(shí)間:2021-11-04 14:55:04
華大單片機(jī)HC32F4xx系類(HC32F460 HC32F4A0)可以運(yùn)行200Mhz,但內(nèi)部Flash在 CPU運(yùn)行頻率達(dá)到33M后,就需要加入不同的等待周期。
所以實(shí)際程序在內(nèi)部FLash內(nèi)運(yùn)行時(shí),是跟不上CPU速度,也就不能達(dá)到高運(yùn)行速度200Mhz。
如下圖:可以看到在200Mhz時(shí),讀Flash中的指令需要等待5個(gè)CPU時(shí)鐘周期,那大概200M運(yùn)行時(shí)實(shí)際CPU能夠跑到不到40Mhz。
那怎么能夠使程序運(yùn)行的快,跑出實(shí)際CPU的頻率呢?
兩種方法:
1.理所應(yīng)當(dāng)想到的一種方法就是把關(guān)鍵程序或需要運(yùn)行速度的代碼搬到SRAM內(nèi)運(yùn)行。
這個(gè)方法不在本貼討論范圍內(nèi),不過原理和細(xì)節(jié)都不太復(fù)雜。
這里提醒以下兩點(diǎn),具體做法也不難,不管是誰家的MCU這種SRAM內(nèi)運(yùn)行的方法都是一樣的。
1)只需要注意中斷向量表要重映射到SRAM中,如果想把中斷搬運(yùn)到SRAM中運(yùn)行的話。
2)還有一點(diǎn)是,搬運(yùn)到SRAM內(nèi)運(yùn)行的代碼如果有調(diào)用Flash內(nèi)代碼的,也是會(huì)影響速度。需要再把調(diào)用鏈上所有代碼一同搬運(yùn)到SRAM內(nèi)。
2.就是在華大HC32Fxx系列MCU內(nèi),有一個(gè)1K大小的FLash Cache,可以使運(yùn)行FLash內(nèi)的代碼加速,或讀取Flash內(nèi)數(shù)據(jù)加速。
使運(yùn)行在Flash內(nèi)的代碼執(zhí)行速度和CPU速度同頻。當(dāng)然,既然是讀的cache,那么如果CPU沒有命中cache中的內(nèi)容,還是會(huì)從Flash中取數(shù)據(jù)和指令的。
所以在整個(gè)程序運(yùn)行期間 cache起到了加速作用,而不能認(rèn)為每個(gè)運(yùn)行時(shí)段程序運(yùn)行的速度都會(huì)和CPU一致。
如果HCLK是200Mhz,那么使能cache后,可以加速程序運(yùn)行速度到200Mhz。
(千萬別認(rèn)為程序每時(shí)每刻都運(yùn)行在200M,所以也不要用忙等待的方式做延時(shí)函數(shù),建議使用systick做忙等待延時(shí)函數(shù))
我做了一個(gè)試驗(yàn),測試一段代碼運(yùn)行時(shí)在不開啟cache和開啟cache的運(yùn)行表現(xiàn):
測試的這段代碼:
運(yùn)行結(jié)果:
無cache時(shí)flash_run_performance_test函數(shù)使用了728023個(gè)10ns(10納秒),
有cache時(shí)flash_run_performance_test函數(shù)使用了259880個(gè)10ns。
大家可以計(jì)算出測試函數(shù)花的時(shí)間,有cache時(shí)和無cache時(shí)速度的對(duì)比,是多少倍。
總結(jié)下:就是華大HC32F4XX系列ARM cortex-M4的這顆MCU速度還是不錯(cuò)的。