S3C2440的频率设置通过设置三个寄存器就可以完成,LOCKTIME取默认值0x00ffffff,CLKDIVN配置FCLK:HCLK:PCLK三者的比例,详细参考数据手册,对于MPLLCON寄存器,[19:12]为MDIV,[9:4]为PDIV,[1:0]为SDIV。有如下计算公式:MPLL(FCLK) = (m * Fin)/(p * 2^s)
注意:手册中提到当HDIVN = 1时,CPU bus mode需要从原来的“fast bus mode”改为“asynchronous bus mode”,所以用到__asm{}这个汇编块,因为在mmu_init()中已经对其进行过初始化,在使用时调用过mmu_init()后无需加这个模块了。如果没有调用mmu_init(),就必须加这个操作了。
把改函数添加到timer0 interrupt中就可以实验beep每隔一秒响一次。
void clock_init()
{
rLOCKTIME = 0x00ffffff;
rCLKDIVN = 0x03;
//以下在mmu_init()函数中已经对其初设置这里无需设置
rMPLLCON = 0x5c0040;
}