本文檔介紹了AG32開發(fā)中,時(shí)鐘配置的具體方式以及例子。如需了解AG32更多資料可發(fā)郵件:sales@agm-micro.com
mcu和cpld聯(lián)合編程時(shí),整顆芯片需要一顆外部晶振。
(芯片有內(nèi)部振蕩器,但誤差較大,校準(zhǔn)后5%以內(nèi)誤差,參后續(xù)介紹)
該晶振是mcu和cpld共用的,(沒必要為cpld再單獨(dú)提供一顆晶振)。
晶振可以是有源的,也可以是無(wú)源的。
【注:這里的外部晶振配置,跟單純使用MCU是一樣的】
如果是無(wú)源晶體,頻率限制在4M~16M。要接到芯片的OSC_IN/OUT引腳。然后VE中直接定義主頻多少M(fèi)即可。如:
(這是目前開發(fā)板上使用的配置)
如果是有源晶體,頻率無(wú)限制。根據(jù)接入點(diǎn)分為兩種情況:
1)如果接入到OSC_IN引腳:
ve里定義同上(修改HSECLK項(xiàng)的值為有源晶振頻率)。
同時(shí),需要在platformio.ini里增加配置:
BOARD_HSE_BYPASS=SYS_HSE_BYPASS_ON,
2)如果接入到別的IO引腳(如PIN_2):
VE配置中,除了配置 HSECLK項(xiàng)外,還需要配置PLL_CLKIN項(xiàng),如圖:
同時(shí),需要在platformio.ini里增加配置:
BOARD_HSE_BYPASS=SYS_HSE_NONE
如果使用內(nèi)部振蕩器:
校準(zhǔn)后精度大約在5%以內(nèi),節(jié)省成本且對(duì)時(shí)鐘要求不高的話可以使用。
使用方式:
在VE里增加:"PLL_CLKIN
PIN_OSC",如下圖:
(注:不用配置HSECLK項(xiàng))
同時(shí)在platformio.ini里增加配置:
BOARD_HSE_BYPASS=SYS_HSE_NONE
注:自動(dòng)校準(zhǔn)目前有以下使用限制:
a)邏輯部分要壓縮,platformio.ini中配置 board_logic.compress = true
b)校準(zhǔn)動(dòng)作是在燒錄時(shí)進(jìn)行的。
燒錄時(shí),需要使用swd方式且通過我們的軟件燒錄,uart不支持。
(即:出廠燒錄不支持uart方式)
目前測(cè)試過jlink和dap校準(zhǔn)結(jié)果都還不錯(cuò),但是也出現(xiàn)過一個(gè)客戶使用其他燒錄器校準(zhǔn)結(jié)果差很多。
(對(duì)一個(gè)全新的或是wipe過后的芯片燒錄會(huì)看到校準(zhǔn)信息)
2、PLL倍頻及分頻:
整顆芯片只有一個(gè)PLL倍頻模塊(mcu和cpld共用)。
倍頻分頻操作是封裝在系統(tǒng)內(nèi)部的(用戶無(wú)須也不能控制這個(gè)時(shí)鐘樹)。
實(shí)現(xiàn)原理:
A. 系統(tǒng)會(huì)根據(jù)所有用到的頻率項(xiàng)(mcu和cpld要用到的全部頻率),計(jì)算出他們的最小公倍數(shù)。該數(shù)值就是要倍頻到的目標(biāo)值;
B. 以外部時(shí)鐘作為輸入,PLL倍頻到這個(gè)目標(biāo)值,然后再以這個(gè)目標(biāo)值為基準(zhǔn),分頻給mcu各外設(shè)和cpld來(lái)使用。
C. 倍頻和分頻,無(wú)須開發(fā)者關(guān)注。
開發(fā)者只要設(shè)置好自己需要的各個(gè)時(shí)鐘頻率即可。
開發(fā)者可設(shè)置的頻率分為mcu部分和cpld部分。
mcu部分,只需要關(guān)注系統(tǒng)主頻。
主頻是在VE里通過SYSCLK項(xiàng)配置,該主頻是mcu的工作頻率。
外設(shè)頻率則基于這個(gè)主頻再分頻(參考各個(gè)外設(shè)的驅(qū)動(dòng)部分)。
cpld部分,cpld最多可以輸入5路不同頻率的時(shí)鐘。
默認(rèn)情況下,cpld工程接口中輸入到cpld的sys_clock,就是跟mcu同頻的SYSCLK?系統(tǒng)時(shí)鐘(由VE決定多少M(fèi))。
Bus_clock則是在SYSCLK基礎(chǔ)上進(jìn)行分頻的另一路時(shí)鐘(其實(shí)就是后續(xù)的PLLCLK3)。
Bus_clock在VE中頻率定義(必須是SYSCLK的整數(shù)倍分頻):
如果 ve 里沒有定義 BUSCLK,則 bus_clock 和 sys_clock 同頻。
bus_clock 是為了防止 cpld部分速度跟不上sysclk而設(shè)定的。
cpld中除了這兩路(其實(shí)就是0路和第3路),還有3路可以使用。
3、CPLD可用的時(shí)鐘(除去SYSCLK的另外4路):
CPLD的時(shí)鐘除了以上輸入的sys_clock,還有4路可以獨(dú)立使用。
參考《AGRV2K_邏輯設(shè)置.pdf》,如下圖:
這里的PLLCLK1、PLLCLK2、PLLCLK3、PLLCLK4就是可使用的獨(dú)立時(shí)鐘。
注意:當(dāng)mcu中使用USB時(shí),PLLCLK1自動(dòng)給了USB,不能再使用;當(dāng)mcu中使用了MAC時(shí),PLLCLK2自動(dòng)給了MAC,不能再使用。另外,上述的BUSCLK對(duì)應(yīng)的是這里的PLLCLK3。如果用了BUSCLK的名字,這里的PLLCLK3就不能再用。
這里整理下5路時(shí)鐘:
PLLCLK0:就是 SYSCLK (名字使用SYSCLK)
PLLCLK1:開USB時(shí),這路時(shí)鐘給USB用(60M),不開USB時(shí)給用戶用;
PLLCLK2:開MAC時(shí),這路時(shí)鐘給MAC用(25/50M),不開MAC時(shí)給用戶用;
PLLCLK3:用BUSCLK時(shí)(只能是sysclk整數(shù)分頻)不能用PLLCLK3,否則可用;
PLLCLK4:獨(dú)立給用戶使用;
以PLLCLK3和PLLCLK4為例,說明怎么使用該時(shí)鐘。
在VE里配置如下:
PLLCLK3 40 # 40MHz
PLLCLK4 60 # 60MHz
PLL_CLKOUT3 pll_clk3
PLL_CLKOUT4 pll_clk4
則可定義pllclk3為40M輸入,pllclk4為60M輸入。
在生成的cpld入口處,分別對(duì)應(yīng)信號(hào)pll_clk3和pll_clk4,如圖:
輸入的時(shí)鐘,可以跟sys_clock一樣使用。
4、幾個(gè)時(shí)鐘的設(shè)置限制及計(jì)算方式:
上邊提到的倍頻后PLL目標(biāo)值,其數(shù)值關(guān)系需要滿足:
A. PLL=HSE*X/Y,X,Y皆為整數(shù)
B. PLL小于1200MHZ。
C. 所有的設(shè)置頻率必須能被這個(gè)最終PLL整除。
舉例:mcu主頻100M,系統(tǒng)用了MAC(50M),系統(tǒng)用了USB(60M),cpld自定義了PLLCLK3為80M,cpld自定義了PLLCLK4為60M。則,PLL目標(biāo)值就是10050608060的最小公倍數(shù),為1200M。
如果使用到一些特殊頻率,則可以調(diào)整其他頻率往這個(gè)特殊頻率的倍數(shù)上來(lái)湊。
(如果配置后不滿足這里的條件,編譯時(shí)會(huì)報(bào)錯(cuò))
5、cpld可運(yùn)行的最高頻率:
mcu的運(yùn)行最高頻率是248M。而cpld中沒有標(biāo)準(zhǔn)的最高頻率。
最大能跑多少M(fèi),取決于cpld里的設(shè)計(jì)。
如果是邏輯電路,則不存在時(shí)鐘的概念。
如果是時(shí)序電路,則看設(shè)計(jì)中門電路的復(fù)雜程度。如果跑100M的時(shí)鐘,每個(gè)上升沿之間就是10納秒,在設(shè)計(jì)時(shí),要保證10納秒內(nèi)對(duì)應(yīng)的動(dòng)作能全部執(zhí)行完。
如果是簡(jiǎn)單電路,一般是可以跑到200M以上。