首頁>Club>
2
回覆列表
  • 1 # 蠻夷豈敢犯邊

    INIT pll函式的用法主要是用來進行鎖迴圈。_什麼是鎖相環呢? MCU的支撐電路一般需要外部時鐘來給MCU提供時鐘訊號,而外部時鐘的頻率可能偏低,為了使系統更加快速穩定執行,需要提升系統所需要的時鐘頻率,這就得用到鎖相環了。例如MCU用的外部晶振是16M的無源晶振,則可以透過鎖相環PLL把系統時鐘提高,這樣程式執行的速度就提高了。

      主要配置的就是REFDV (範圍是0到63,CRG參考分頻暫存器)和 SYNR(範圍是0到15,CRG合成器暫存器)。計算公式是PLLCLK=2*OSCCLK(SYNR+1)/(REFDV+1),其中OSCCLK為系統時鐘,而PLLCLK為鎖相環後的時鐘。想要得到PLLCLK的時鐘可以對SYNR和REFDV進行一些配置。

      在程式中鎖相環的具體配置如下(摘抄):

    第一、禁止總中斷;第二、暫存器CLKSEL的第七位置0,即CLKSEL_PLLSEL=0。選擇時鐘源為外部晶振OSCCLK,在PLL程式執行前,內部匯流排頻率為OSCCLK/2。CLKSEL_PLLSEL=0時,系統時鐘由外部晶振直接提供,系統內部匯流排頻率=OSCCLK/2(OSCCLK為外部晶振頻率)。CLKSEL_PLLSEL=1時,系統時鐘由鎖相環提供,此時系統內部匯流排頻率=PLLCLK/2 (PLLCLK為鎖相環倍頻後的頻率)。

    第三、禁止鎖相環PLL,即PLLCTL_PLLON=0。 當PLLCTL_PLLON=0時,關閉PLL電路。當PLLCTL_PLLON=1時,開啟PLL電路。第四、根據想要的時鐘頻率設定SYNR和REFDV兩個暫存器。 SYNR和REFDV兩個暫存器專用於鎖相環時鐘PLLCLK的頻率計算,計算公式是: PLLCLK=2*OSCCLK*(SYNR+1)/(REFDV+1) 其中,PLLCLK為PLL模組輸出的時鐘頻率;OSCCLK為晶振頻率;SYNR、REFDV分別為暫存器SYNR、REFDV中的值。這兩個暫存器只有PLLSEL=0時才能夠寫入(這裡就是第二步的設定原因所在了)。第五、開啟PLL,即PLLCTL_PLLON=1。第六、CRGFLG_LOCK位,確定PLL是否穩定。 當鎖相環PLL電路輸出的頻率達到目標頻率的足夠小的誤差範圍內時,LOCK位置1,此時說明PLLCLK已經穩定,可以作為系統的時鐘了。該位在正常情況下為只讀位。

    第七、PLLCLK穩定後,允許鎖相環時鐘源PLLCLK為系統提供時鐘,即CLKSEL_PLLSEL=1。到這裡,鎖相環的設定就完畢了。

    如果想更靈活地配置系統時鐘,就還得用到下面的暫存器了,下面逐一說說:

    1、CRGFLG_LOCKIF 鎖相環的中斷標誌位。當系統時鐘因為穩定或不穩定而導致LOCK位(上面已提到)變化時,該位置1。此時,如果CRGINT_LOCKIE=1,則產生中斷。CRGINT_LOCKIE=1時,則允許產生鎖相環鎖定中斷。CRGINT_LOCKIE=0時,則不允許。 2、CLKSEL_PLLWAI是等待模式PLL停止位。當CLKSEL_PLLWAI=1時,系統進入等待模式時,鎖相環PLL停止工作。當CLKSEL_PLLWAI=0時,系統進入等待模式時,鎖相環PLL仍然工作。

    下面順便說一下與自時鐘模式相關的幾個暫存器: CRGFLG_SCMIF 自時鐘模式中斷標誌位。當SCM位變化時,該位置1。此時,如果CRGINT_SCMIE=1,則產生中斷。 CRGFLG_SCM 自時鐘模式狀態位。當晶振頻率不穩定時,該位置1,系統會進入自時鐘模式,系統的時鐘將由自時鐘模式下的時鐘提供。 CRGINT_SCMIE 自時鐘模式中斷的使能位。當CRGINT_SCMIE=1時,允許產生自時鐘模式中斷。當CRGINT_SCMIE=0時,不能產生自時鐘模式中斷。 PLLCTL_SCME 自時鐘模式使能位。在自時鐘模式下,該位不能被清0。PLLCTL_SCME=1時,晶振時鐘失靈系統將強制進入自時鐘模式。當PLLCTL_SCME=0時,晶振失靈將導致時鐘監控器復位。

    最後來舉例子說明各個外部晶振時的初始化函式,程式碼如下:

    INIT_PLL_16M

    INIT_PLL_24M

    INIT_PLL_32M

    Init_PLL_48M

    Init_PLL_64M

    Init_PLL_72M

  • 中秋節和大豐收的關聯?
  • 纏論應用在期貨市場中要注意什麼?