16350|72

69

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

请问WINCE下如何运行时修改CPU的主频? [复制链接]

因为基于Wince平台的嵌入式设备在大多时候都没有以高主频运行。但是,希望在需要时动态地改变CPU的主频来提高它的运算能力。请问Wince下有这个接口吗?
谢谢!
此帖出自WindowsCE论坛

最新回复

诚聘winCE软件工程师 我司是专业上网本、UMPC、MID方案设计公司,因项目需要现诚聘winCE精英。 职务要求: 大专以上学历; 1年以上winCE软件开发经验; 熟悉winCE6.0系统定制开发者优先; 熟悉三星6410方案者优先; 待遇面谈,看工作经验5K-10K; 联系人:李生 电话:0755-26972802 QQ:68848678 工作地址:深圳南山科技园   详情 回复 发表于 2009-8-8 15:55
点赞 关注
 

回复
举报

70

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
哈哈,问题越来越神奇了。
-------------------------------
这个运行的频率是刚开始初始化的时候已经设定好了。你现在突然要改动他,我估计不行。在bootloader阶段还是可以的。
还有,这个主频一旦改变,你的很多东西都改变了。比如波特率,你改了之后,会涉及好多,USB相关的时钟等。

貌似PC机都不能在运行的时候改变的。不知道有什么高人真这么做过。
此帖出自WindowsCE论坛
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
这个问题很强, 到底行不行呢?
此帖出自WindowsCE论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

4
 
可以的,跟系统相关的接口是OEMIdle
可以参考Intel平台的IPM,三星平台的DVS,这都实现了动态调频以达到省电的目的
不过这一般都需要PMIC的支持,即可以调节CPU Core的电压,不然可能意义不是很大
此帖出自WindowsCE论坛
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

5
 
这个要看硬件的支持,比如动态电压和自适应电压,单独调整频率是不行的,我以前试过修改分频系数,结果bootloader后就跑飞了
此帖出自WindowsCE论坛
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

6
 
绝对可以!我刚刚做好这样的事情。

重要的是看你使用的什么芯片,如果是三星的,我告诉你怎么做,别家的我就不懂了,但我想原理总是一样的。

在三星的平台上,有个OEMIDLE()函数,实现了降频和恢复回去的方法,你既可以在这里实现降频升频,也可以在OEMinit初始化的时候设置系统频率,当然了,因为主频跟外设是密切相关的,所以你得考虑好和外设的分频比、锁频时间等等,建议这部分用汇编写。当然了,每个CPU有它的推荐频率的,不可能升太高,而且,升频要电压一并升上去。

所以,我的结论是:坚决可以,但实现起来要注意一些细节。
此帖出自WindowsCE论坛
 
 
 

回复

93

帖子

0

TA的资源

一粒金砂(初级)

7
 
如果可以,真是不错啊。

在空闲的时候降低频率,功耗会大大降低。真是不错的方法。学习,学习。
此帖出自WindowsCE论坛
 
 
 

回复

89

帖子

0

TA的资源

一粒金砂(初级)

8
 
靠,都赶上我pc的cpu了,超频+智能节能
此帖出自WindowsCE论坛
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

9
 
引用 6 楼 gooogleman 的回复:
如果可以,真是不错啊。

在空闲的时候降低频率,功耗会大大降低。真是不错的方法。学习,学习。


实际上,降频降低功耗相对来说是不多的,只有当CPU处于idle状态的时候,降电流才厉害,基本上可以降几十mA。
此帖出自WindowsCE论坛
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

10
 
Seven_zhangxw
OEMIdle看了一下,主要是修改PWM寄存器降频和恢复频率,如果升高频率,怎么处理外设的分频和锁频呢?比如UARTs的时钟
此帖出自WindowsCE论坛
 
 
 

回复

58

帖子

0

TA的资源

一粒金砂(初级)

11
 
没试过,关注!
此帖出自WindowsCE论坛
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

12
 
引用 10 楼 fan227 的回复:
没试过,关注!


关注一下
此帖出自WindowsCE论坛
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

13
 
一般情况下不调Memory和Bus的频率的,这会影响到外设的
只调Core的频率,最主要省电的是通过调低CPU的Core电压来实现的
此帖出自WindowsCE论坛
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

14
 
引用 9 楼 navi_dx 的回复:
Seven_zhangxw
OEMIdle看了一下,主要是修改PWM寄存器降频和恢复频率,如果升高频率,怎么处理外设的分频和锁频呢?比如UARTs的时钟

一般来说,系统一起来的时候默认就是最大频率了,这样,你就不能再升频率了。现在考虑的是如果现在是工作在低频率下,你还可以往上升,我贴一段代码你看看:
;------------------------------------------------------------------------------
; Clock Division Change funtion for DVS on S3C2440A.
;------------------------------------------------------------------------------
;UPLLVAL                EQU         (((56 << 12) + (2 << 4) + 2))        ; 48MHz,Fin=12Mhz
;==========================================================
;void DVS400MHz(void)
;==========================================================
        LEAF_ENTRY        DVS400MHz                ;400Mhz, 1:3:6
        ldr     r0, = CLKDIVN
        ldr     r1, = 0x7                                ;1:3:6
        str     r1, [r0]

        ldr                r0, = LOCKTIME                ; To reduce PLL lock time, adjust the LOCKTIME register.
        ldr                r1, = 0x00ffffff
        str                r1, [r0]
       
;        ldr     r0, = UPLLCON                ; Fin=12MHz, Fout=48MHz
;        ldr     r1, = UPLLVAL
;        str     r1, [r0]

        nop ; Caution: After UPLL setting, at least 7-clocks delay must be inserted for setting hardware be completed.
        nop
        nop
        nop
        nop
        nop
        nop

        ldr        r0, = MPLLCON                ; Configure MPLL        ; Fin=12MHz, Fout=50MHz
        ldr   r1, = 0x5c011                                ;PLLVAL        ;(((92 << 12) + (1 << 4) + 1)) ;Fin=12Mhz
        str                r1, [r0]

        ; delay
        mov     r0, #0x200
51   subs    r0, r0, #1
        bne     %B51

            ldr                r0, = LOCKTIME                ; To reduce PLL lock time, adjust the LOCKTIME register.
        ldr                r1, = 0x2                                ; 1us for only change SDIV value
        str                r1, [r0]
        mov                pc, lr
       
;==========================================================
;void DVS266MHz(void)
;==========================================================
        LEAF_ENTRY        DVS266MHz                ;266Mhz, 1:2:4
        ldr     r0, = CLKDIVN
        ldr     r1, = 0x03                                ;1:2:4
        str     r1, [r0]

        ldr                r0, = LOCKTIME                ; To reduce PLL lock time, adjust the LOCKTIME register.
        ldr                r1, = 0x00ffffff
        str                r1, [r0]
       
;        ldr     r0, = UPLLCON                ; Fin=12MHz, Fout=48MHz
;        ldr     r1, = UPLLVAL
;        str     r1, [r0]

        nop ; Caution: After UPLL setting, at least 7-clocks delay must be inserted for setting hardware be completed.
        nop
        nop
        nop
        nop
        nop
        nop

        ldr        r0, = MPLLCON                ; Configure MPLL        ; Fin=12MHz, Fout=50MHz
        ldr   r1, = 0x76061                                ;PLLVAL        ;(((118 << 12) + (6 << 4) + 1))
        str                r1, [r0]

        ; delay
        mov     r0, #0x200
52   subs    r0, r0, #1
        bne     %B52

            ldr                r0, = LOCKTIME                ; To reduce PLL lock time, adjust the LOCKTIME register.
        ldr                r1, = 0x2                                ; 1us for only change SDIV value
        str                r1, [r0]
        mov                pc, lr
       
此帖出自WindowsCE论坛
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

15
 
上面用C来写比较明了点

还有,这个波特率也要根据相关参数改动一下。不然打印信息不正常了。
CPU供电电压在哪里改动的呢?

好的,这个方法有空试试。也许电池使用时间会高一点。
此帖出自WindowsCE论坛
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

16
 
wince下肯定是没有这个接口的!

都知道可以通过修改MPLL来调整CPU的主频,不过在wince系统运行中做这样的工作,会不会带来一些影响呢?一般都是在系统初始化的时候设置好,后面不会再变。动态的,理论上可以做,但是会出现什么情况,需要有人去试试。
此帖出自WindowsCE论坛
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

17
 
CPU供电电压不能自己调节,当时钟变慢或者关掉PLL的话,内核的功耗会降低,这个时候CPU供电电压是不是降低了就不知道了
讨论LZ的问题,只有当当前没有活动线程和中断时,系统才会降低主频,当你要运算时肯定有个线程要激活,这时候系统就会回到正常主频了
此帖出自WindowsCE论坛
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

18
 
做个记号,问题相当大敢
此帖出自WindowsCE论坛
 
 
 

回复

53

帖子

0

TA的资源

一粒金砂(初级)

19
 
引用 14 楼 gooogleman 的回复:
上面用C来写比较明了点

还有,这个波特率也要根据相关参数改动一下。不然打印信息不正常了。
CPU供电电压在哪里改动的呢?

好的,这个方法有空试试。也许电池使用时间会高一点。


用C写效率就低了

这几个是我实现的,我在做DVFS时候加进去的。
此帖出自WindowsCE论坛
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

20
 
引用 15 楼 yashi 的回复:
wince下肯定是没有这个接口的!

都知道可以通过修改MPLL来调整CPU的主频,不过在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
快速回复 返回顶部 返回列表