6108|17

79

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

各位高人,请问有做过DVS的吗? [复制链接]

WINCE5.0、三星2440BSP,现在要做DVS功能,不知道从哪里下手,需要修改或完成哪些函数呢?请高手指点!

最新回复

搞不定了,放弃吧,遗憾啊  详情 回复 发表于 2009-6-15 11:34
点赞 关注

回复
举报

81

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
网络视频服务器DVS(digtal video server)???

这要实现,不简单。
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
引用 1 楼 91program 的回复:
网络视频服务器DVS(digtal video server)???

这要实现,不简单。

不是网络视频服务,是DVS(Dynamic Voltage Scaling)动态电压调整,目的是为了达到动态控制能耗。
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

4
 
没做过,不过三星是不是已经实现了,只要设置那个环境变量使能就OK?!
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

5
 
引用 3 楼 xqhrs232 的回复:
没做过,不过三星是不是已经实现了,只要设置那个环境变量使能就OK?!

是有这个环境变量:BSP_USEDVS,但是我觉得实现的函数可能需要做改动或添加功能函数,对DVS的原理没怎么搞清楚,感觉很困难,所以希望有做过的同志们能帮一帮啊
 
 
 

回复

91

帖子

0

TA的资源

一粒金砂(初级)

6
 
功耗决定频率和电压。
cpu的占用率高,就使用高频率和高电压;占用率低, 就降低频率和电压。

现在的台式机和笔记本的cpu基本都有,也是Intel首创的。

嵌入式在Intel的XScal PXA270首先出现利用。

因为涉及使用中改变cpu主频,所以cpu的设计复杂性增加,驱动复杂性也增加,除了判断cpu占用率,主要工作在于调整频率,调整电压,调整cpu各个模组的时钟分频。

这部分一般原厂都是直接提供,而且建议不要修改,否则很难保证是否会出问题。


2440没有专用的调整电压的接口,所以即使能调整频率,对功耗的减少也不客观。


目前Monahans(PXA3xx)系列cpu,以手机论,使用了动态调整能减少150-230mA左右。
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

7
 
引用 5 楼 shuiyan 的回复:
功耗决定频率和电压。
cpu的占用率高,就使用高频率和高电压;占用率低, 就降低频率和电压。

现在的台式机和笔记本的cpu基本都有,也是Intel首创的。

嵌入式在Intel的XScal PXA270首先出现利用。

因为涉及使用中改变cpu主频,所以cpu的设计复杂性增加,驱动复杂性也增加,除了判断cpu占用率,主要工作在于调整频率,调整电压,调整cpu各个模组的时钟分频。

这部分一般原厂都是直接提供,而且建议不要修改,否…

多谢shuiyan兄指点迷津,相对于通过DVS具体能降低多少功耗,我更关心的是我现在应该怎么去实现DVS,在2440A的BSP里面有两个文件夹(timer_dvs和intr_dvs)貌似是与实现DVS相关的代码,我研究了一下,很是不明白,觉得没办法实现DVS的,难道是因为我没搞清楚究竟如何实现DVS?
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

8
 
要做cpu的降频,必须确认cpu本身支持运行中变频,如果不支持,就没法做。2440没玩过dvs,不好说是否能做。
 
 
 

回复

45

帖子

0

TA的资源

一粒金砂(初级)

9
 
引用 7 楼 shuiyan 的回复:
要做cpu的降频,必须确认cpu本身支持运行中变频,如果不支持,就没法做。2440没玩过dvs,不好说是否能做。

我的CPU用的是S3C2442,从本质上讲和2440区别不大,但是应该是支持DVS的,希望shuiyan兄有空时能替兄弟看一下可有好的方法,呵呵。鄙人比较菜,还望不要笑话我啊
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

10
 
方法说起来简单:判断cpu占用率低过一定门限,就降低频率,再降低电压。判断cpu占用率高过一定门限,就提升电压,再提升频率。
不过做起来就不简单了。难道2442的bsp没提供?那厂商也不提供?
如果真支持,厂商应该会提供的,不然这功能就浪费了。
自己做,感觉困难大、周期长。
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

11
 
引用 9 楼 shuiyan 的回复:
方法说起来简单:判断cpu占用率低过一定门限,就降低频率,再降低电压。判断cpu占用率高过一定门限,就提升电压,再提升频率。
不过做起来就不简单了。难道2442的bsp没提供?那厂商也不提供?
如果真支持,厂商应该会提供的,不然这功能就浪费了。
自己做,感觉困难大、周期长。

是啊,确实感觉困难很大,我的BSP是从网上DOWN的一个,一路做来很艰辛啊,我年后才接触WinCE的,辛苦啊
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

12
 
没做过,帮顶!
 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

13
 
在kernel\oal\init.c文件中发现这个函数,不理解是什么意思,有哪位能够讲解一下吗?这里的GPB和GPF用来控制什么啊?
#ifdef DVS_EN
void ChangeVoltage(int vtg)
{
        volatile S3C2440A_IOPORT_REG *s2440IOP = (S3C2440A_IOPORT_REG *)OALPAtoVA(S3C2440A_BASE_REG_PA_IOPORT, FALSE);
        UINT8 temp;
       
//  port setting  
// GPF4:D0, GPF5:D1, GPF6:D2, GPF7:D3, GPB7:D4, GPB8:Latch enable
        CurrVoltage = vtg;
        temp = s2440IOP->GPFDAT;
        switch(vtg) {
        case V090:        // 0.9V
                s2440IOP->GPBDAT=(s2440IOP->GPBDAT&0x77f)|(1<<7);   //D4
                s2440IOP->GPFDAT=(s2440IOP->GPFDAT&0x0f)|(0<<7)|(0<<6)|(1<<5)|(1<<4);   //D3~0
                break;
        case V095:        // 0.95V
                s2440IOP->GPBDAT=(s2440IOP->GPBDAT&0x77f)|(1<<7);   //D4
                s2440IOP->GPFDAT=(s2440IOP->GPFDAT&0x0f)|(0<<7)|(0<<6)|(0<<5)|(1<<4);   //D3~0
                break;
        case V0975:        // 0.975V
                s2440IOP->GPBDAT=(s2440IOP->GPBDAT&0x77f)|(1<<7);   //D4
                s2440IOP->GPFDAT=(s2440IOP->GPFDAT&0x0f)|(0<<7)|(0<<6)|(0<<5)|(0<<4);   //D3~0
                break;
        case V100:        // 1.0V
                s2440IOP->GPBDAT=(s2440IOP->GPBDAT&0x77f)|(0<<7);   //D4
                s2440IOP->GPFDAT=(s2440IOP->GPFDAT&0x0f)|(1<<7)|(1<<6)|(1<<5)|(1<<4);   //D3~0
                break;
        case V105:        // 1.05V
                s2440IOP->GPBDAT=(s2440IOP->GPBDAT&0x77f)|(0<<7);   //D4
                s2440IOP->GPFDAT=(s2440IOP->GPFDAT&0x0f)|(1<<7)|(1<<6)|(1<<5)|(0<<4);   //D3~0
                break;
        case V110:        // 1.1V
                s2440IOP->GPBDAT=(s2440IOP->GPBDAT&0x77f)|(0<<7);   //D4
                s2440IOP->GPFDAT=(s2440IOP->GPFDAT&0x0f)|(1<<7)|(1<<6)|(0<<5)|(1<<4);   //D3~0
                break;
        case V115:        // 1.15V
                s2440IOP->GPBDAT=(s2440IOP->GPBDAT&0x77f)|(0<<7);   //D4
                s2440IOP->GPFDAT=(s2440IOP->GPFDAT&0x0f)|(1<<7)|(1<<6)|(0<<5)|(0<<4);   //D3~0
                break;
        case V120:        // 1.2V
                s2440IOP->GPBDAT=(s2440IOP->GPBDAT&0x77f)|(0<<7);   //D4
                s2440IOP->GPFDAT=(s2440IOP->GPFDAT&0x0f)|(1<<7)|(0<<6)|(1<<5)|(1<<4);   //D3~0
                break;
        case V125:        // 1.25V
                s2440IOP->GPBDAT=(s2440IOP->GPBDAT&0x77f)|(0<<7);   //D4
                s2440IOP->GPFDAT=(s2440IOP->GPFDAT&0x0f)|(1<<7)|(0<<6)|(1<<5)|(0<<4);   //D3~0
                break;
        case V130:        // 1.3V
                s2440IOP->GPBDAT=(s2440IOP->GPBDAT&0x77f)|(0<<7);   //D4
                s2440IOP->GPFDAT=(s2440IOP->GPFDAT&0x0f)|(1<<7)|(0<<6)|(0<<5)|(1<<4);   //D3~0
                break;
        case V135:        // 1.35V
                s2440IOP->GPBDAT=(s2440IOP->GPBDAT&0x77f)|(0<<7);   //D4
                s2440IOP->GPFDAT=(s2440IOP->GPFDAT&0x0f)|(1<<7)|(0<<6)|(0<<5)|(0<<4);   //D3~0
                break;
        case V140:        // 1.4V
                s2440IOP->GPBDAT=(s2440IOP->GPBDAT&0x77f)|(0<<7);   //D4
                s2440IOP->GPFDAT=(s2440IOP->GPFDAT&0x0f)|(0<<7)|(1<<6)|(1<<5)|(1<<4);   //D3~0
                break;
        case V145:        // 1.45V
                s2440IOP->GPBDAT=(s2440IOP->GPBDAT&0x77f)|(0<<7);   //D4
                s2440IOP->GPFDAT=(s2440IOP->GPFDAT&0x0f)|(0<<7)|(1<<6)|(1<<5)|(0<<4);   //D3~0
                break;
        case V150:        // 1.5V
                s2440IOP->GPBDAT=(s2440IOP->GPBDAT&0x77f)|(0<<7);   //D4
                s2440IOP->GPFDAT=(s2440IOP->GPFDAT&0x0f)|(0<<7)|(1<<6)|(0<<5)|(1<<4);   //D3~0
                break;

        default:
                break;
        }

//  port setting  
// GPF4:D0, GPF5:D1, GPF6:D2, GPF7:D3, GPB7:D4, GPB8:Latch enable, GPB10: OE
        s2440IOP->GPBCON=(s2440IOP->GPBCON&0x3f3fff)|(1<<14);   // GPB7: Output
    RETAILMSG(1,(_T("GPBCON: 0X%x\r\n"),s2440IOP->GPBCON));
//        s2440IOP->rGPBDN&=~(1<<7);
        s2440IOP->GPFCON=(s2440IOP->GPFCON&0x00ff)|(0x5500);  // GPF4~7: Output
//        s2440IOP->rGPFDN&=~(0xf<<4);
    RETAILMSG(1,(_T("GPFCON: 0X%x\r\n"),s2440IOP->GPFCON));

        s2440IOP->GPBDAT&=~(1<<8);   //Latch enable
        s2440IOP->GPBCON=(s2440IOP->GPBCON&0x3cffff)|(1<<16);   // GPB8: Output

        s2440IOP->GPBDAT|=(1<<10);   //Output enable
        s2440IOP->GPBCON=(s2440IOP->GPBCON&0x0fffff)|(1<<20);   // GPB10: Output
       
//        s2440IOP->rGPBDN&=~(1<<8);
        s2440IOP->GPBDAT|=(1<<8);   //Latch disable
       
        s2440IOP->GPFDAT = temp;
}
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

14
 
uping
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

15
 
该死的DVS,折腾两天了,没搞出啥头绪,我现在完全是瞎子摸鱼啊,苦恼
 
 
 

回复

54

帖子

0

TA的资源

一粒金砂(初级)

16
 
GPB和GPF就是GPIO的B组和F组,具体做什么用,要看你的硬件设计了。

你从网上下载的BSP,这部分是和硬件关系比较密切的,没有匹配的硬件原理图,恐怕很难搞明白。

不知道你搞DVS的目的是什么,如果是自己研究,鉴于你自己也说是菜鸟,我想还是暂且搁置;
如果是工作任务,那你真的很不幸,又遇到了乱指挥的领导。。。。
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

17
 
引用 15 楼 yashi 的回复:
GPB和GPF就是GPIO的B组和F组,具体做什么用,要看你的硬件设计了。

你从网上下载的BSP,这部分是和硬件关系比较密切的,没有匹配的硬件原理图,恐怕很难搞明白。

不知道你搞DVS的目的是什么,如果是自己研究,鉴于你自己也说是菜鸟,我想还是暂且搁置;
如果是工作任务,那你真的很不幸,又遇到了乱指挥的领导。。。。

yashi兄真是一针见血啊,佩服!首先,没有匹配的原理图,所以我没办法搞清楚GPB和GPF的控制;其次,我的确是菜鸟,很多东西有心无力啊;再次,这是领导安排的工作任务...我现在是欲哭无泪啊。
所以,病急乱投医,希望能在论坛里偶遇做过DVS的高人随意指点一下,呵呵,我这是非典型性守株待兔呢
 
 
 

回复

87

帖子

0

TA的资源

一粒金砂(初级)

18
 
搞不定了,放弃吧,遗憾啊
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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