10403|32

73

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

wince起来后,如何重新配置FCLK、HCLK、PCLK [复制链接]

平台 2440 5.0BSP

以前我看到论坛的人说可以动态配置ARM的FCLK、HCLK,PCLK

我刚才使用应用程序来修改寄存器CLKDIVN,修改三者的比例关系,结果出现了郁闷的问题,现象描述如下:

我在启动的时候配置MPLLCON寄存器,使FCLK=405MHZ
根据数据手册,FCLK、HCLK,PCLK的比例关系可以通过CLKDIVN这样来配置
ldr r0,=CLKDIVN
    ldr r1,=0x7     
; 0x0 = 1:1:1  ,  0x1 = 1:1:2        , 0x2 = 1:2:2  ,  0x3 = 1:2:4,  0x4 = 1:4:4,  0x5 = 1:4:8, 0x6 = 1:3:3, 0x7 = 1:3:6
    str r1,[r0]

现在我把wince起来后使用应用程序重新配置的情况以及结果贴上:
CLKDIVN配置成0x0,0x1 液晶立即灭掉,本来可以响应的东西不再响应,2440死机
CLKDIVN配置成0x2,0x3 液晶分别为变模糊、变有竖条纹,同样,2440死机。
CLKDIVN配置成0x4,0x5,0x7 没有任何问题,2440正常运行。
CLKDIVN配置成0x6,屏幕没有熄灭,点击触摸屏有信息输出,但是点击一些按钮没有响应,2440处于半死机状态。

请问你们是如何重新配置FCLK、HCLK,PCLK的?从上面现象可以看出,调高HCLK,PCLK就会出问题,难道这样是不行的?
请大家指点。
此帖出自WindowsCE论坛

最新回复

mark  详情 回复 发表于 2010-1-27 12:30
点赞 关注
 

回复
举报

69

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
是不是没有禁用之前不能重新配置的?

那么是要实现休眠等才能配置了?

等待中。
此帖出自WindowsCE论坛
 
 
 

回复

228

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
看你发这个顺便问下,2440下SDRAM的CLK是那个时钟给提供的?
2443的规格书里说的很模糊。
此帖出自WindowsCE论坛
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

4
 
哦,有点很重要,我启动的时候配置CLKDIVN =0x7的

我觉得这个1:3:6太低了。我想调高,就出现了上面的情况。
此帖出自WindowsCE论坛
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

5
 
Restrictions about changing ARMDIV register.
1. Be careful that ARMCLK should be equal or faster than HCLK. (X times, X is integer)
2. Change PREDIV, HCLKDIV field after 12 HCLK periods as soon as nRESET is released.
Basically, Changing ARMDIV and HCLKDIV simultaneously is supported. When modifying ARMDIV, PREDIV and
HCLKDIV, User should pay attention to obey upper No 1 restriction.
此帖出自WindowsCE论坛
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

6
 
引用 4 楼 Panghuang 的回复:
Restrictions about changing ARMDIV register.
1. Be careful that ARMCLK should be equal or faster than HCLK. (X times, X is integer)
2. Change PREDIV, HCLKDIV field after 12 HCLK periods as soon as nRESET is released.
Basically, Changing ARMDIV and HCLKDIV simultaneously is supported. When modifying ARMDIV, PREDIV and
HCLKDIV, User should pay attention to obey upper No 1 restriction.


这个不是2440 上的吧?

但是我修改降低却行?怎么回事呢?
此帖出自WindowsCE论坛
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

7
 
//*************************[ MPLL ]*******************************
void ChangeMPllValue(int mdiv,int pdiv,int sdiv)
{
    rMPLLCON = (mdiv<<12) | (pdiv<<4) | sdiv;
}


//************************[ HCLK, PCLK ]***************************
void ChangeClockDivider(int hdivn_val,int pdivn_val)
{
        int hdivn=2, pdivn=0;
       
     // hdivn_val (FCLK:HCLK)ratio hdivn
     // 11           1:1       (0)
     // 12           1:2       (1)
     // 13           1:3       (3)
     // 14           1:4       (2)
     // pdivn_val (HCLK:PCLK)ratio pdivn
     // 11           1:1       (0)
     // 12           1:2       (1)
        switch(hdivn_val) {
                case 11: hdivn=0; break;
                case 12: hdivn=1; break;
                case 13:
                case 16: hdivn=3; break;
                case 14:
                case 18: hdivn=2; break;
        }
       
        switch(pdivn_val) {
                case 11: pdivn=0; break;
                case 12: pdivn=1; break;
        }
       
        //Uart_Printf("Clock division change [hdiv:%x, pdiv:%x]\n", hdivn, pdivn);
        rCLKDIVN = (hdivn<<1) | pdivn;

        switch(hdivn_val) {
                case 16:                // when 1, HCLK=FCLK/8.
                        rCAMDIVN = (rCAMDIVN & ~(3<<8)) | (1<<8);
                break;
                case 18:         // when 1, HCLK=FCLK/6.
                        rCAMDIVN = (rCAMDIVN & ~(3<<8)) | (1<<9);
                break;
        }
       
    if(hdivn!=0)
        MMU_SetAsyncBusMode();
    else
        MMU_SetFastBusMode();
}

void Main()
{
ChangeMPllValue(92,1,1);
ChangeClockDivider(14, 12);
}


此帖出自WindowsCE论坛
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

8
 
楼上你用过?

貌似没有什么特别的地方啊?我改咋就不行呢?
此帖出自WindowsCE论坛
 
 
 

回复

57

帖子

0

TA的资源

一粒金砂(初级)

9
 
引用 2 楼 friendfish 的回复:
看你发这个顺便问下,2440下SDRAM的CLK是那个时钟给提供的?
2443的规格书里说的很模糊。


我在2440的数据手册588page找到了HCLK (internal) to SCLK,这个SCLK就是内存的时钟。

难道我的错误就错在这里?

因为我的1:3:6刚好使SCLK等于100多M,后来我提高导致内存不能工作了?

friendfish 你也找找。看看是怎么回事。
此帖出自WindowsCE论坛
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

10
 
FCLK is used by ARM920T.
HCLK is used for AHB bus, which is used by the ARM920T, the memory controller, the interrupt controller, the LCD
controller, the DMA and USB host block.

从这里可以看出,内存时钟等于HCLK。哈哈

我犯了大错了。

现在我试试修改主频试试。
此帖出自WindowsCE论坛
 
 
 

回复

86

帖子

0

TA的资源

一粒金砂(初级)

11
 
郁闷,我修改UPLLCON和MPLLCON寄存器来降低FCLK都不行,修改后就死机了。

咋回事呢?大家帮帮忙啊。
此帖出自WindowsCE论坛
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

12
 
咋没有指点呢?我犯了错误也帮说出来啊。
此帖出自WindowsCE论坛
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

13
 
其实我想实现一些电源管理,降低功耗。
请问你们的电源管理都做了哪些事情呢?

今天继续尝试。
此帖出自WindowsCE论坛
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

14
 
帮顶
此帖出自WindowsCE论坛
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

15
 
帮顶
此帖出自WindowsCE论坛
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

16
 
引用 6 楼 xajhuang 的回复:
//*************************[ MPLL ]*******************************
void ChangeMPllValue(int mdiv,int pdiv,int sdiv)
{
    rMPLLCON = (mdiv < <12) | (pdiv < <4) | sdiv;
}


//************************[ HCLK, PCLK ]***************************
void ChangeClockDivider(int hdivn_val,int pdivn_val)
{
int hdivn=2, pdivn=0;

    // hdivn_val (FCLK:HCLK)ratio hdivn
    // 11        …



xajhuang 老兄,这个代码是在bootloader阶段的,怎么在系统起来后就会不能改变呢?尤其是提升HCLK和PCLK
还有降低FCLK也不行。郁闷了,等下再尝试。
此帖出自WindowsCE论坛
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

17
 
一样的效果,主要是你要把寄存器地址映射正确,实际上你要保证内存运行的频率正常,不能超过最大值。
此帖出自WindowsCE论坛
 
 
 

回复

91

帖子

0

TA的资源

一粒金砂(初级)

18
 
还有就是修改后,你可以根据寄存器来判断频率是否修改成功。不要看一般软件上的数据,那个数据是宏定义死了的。
还要考虑一个问题,FCLK改变后,系统时钟的节拍也就产生了相应改变,所以你也要考虑重新配置系统时钟节拍的定时器。
此帖出自WindowsCE论坛
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

19
 
我一直对动态配置表示怀疑,也没有见有可证明的成功者。
此帖出自WindowsCE论坛
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

20
 
引用 18 楼 yashi 的回复:
我一直对动态配置表示怀疑,也没有见有可证明的成功者。


我觉得是可以,但是要处理好电源管理先。这个之所以能在bootloader阶段获得成功,是因为裸奔对2440没有什么负担,即使配置成慢速模式,bootloader照样还是能很好运行,如果在wince起来后配置成慢速模式,那么这个TICK就无法令整个系统运行,所以要想实现动态配置,需要把wince系统这个沉重负担去掉。

  以前有人做了,我估计也是降低HCLK和PCLK而已,如果升了就要好好考虑wince负担了。
此帖出自WindowsCE论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表