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