关闭

系统时钟:MPLLCON设置

113人阅读 评论(0) 收藏 举报

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"

     );

}

 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:8683次
    • 积分:270
    • 等级:
    • 排名:千里之外
    • 原创:18篇
    • 转载:7篇
    • 译文:0篇
    • 评论:0条
    文章存档