• 沒有找到結果。

更改 CPU/MIU 時鐘以及 PLLV 時鐘

在文檔中 嵌入式微處理器 (頁 113-116)

當希望更改 MIU 的時鐘時,程式不能在 DRAM 中運行,因為 SPCE3200 將透過 MIU 模組來 存取 DRAM 中的內容,一旦開始更改 MIU 的時鐘,那麼 MIU 中 DRAM 的參數設置將發生錯 誤,此時 MIU 將不能正確存取 DRAM 的內容,從而導致程式運行出錯。

用戶必須使用 SPCE3200 內部 ROM 中提供的程式來更改 CPU/MIU 的時鐘,程式入口位址 為 0x9F000024。

注意:

更改 CPU 時鐘的程式將對 PLLV 和 PLLA 進行操作,所以,在執行更改 CPU 時鐘的程式之前,必 須檢查晶片內使用 PLLV 和 PLLA 的模組沒有處於工作狀態。在更改完畢 CPU 時鐘後,PLLA 將處 於打開狀態,如果不需要使用它,用戶可以將其關閉。

CPU 的時鐘必須是 MIU 時鐘的 1~4 倍。

SPCE3200 內部 ROM 提供的更改 CPU 時鐘的程式需要用戶傳遞四個參數以便指定更改後的 時鐘頻率。第一個參數含有七個子項,含義如表 3-13所示。

表 3-13 更改時鐘頻率程式的第一個參數

子項名稱 有效位 影響暫存器 功能描述

b31~b12 無 保留

PLLA_Enable b11 P_CLK_PLLAU_CONF

PLLA 使能位:

0:使能 1:禁止

PLLV_Freq_Chg b10 P_CLK_PLLV_SEL

PLLV 是否改變:

0:不改變 1:改變

AHBSLV_Sel b9~b8 P_CLK_AHB_SEL

MIU 時鐘選擇位:

00:CPU 工作頻率

嵌入式微處理器 SPCE3200 原理及應用

© Sunplus Technology Co., Ltd. PAGE 113 V1.1 - Agu 29, 2007

子項名稱 有效位 影響暫存器 功能描述

01:CPU 工作頻率 2 分頻 10:CPU 工作頻率 3 分頻 11:CPU 工作頻率 4 分頻

PLL_DIV_Setting b7~b4 P_CLK_CPU_SEL

CPU 時鐘選擇位:

0000:PLLV 時鐘頻率輸出 0001:PLLV 時鐘頻率輸出 2 分頻 0010:PLLV 時鐘頻率輸出 3 分頻 0011:PLLV 時鐘頻率輸出 4 分頻 0100:PLLV 時鐘頻率輸出 6 分頻 0101:PLLV 時鐘頻率輸出 8 分頻 0110:PLLA 時鐘頻率輸出 0111:PLLA 時鐘頻率輸出 2 分頻 1000:PLLA 時鐘頻率輸出 3 分頻 1001:PLLA 時鐘頻率輸出 4 分頻 1010:PLLA 時鐘頻率輸出 6 分頻 1011:PLLA 時鐘頻率輸出 8 分頻

PLLV_Freq_Setting b3~b0 P_CLK_PLLV_SEL

PLLV 輸出頻率選擇位:

0000:保留 0001:保留 0010:保留 0011:81MHz 0100:87.75MHz 0101:97.5MHz 0110:101.25MHz 0111:108MHz 1000:114.75MHz 1001:121.5MHz 1010:128.25MHz 1011:135MHz

嵌入式微處理器 SPCE3200 原理及應用

© Sunplus Technology Co., Ltd. PAGE 114 V1.1 - Agu 29, 2007

子項名稱 有效位 影響暫存器 功能描述

1100:141.75MHz 1101:148.5MHz 1110:155.25MHz 1111:162MHz

第二個參數用來設置 SDRAM 的參數,含義如表 3-14所示。

表 3-14 更改時鐘頻率程式的第二個參數

子項名稱 有效位 影響暫存器 功能描述

b31~b17 無 保留

MIU_Run108_Sel b16 P_MIU_SDRAM_SETUP1

MIU 時鐘是否運行在 108MHz:

0:不運行 1:運行

MIU_Timing_Setting b15~b0 P_MIU_SDRAM_SETUP1

MIU 時鐘頻率選擇位:

0x48C0:27MHz 0x4920:40MHz 0x4983:54MHz 0x4A03:67.5MHz 0x4A03:81MHz 0x4B04:108MHz

第三個和第四個參數用來指定 SPCE3200 改變時鐘頻率後等待 PLLV 變為穩定的時鐘週期。

用戶可以編寫下面所示的 C 代碼和組合代碼以便調用該程式來改變時鐘頻率。

C 代碼:

extern void jumpto_extrom_change_cpuclk(unsigned int r4, unsigned int r5, unsigned int r6, unsigned int r7);

void PLL_change_func(

int PLLV_Freq_Setting, int PLL_DIV_Setting, int AHBSLV_SEL, int PLLV_Freq_Chg, int PLLA_Enable,

int MIU_Timing_Setting,

嵌入式微處理器 SPCE3200 原理及應用

© Sunplus Technology Co., Ltd. PAGE 115 V1.1 - Agu 29, 2007

int MIU_Run108_Sel ){

unsigned int r4, r5, r6, r7;

r4 = PLLV_Freq_Setting + (PLLV_DIV_Setting << 4) + (AHBSLV_SEL << 8) + (PLLV_Freq_Chg << 10) + (PLLA_Enable << 11);

r5 = (MIU_Run108_Sel << 16) + MIU_Timging_Setting;

r6 = 0xff;

r7 = 0xff;

jumpto_extrom_change_cpuclk(r4, r5, r6, r7);

}

在文檔中 嵌入式微處理器 (頁 113-116)