主题 : FCLK HCLK PCLK 的设置问题! 复制链接 | 浏览器收藏 | 打印
come on
级别: 新手上路
UID: 34703
精华: 0
发帖: 41
金钱: 210 两
威望: 42 点
贡献值: 0 点
综合积分: 82 分
注册时间: 2010-12-20
最后登录: 2012-03-13
楼主  发表于: 2011-01-14 15:10

 FCLK HCLK PCLK 的设置问题!

在学习ARM裸机驱动的时候,发现一个问题,一直搞不懂。
就是在设置FCLK HCLK PCKL的时候,
已经是用了ChangeClockDivider(14,12)这个函数。
为什么还要使用cal_cpu_bus_clk();这个函数?

ChangeClockDivider(key, 12);    //the result of rCLKDIVN [0:1:0:1] 3-0 bit
上面的这个函数已经设置好了FCLK HCLK PCLK的比例了,为什么还要使用下面的函数?
下面的函数是干什么用的?我就不知道了!

static void cal_cpu_bus_clk(void)
{
    static U32 cpu_freq;
    static U32 UPLL;
    
    U32 val;
    U8 m, p, s;
    
    val = rMPLLCON;
    m = (val>>12)&0xff;
    p = (val>>4)&0x3f;
    s = val&3;

    //(m+8)*FIN*2 不要超出32位数!
    FCLK = ((m+8)*(FIN/100)*2)/((p+2)*(1<<s))*100;     //FCLK=400M  FIN=12000000
    
    val = rCLKDIVN;
    m = (val>>1)&3;
    p = val&1;    
    val = rCAMDIVN;
    s = val>>8;
    
    switch (m) {
    case 0:
        HCLK = FCLK;
        break;
    case 1:
        HCLK = FCLK>>1;
        break;
    case 2:
        if(s&2)
            HCLK = FCLK>>3;
        else
            HCLK = FCLK>>2;
        break;
    case 3:
        if(s&1)
            HCLK = FCLK/6;
        else
            HCLK = FCLK/3;
        break;
    }
    
    if(p)
        PCLK = HCLK>>1;
    else
        PCLK = HCLK;
    
    if(s&0x10)
        cpu_freq = HCLK;
    else
        cpu_freq = FCLK;
        
    val = rUPLLCON;
    m = (val>>12)&0xff;
    p = (val>>4)&0x3f;
    s = val&3;
    UPLL = ((m+8)*FIN)/((p+2)*(1<<s));
    UCLK = (rCLKDIVN&8)?(UPLL>>1):UPLL;
}
级别: 侠客
UID: 25875
精华: 0
发帖: 80
金钱: 402 两
威望: 80 点
贡献值: 0 点
综合积分: 160 分
注册时间: 2010-07-30
最后登录: 2020-07-04
1楼  发表于: 2011-02-19 23:12
       我也不懂,
级别: 新手上路
UID: 38216
精华: 0
发帖: 19
金钱: 95 两
威望: 19 点
贡献值: 0 点
综合积分: 38 分
注册时间: 2011-02-23
最后登录: 2011-03-31
2楼  发表于: 2011-02-23 09:55
请路过的高手帮忙解答一下!
做自己擅长的,做自己喜欢的
级别: 新手上路
UID: 40969
精华: 0
发帖: 14
金钱: 70 两
威望: 14 点
贡献值: 0 点
综合积分: 28 分
注册时间: 2011-03-24
最后登录: 2013-02-01
3楼  发表于: 2011-03-24 13:31
我认为是前面两个函数只是设置好了各个频率,而cal_cpu_bus_clk则是计算出了FCLK,HCLK,PCLK的值,以方便后面在设置其他外设时需要设置每个外设的频率而要用到这三个值。不知道解释的对不对,共同探讨
级别: 新手上路
UID: 24487
精华: 0
发帖: 10
金钱: 50 两
威望: 10 点
贡献值: 0 点
综合积分: 20 分
注册时间: 2010-07-08
最后登录: 2017-11-10
4楼  发表于: 2011-05-24 16:36
同意3楼
级别: 新手上路
UID: 64778
精华: 0
发帖: 6
金钱: 30 两
威望: 6 点
贡献值: 0 点
综合积分: 12 分
注册时间: 2012-03-09
最后登录: 2012-12-12
5楼  发表于: 2012-05-09 20:23
同求