2440test的时钟调整
key = 14;
mpll_val = (92<12)|(1<4)|(1);
ChangeMPllValue((mpll_val>>12)&0xff, (mpll_val>>4)&0x3f, mpll_val&3);
ChangeClockDivider(key, 12);
cal_cpu_bus_clk();
void ChangeMPllValue(int mdiv,int pdiv,int sdiv)
{
rMPLLCON = (mdiv<12) | (pdiv<4) | sdiv;
}
void ChangeClockDivider(int hdivn_val,int pdivn_val)
{
int hdivn=2, pdivn=0;
// hdivn_val (FCLK:HCLK)ratio hdivn
// 11
// 12
// 13
// 14
// pdivn_val (HCLK:PCLK)ratio pdivn
// 11
// 12
switch(hdivn_val) {
case 11: hdivn=0; break;
case 12: hdivn=1; break;
case 13:
case 16: hdivn=3; break;
case 14:
case 18: hdivn=2; break;
}
switch(pdivn_val) {
case 11: pdivn=0; break;
case 12: pdivn=1; break;
}
//Uart_Printf("Clock division change [hdiv:%x, pdiv:%x]\n", hdivn, pdivn);
rCLKdivN = (hdivn<1) | pdivn;
switch(hdivn_val) {
case 16: // when 1, HCLK=FCLK/8.
rCAMdivN = (rCAMdivN & ~(3<8)) | (1<8);
break;
case 18: // when 1, HCLK=FCLK/6.
rCAMdivN = (rCAMdivN & ~(3<8)) | (1<9);
break;
}
if(hdivn!=0)
MMU_SetAsyncBusMode();
else
MMU_SetFastBusMode();
}
参考数据手册:FIN=12000000 Mdiv=92 Pdiv=1 Sdiv = 1 m=100,p=3,s=1, HSIVN=2 PdivN =1 ,
根据MPLL的计算公式 2×100×1200000/(3×2)=400MHZ
HCLK=FCLK/4=100M
2440时钟调 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)
