您的位置:首页 > 其它

系统时钟:MPLLCON设置

2016-06-02 01:16 253 查看
JZ2440开发板(ARM920T):
在做系统时钟实验时,发现在设置LOCKTIME、CLKDIVN、异步总线模式转换和MPLLCON之间要有足够的间隔时间,否则系统时钟不能正常倍频和分频。

void clock_init(void)
{
     LOCKTIME = 0x02000200;    
CLKDIVN = 0x03; 
/*快速总线模式转到异步总线模式*/
__asm__(
        "mrc p15, 0, r1, c1, c0, 0\n"
        "orr r1, r1, #0xc0000000\n"
        "mcr p15, 0, r1, c1, c0, 0\n"
);
    MPLLCON = (0x5c << 12) | (0x01 << 4) | (0x02 << 0);
}

我尝试了2种解决办法:

1、中间加一句循环语句:“for (i = 0; i < 100; i++);” 
void clock_init(void)
{
     int i;
     LOCKTIME = 0x02000200;    

CLKDIVN = 0x03; 
/*快速总线模式转到异步总线模式*/
     __asm__(
        "mrc p15, 0, r1, c1, c0, 0\n"
        "orr r1, r1, #0xc0000000\n"
        "mcr p15, 0, r1, c1, c0, 0\n"
     );
     for (i = 0; i < 100; i++);
     MPLLCON = (0x5c << 12) | (0x01 << 4) | (0x02 << 0);
}

2、修改嵌入式汇编和MPLLCON设置的顺序
void clock_init(void)
{
     LOCKTIME = 0x02000200;    
CLKDIVN = 0x03;
MPLLCON = (0x5c << 12) | (0x01 << 4) | (0x02 << 0);
 
/*快速总线模式转到异步总线模式*/
     __asm__(
         "mrc p15, 0, r1, c1, c0, 0\n"
         "orr r1, r1, #0xc0000000\n"
         "mcr p15, 0, r1, c1, c0, 0\n"
     );
}
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: