各位高人,请问有做过DVS的吗?

西山锈码 2009-06-11 11:46:10
WINCE5.0、三星2440BSP,现在要做DVS功能,不知道从哪里下手,需要修改或完成哪些函数呢?请高手指点!
...全文
285 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
西山锈码 2009-06-15
  • 打赏
  • 举报
回复
搞不定了,放弃吧,遗憾啊
y_man18 2009-06-12
  • 打赏
  • 举报
回复
没做过,帮顶!
西山锈码 2009-06-12
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 yashi 的回复:]
GPB和GPF就是GPIO的B组和F组,具体做什么用,要看你的硬件设计了。

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

不知道你搞DVS的目的是什么,如果是自己研究,鉴于你自己也说是菜鸟,我想还是暂且搁置;
如果是工作任务,那你真的很不幸,又遇到了乱指挥的领导。。。。
[/Quote]
yashi兄真是一针见血啊,佩服!首先,没有匹配的原理图,所以我没办法搞清楚GPB和GPF的控制;其次,我的确是菜鸟,很多东西有心无力啊;再次,这是领导安排的工作任务...我现在是欲哭无泪啊。
所以,病急乱投医,希望能在论坛里偶遇做过DVS的高人随意指点一下,呵呵,我这是非典型性守株待兔呢
yashi 2009-06-12
  • 打赏
  • 举报
回复
GPB和GPF就是GPIO的B组和F组,具体做什么用,要看你的硬件设计了。

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

不知道你搞DVS的目的是什么,如果是自己研究,鉴于你自己也说是菜鸟,我想还是暂且搁置;
如果是工作任务,那你真的很不幸,又遇到了乱指挥的领导。。。。
西山锈码 2009-06-12
  • 打赏
  • 举报
回复
该死的DVS,折腾两天了,没搞出啥头绪,我现在完全是瞎子摸鱼啊,苦恼
zhj8727 2009-06-12
  • 打赏
  • 举报
回复
uping
西山锈码 2009-06-12
  • 打赏
  • 举报
回复
在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;
}
西山锈码 2009-06-11
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 xqhrs232 的回复:]
没做过,不过三星是不是已经实现了,只要设置那个环境变量使能就OK?!
[/Quote]
是有这个环境变量:BSP_USEDVS,但是我觉得实现的函数可能需要做改动或添加功能函数,对DVS的原理没怎么搞清楚,感觉很困难,所以希望有做过的同志们能帮一帮啊
xqhrs232 2009-06-11
  • 打赏
  • 举报
回复
没做过,不过三星是不是已经实现了,只要设置那个环境变量使能就OK?!
西山锈码 2009-06-11
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 91program 的回复:]
网络视频服务器DVS(digtal video server)???

这要实现,不简单。
[/Quote]
不是网络视频服务,是DVS(Dynamic Voltage Scaling)动态电压调整,目的是为了达到动态控制能耗。
91program 2009-06-11
  • 打赏
  • 举报
回复
网络视频服务器DVS(digtal video server)???

这要实现,不简单。
西山锈码 2009-06-11
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 shuiyan 的回复:]
方法说起来简单:判断cpu占用率低过一定门限,就降低频率,再降低电压。判断cpu占用率高过一定门限,就提升电压,再提升频率。
不过做起来就不简单了。难道2442的bsp没提供?那厂商也不提供?
如果真支持,厂商应该会提供的,不然这功能就浪费了。
自己做,感觉困难大、周期长。
[/Quote]
是啊,确实感觉困难很大,我的BSP是从网上DOWN的一个,一路做来很艰辛啊,我年后才接触WinCE的,辛苦啊
shuiyan 2009-06-11
  • 打赏
  • 举报
回复
方法说起来简单:判断cpu占用率低过一定门限,就降低频率,再降低电压。判断cpu占用率高过一定门限,就提升电压,再提升频率。
不过做起来就不简单了。难道2442的bsp没提供?那厂商也不提供?
如果真支持,厂商应该会提供的,不然这功能就浪费了。
自己做,感觉困难大、周期长。
西山锈码 2009-06-11
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 shuiyan 的回复:]
要做cpu的降频,必须确认cpu本身支持运行中变频,如果不支持,就没法做。2440没玩过dvs,不好说是否能做。
[/Quote]
我的CPU用的是S3C2442,从本质上讲和2440区别不大,但是应该是支持DVS的,希望shuiyan兄有空时能替兄弟看一下可有好的方法,呵呵。鄙人比较菜,还望不要笑话我啊
shuiyan 2009-06-11
  • 打赏
  • 举报
回复
要做cpu的降频,必须确认cpu本身支持运行中变频,如果不支持,就没法做。2440没玩过dvs,不好说是否能做。
西山锈码 2009-06-11
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 shuiyan 的回复:]
功耗决定频率和电压。
cpu的占用率高,就使用高频率和高电压;占用率低, 就降低频率和电压。

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

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

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

这部分一般原厂都是直接提供,而且建议不要修改,否…
[/Quote]
多谢shuiyan兄指点迷津,相对于通过DVS具体能降低多少功耗,我更关心的是我现在应该怎么去实现DVS,在2440A的BSP里面有两个文件夹(timer_dvs和intr_dvs)貌似是与实现DVS相关的代码,我研究了一下,很是不明白,觉得没办法实现DVS的,难道是因为我没搞清楚究竟如何实现DVS?
shuiyan 2009-06-11
  • 打赏
  • 举报
回复
功耗决定频率和电压。
cpu的占用率高,就使用高频率和高电压;占用率低, 就降低频率和电压。

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

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

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

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


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


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

19,500

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧