當希望更改 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);
}