? ?
2024年11月29日 17:05?
內(nèi)部HSI:
AG32有內(nèi)置的HSI時(shí)鐘:8Mhz。但是這個(gè)時(shí)鐘偏差比較大,個(gè)別甚至接近10Mhz。這個(gè)時(shí)鐘對(duì)于有時(shí)序要求的接口,如UART,USB等是無(wú)法接受的。為了改善這個(gè)時(shí)鐘,AGM做了一個(gè)內(nèi)部時(shí)鐘校準(zhǔn),利用下載器的時(shí)鐘來(lái)校準(zhǔn),然后存在內(nèi)部flash中。校準(zhǔn)后的精度可以在1%以內(nèi)。
AGM的串口啟動(dòng),是沒(méi)有用到外部時(shí)鐘的,因?yàn)?a class="article-link" target="_blank" href="/baike/1611503.html">ROM代碼本身也不知道系統(tǒng)外部時(shí)鐘是多少。串口啟動(dòng)是通過(guò)接收PC發(fā)送的固定字節(jié)來(lái)校準(zhǔn)時(shí)鐘的,PC發(fā)送的0x7F。代碼通過(guò)起始位和最后1bit的低電平來(lái)校準(zhǔn)。因此,ROM代碼是不關(guān)心下載波特率的。
下載器是通過(guò)USB通訊的,也用了類似的校準(zhǔn)方法,通過(guò)usb 1mS中斷信號(hào)來(lái)實(shí)現(xiàn)的。因此,下載器上如果沒(méi)有外部晶體也沒(méi)關(guān)系。但是,下載器多了一個(gè)離線下載功能,這個(gè)需要用到外部時(shí)鐘。
VE 里定義如下:
由于沒(méi)有用到HSE那部分電路,因此ini里需要添加宏定義:BOARD_HSE_BYPASS=SYS_HSE_NONE
同時(shí)還有一點(diǎn)限制,邏輯部分要壓縮,這一點(diǎn)容易忽略。
platformio.ini 中配置board_logic.compress = true
外部無(wú)源時(shí)鐘HSE:
無(wú)源時(shí)鐘通過(guò)OSC_IN, OSC_OUT 接入,4~26MHz,一般推薦的是8Mhz。用戶根據(jù)自己需要的時(shí)鐘,適當(dāng)調(diào)整外部晶體的頻率。
VE 里如下定義即可:
其實(shí),ini里需要定義?BOARD_HSE_BYPASS=SYS_HSE_BYPASS_OFF,但是因?yàn)檫@個(gè)是默認(rèn)項(xiàng),可以不定義。
外部有源晶振HSE:
- 從OSC_IN 輸入
這個(gè)與無(wú)源晶體的區(qū)別就是不需要諧振電路了,因此增加SYS_HSE_BYPASS_ON的定義。即BYPASS掉諧振電路
VE配置同無(wú)源晶體一樣。
- 從其它引腳輸入
如果是純CPLD應(yīng)用,那就只能用有源晶振,從全局時(shí)鐘(帶GB標(biāo)志)處輸入。其它引腳一般不建議接入有源時(shí)鐘。
同樣,這個(gè)沒(méi)有HSE部分,需要定義SYS_HSE_NONE。INI里配置同HSI。
VE配置如下:
如果AG32是通過(guò)系統(tǒng)中的其它MCU來(lái)給其提供時(shí)鐘的話,參照有源時(shí)鐘的輸入方法定義。