簡介
AT32系列MCU內部都有提供適合運行的內部高速時鐘(HICK),其本質就是內置于芯片的RC振蕩器。在25℃下,其典型值頻率8MHz的精度由工廠校準到±1%,在-40到105℃,該內部高速時鐘的精度達到±2.5%,可見精度會受到溫度的影響。為了降低環境溫度對精度造成的影響,用戶可在運行時間隙調用校準程序來進行校準。
校準及原理
校準
每顆AT32 MCU芯片的內部高速時鐘在出廠時都有被進行校準,待芯片復位后該校準值會自動加載到CRM_CTRL寄存器的HICKCAL[7:0]位,與CRM_CTRL寄存器的HICKTRIM[4:0]位一起作用于HICK的校準,HICKTRIM[4:0]的復位值為0x20(不同系列該復位值可能不同),在外部電壓和溫度變化對內部高速時鐘頻率產生影響時,可通過軟件對HICKTRIM[4:0]這些位進行編程,對HICK進行微調,以達到滿足要求的頻率。
原理
校準的原理就是對當前的HICK頻率進行較為準確的測量,參考實際的測量值與典型值的比較結果,判斷是否達到校準的目的。此處用到的HICK測量方法不是采用外部設備來進行的,而是使用片上定時器來對外部精準的時鐘源周期進行計數,因定時器的計數時鐘源于HICK,這樣就可以通過精確的外部時鐘源周期來推算出當前HICK的頻率值。在本應用示例及文檔中,精準時鐘源采用的是LEXT(通常RTC使用的32kHz晶振),圖示顯示了如何使用定時器計數個數來測量參考信號周期。圖1. 參考信號測量如上所示,為提高計數測量的準確性,實際應用中可連續對多個LEXT周期進行計數,再用求平均值的方式來減小誤差。頻率計算公式:Frequencytimer=(count1+count2+…+countN)/N*Frequencylext因HICK直接或間接的提供給系統時鐘,再通過timer頻率和主頻的關系,推算出此時HICK的頻率,當前HICK的頻率值減去HICK典型值就是此時HICK的誤差頻率:Error(Hz)=Frequencyhick–8000000
硬件實現
由校準原理可知,要想計算出HICK的頻率就必須得有一個準確的校準源,該文檔示例推薦的是采用LEXT,并且該校準源需要連接到定時器的輸入捕獲通道。AT32MCU可通過CLKOUT功能將LEXT校準源輸出,再通過內部配置功能或外圍連線將CLKOUT與定時器的輸入通道連接圖2. 硬件連接
校準方法
前文提到設置CRM_CTRL寄存器的HICKTRIM位可調整HICK輸出,校準流程首先按HICKTRIM的默認值為基點配置,準確的測量出此時HICK實際的頻率值,然后按實際頻率與典型值計算得到頻率誤差,判斷該誤差是否在可接受誤差值范圍內,如果是,則返回成功,如果不是,則輪詢下一個HICKTRIM設置點,再進行測量判斷,直到輪詢完畢返回失敗。
使用說明
函數說明
與本文檔對應的示例代碼中包含了三個主要的函數a)?clkout輸出配置主要進行校準源LEXT時鐘的開啟,并將它配置由clkout來進行輸出。由于示例的MCU型號支持clkout與timer10 channel1進行內部連接設置,如果該函數內并未進行clkout對應GPIO Pin腳的初始化,并且采用外部連接,請加入GPIO Pin腳初始化即可。b) timer輸入配置主要進行timer10的基礎時鐘配置、輸入捕獲配置及中斷配置,默認采用校準源時鐘的上升沿捕獲。由于示例的MCU型號支持clkout與timer10 channel1進行內部連接設置,如果該函數內并未進行timer10 channel1對應GPIO Pin腳的初始化,并且采用外部連接,請加入GPIO Pin腳初始化即可。c) HICK校準接口該函數為程序運行時的校準函數接口,可在一定時間周期或條件下調用該函數進行HICK的校準,校準到滿足誤差范圍的頻率時,該函數返回成功,反之返回失敗。需注意:在校準過程中HICK會有一個調整的過程,故此過程中的的主頻或外設頻率可能非預期值,所以通訊類接口或時序強相關的外設需暫停使用,待校準完成后再開啟使用。
宏定義說明
示例代碼中有兩個配置宏定義可以由用戶按實際使用情況來進行修改。ERROR_VALUE_MAX定義了可接受的最大誤差范圍(單位Hz),如上值(10000)即表示校準成功后的頻率精度為±10kHz,用戶可自行修改。需注意:由于HICK的校準特性關系,精度要求越高(即ERROR_VALUE_MAX值越小)時校準失敗的概率越大。CAPUTURE_NUM定義了LEXT校準源的捕獲次數,再用累計求平均的方式減小誤差。需注意:由于捕獲計數時間點比較隨機的關系,第一個計數值不準確,故讀取的timer計數值需丟棄第一個計數,所以該宏定義值需大于1。
校準流程
可在系統運行時狀態下調用校準函數接口hick_trimming進行校準。為防止非預期情況的發生,在調用校準前請確保各外設處于空閑未使用的狀態。首先會將校準前CRM_CTRL寄存器中的HICKTRIM值進行保留,初始校準值從TRIM_VALUE_MAX/2開始,對寫入校準值后的HICK頻率進行測量,量得誤差精度是否滿足ERROR_VALUE_MAX設定要求,如果是返回校準成功,如果未滿足則繼續輪詢下一HICKTRIM值,直到輪詢完所有,回寫校準前的HICKTRIM值并返回校準失敗。校準流程圖如下:圖3. 流程圖初始校準值選擇從HICK_VALUE_MAX/2開始的原因是HICKTRIM的復位值大致就與HICK_VALUE_MAX/2相當,這樣更接近頻率漂移的中心點,由中間往外輪詢的查找方式,通常情況下采用這種方式進行輪詢時可以更快的找出符合要求的校準值,減少了校準時間。
校準演示說明
示例代碼是基于AT-START進行編寫,為了更好的查看到校準效果,可采用示波器量測CLKOUT(PA8)的輸出頻率,頻率值為HICK48(是8MHz典型值的6倍時鐘),代碼中有故意將HICK48調偏,當按下user button后開始校準,校準完畢串口1會輸出校準結果(成功或失敗),并可通過CLKOUT量測到校準后的HICK48頻率值,示例演示的代碼如下
注意事項
在使用該校準方法時需注意以下幾點。1. 系統時鐘應直接或間接的由HICK提供。2. timer計數時鐘頻率越高測量到的HICK頻率越精確。3. 示例demo所采用的方式是系統時鐘與timer計數時鐘同頻,如果因應用場景需求有修改后不同頻時,需注意調整頻率對應關系部分的代碼。4. 在校準過程中可能導致主頻或外設頻率的變化,需注意此時如有外設還在運行時可能會出錯。5. 如所使用的系列型號不支持clkout與timer的輸入通道內部連接時,需在配置函數中增加相應的GPIO Pin腳初始化。6. 捕獲次數宏定義CAPUTURE_NUM需大于等于2。7. 最大誤差宏定義ERROR_VALUE_MAX越大越容易校準成功,越小越可能校準失敗。
-
mcu
+關注
關注
146文章
17981瀏覽量
366761 -
振蕩器
+關注
關注
28文章
4008瀏覽量
140841 -
AT32
+關注
關注
1文章
121瀏覽量
2705
發布評論請先 登錄
AT32 MCU QSPI應用說明
AT32 MCU SDIO入門指南
雅特力AT32 IDE界面與特色介紹
雅特力攜高性能AT32 MCU精彩亮相D Forum 2021 微控制器論壇

雅特力AT32 MCU與SEGGER攜手合作,開發量產事半功倍
雅特力AT32 MCU的隨機數生成

AT32講堂088 | 雅特力AT32F402/F405時鐘配置

評論