对于2440的时钟频率的配置过程,我们做了个小实验,不同频率下观察相同延时的LED亮灭快慢,显然,你会发现工作频率高的LED的闪烁速度明显快的多。
#include "2440addr.h"
void delay(void)
{
int i,j;
for(i=0;i<0x1000;i++)
for(j=0;j<0x200;j++);
}
void led_test(int count)
{
rGPBCON &=~(0xff<<10);
rGPBCON |=(0x55<<10);
rGPBUP |=(0xf<<5);
rGPBDAT |=(0xf<<5);
while(count)
{
rGPBDAT &=~(0xf<<5);
delay();
rGPBDAT |=(0xf<<5);
delay();
count--;
}
}
void Mpll_init(int flag)
{
if(flag==48)
{
//LOCKTIME
rLOCKTIME = 0xffffffff;
//MPLLCON[19:12]=56;[9:4]=2;[1:0]=2
rMPLLCON= (56<<12)|(2<<4)|(2<<0);
//CLKDIVN[2:1]=3;[0]=1 => 1:3:6
//CAMDIVN[8]=0
rCLKDIVN = (1<<0)|(0x11<<1);
rCAMDIVN &=~(1<<8);
}
else if(flag==405)
{
//LOCKTIME
rLOCKTIME = 0xffffffff;
//MPLLCON[19:12]=127;[9:4]=2;[1:0]=1
rMPLLCON = (127<<12)|(2<<4)|(1<<0);
rCLKDIVN = (1<<0)|(0x11<<1);
rCAMDIVN &=~(1<<8);
//CLKDIVN[2:1]=3;[0]=1 => 1:3:6
//CAMDIVN[8]=0
}
}
void xmain(void)
{
while(1)
{
// Mpll_init(48);
// led_test(5); //在这里通过选择48M和405M的不同工作频率可以观察LED的变化情况
Mpll_init(405);
led_test(5);
}
}
其配置过程可以分为3个步骤:
1、LOCKTIME寄存器的配置 :用于设置“LOCK TIME”的长度,2440的默认值:0Xfffffffff;此可以缺省
2、MULLCON寄存器:用于设置FCLK与Fin的倍数。
对于2440,MPLL(FCLK) = (2 * m *Fin)/(p *2^s)
其中m = MDIV + 8,p = PDIV + 2, s = SDIV.
FCLK = (2 * ( MDIV + 8) *Fin)/(PDIV + 2 *2^SDIV)
3、CLKDIVN寄存器:用于设置FCLK,HCLK ,PCLK三者的关系。
2440 还需要设置CAMDIVN的位9,位8
阅读(284) | 评论(0) | 转发(0) |