主题 : tiny6410时钟初始化的一点疑问,求高人指点 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 47527
精华: 0
发帖: 14
金钱: 70 两
威望: 14 点
贡献值: 0 点
综合积分: 28 分
注册时间: 2011-05-23
最后登录: 2014-11-03
楼主  发表于: 2014-04-23 20:47

 tiny6410时钟初始化的一点疑问,求高人指点

void clock_init(void)
{
APLL_LOCK = 0x0000ffff;
MPLL_LOCK = 0x0000ffff;
EPLL_LOCK = 0x0000ffff;

APLL_CON &= ~((0x7<<0)|(0x3f<<8)|(0x3ff<<16)); // 配置APLL输出频率为533
APLL_CON |= (1<<0)|(3<<8)|(266<<16)|(1<<31);

MPLL_CON &= ~((0x7<<0)|(0x3f<<8)|(0x3ff<<16)); // 配置MPLL输出频率为533
MPLL_CON |= (1<<0)|(3<<8)|(266<<16)|(1<<31);

OTHERS &= ~(0x1<<6); // PCLK HCLK时钟源选择MPLL
OTHERS &= ~(0x1<<7); // 使用MPLL作为pclk hclk时钟源(为异步模式)

//CLK_DIV0 &= ~((0xf<<0)|(0x1<<4)|(0x1<<8)|(0x7<<9)|(0xf<<12)); // 配置HCLK和PCLK时钟
//CLK_DIV0 |= (0<<0)|(0<<4)|(1<<8)|(1<<9)|(3<<12);
CLK_DIV0 = (0<<0)|(0<<4)|(1<<8)|(1<<9)|(3<<12)|(3<<18)|(3<<20)|(3<<24);

CLK_SRC |= (1<<0)|(1<<1); // 选择APLL和MPLL输出
}

上面的代码是可以正常跑的,但是将红色的部分替换成注释掉的两行就不能正常运行,始终想不明白,求高人指点(注释部分代码保留不关注的位,只配置必须的位)。
级别: 新手上路
UID: 80799
精华: 0
发帖: 5
金钱: 25 两
威望: 5 点
贡献值: 0 点
综合积分: 10 分
注册时间: 2012-10-30
最后登录: 2014-09-30
1楼  发表于: 2014-05-26 17:08
不明白CLK_DIV0的设置不行的原因,
但楼主对于OTHERS异步模式的设置与官方6410裸机开发教程不同,
官方如下:
    /* 2. 设置为异步模式(Asynchronous mode) */
    OTHERS &= ~0xc0;                            //《linux installation for u-boot》3.7中:用MPLL作为HCLK和PCLK的Source是异步(ASYNC)模式,用APLL是同步(SYNC)模式
    while ((OTHERS & 0xf00) != 0);