18728|71

70

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

关于2440 休眠唤醒的实现疑惑 [复制链接]

xajhuang 老兄,我看了你去年发了2440 休眠唤醒的帖子,现在我对2440 休眠唤醒不解。

根据资料,休眠的时候会执行OEMPowerOff函数,这函数里面有个OALCPUPowerOff函数(在OAL下的startup.s实现)实现休眠,并且在OALCPUPowerOff后面用B.指令等待中断

但是让人疑惑的是,中断之后会跳到bootloader,然后就唤醒了,是怎么回事的?我觉得他是怎么跳到bootloader的?因为wince的中断向量表和bootloader的中断向量表地址是不同的。还有OALCPUPowerOff函数之后还要执行一些现场恢复的函数,这个是什么时候得到执行的?难道这些东西是由内存决定的?我现在还没有实现休眠唤醒,故有这些疑惑,希望帮我破解难题。

请指教。谢谢。

最新回复

学习下。正在做  详情 回复 发表于 2010-6-12 12:42
点赞 关注

回复
举报

70

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
完全没有错,休眠的时候系统进入休眠状态后就停止一切工作,知道有唤醒源为止。唤醒操作实际上和一个Reset操作,和硬件上电启动没有什么差别。所以代码又会回到reset的入口点进行复位。这个操作是有硬件决定的,所以你在软件中看不到任何逻辑。系统复位后根据状态寄存器来判断系统是复位还是从休眠状态唤醒,要是是唤醒的话会执行恢复工作,主要是清除休眠的状态寄存器GSTATUS2(读一次自动清),然后恢复时钟配置,恢复SDRAM自刷新模式到正常模式,从内存中读取休眠前保存的数据恢复MMU,然后跳到休眠前的指令地址。这个操作实在最初的启动代码中(Stepldr),一旦系统恢复到休眠前的指令地址后,程序就会执行OALCPUPowerOff函数里面的后段部分,对系统进行进一步设置,使得唤醒后的配置和休眠前的配置保持一致。比如IO配置,时钟配置等。这个时候差不多系统就从休眠状态恢复了。
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
引用 1 楼 xajhuang 的回复:
完全没有错,休眠的时候系统进入休眠状态后就停止一切工作,知道有唤醒源为止。唤醒操作实际上和一个Reset操作,和硬件上电启动没有什么差别。所以代码又会回到reset的入口点进行复位。这个操作是有硬件决定的,所以你在软件中看不到任何逻辑。系统复位后根据状态寄存器来判断系统是复位还是从休眠状态唤醒,要是是唤醒的话会执行恢复工作,主要是清除休眠的状态寄存器GSTATUS2(读一次自动清),然后恢复时钟配置,恢复SDRAM自刷…



我的搞不定,知道怎么回事,唤醒不了。

还有下面设置中断不完整吧?这个怎么没有设置中断触发方式的?比如高电平/低电平等触发等?
;      6. Setting Wakeup External Interrupt(EINT0,1,2) Mode
ldr    r0, =vGPIOBASE

ldr    r1, =0x550a
str    r1, [r0, #oGPFCON]
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

4
 
实际上是不需要的。因为在PWR_Button驱动里面对按钮的外中断触发类型已经进行了配置。要是没有被其它地方修改的话,这里不需要再重新设置。
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

5
 
引用 3 楼 xajhuang 的回复:
实际上是不需要的。因为在PWR_Button驱动里面对按钮的外中断触发类型已经进行了配置。要是没有被其它地方修改的话,这里不需要再重新设置。


弱弱的问你一个问题,你做休眠唤醒修改BSP代码量大吗?

我老是唤醒不了,我怀疑是方向搞错了。搞了一周基本上是没有收获。如果难度大,修改多我就暂时不搞先了,板子的IO都没有留出来,连个LED测试都不行。
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

6
 
我是在s3c2440 wince 5.0 上做的。实际上我就是改了几行代码。要是你的BSP比较官方的话,几乎是不需要修改了。我也是飞了一个按钮和一个LED调出来的。第一个阶段是要确认芯片是否进入到Sleep模式,可以通过测量PWR_EN硬件来确定。进入Sleep时PWR_EN的输出为低,否则就没有进入SLEEP模式。
第二阶段就是从Stepldr中的reset用LED跟踪,确定唤醒执行到哪步,看看Stepldr有没有执行到reset,看看代码有没有跑飞,基本上要是代码没有跑飞的话肯定就能唤醒了。
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

7
 
哦,我用 ADS 的bootloader。没有使用三星自带的Stepldr+eboot。
哇塞,那这样好烦人的。Stepldr的烧写都是个郁闷问题。

 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

8
 
你先用Stepldr吧,调通了在把唤醒的代码移植到 ADS 中,否则你找不到方向的。
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

9
 
最近想调这个 关注一下
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

10
 
引用 7 楼 xajhuang 的回复:
你先用Stepldr吧,调通了在把唤醒的代码移植到 ADS 中,否则你找不到方向的。

好的,明天开始弄个开发板来慢慢测试。
 
 
 

回复

55

帖子

0

TA的资源

一粒金砂(初级)

11
 
楼主注意检查下,是否提供了两套电源,休眠的时候是另外一套电源。下面是手册的说明
SLEEP mode: The block disconnects the internal power. So, there occurs no power consumption due to CPU and the internal logic except the wake-up logic in this mode. Activating the SLEEP mode requires two independent powersources. One of the two power sources supplies the power for the wake-up logic. The other one supplies otherinternal logics including CPU, and should be controlled for power on/off.
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

12
 
基本上可以肯定是你的BOOTLOADER用的不对,你换setpldr+eboot应该就没问题了
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

13
 
去年我在2443上实现了休眠唤醒功能,主要是参照2440休眠唤醒还改的,代码改的很少。
其实休眠、唤醒就是一个相反的过程,根据我当时一步一步的测试,代码没有跑到bootloader
里,就是在OAL那个startup.s里,那里有个b. ,跑到这里就进行了休眠,当有中断源产生,又从
这里跑回到OEMPowerOff那个函数,接着就回复寄存器的值(注意,在唤醒过程中一定要实现InitFlash
这个函数,当时2443没有这个函数,搞了我好半天!)
你可以在汇编里添加代码,控制一些led灯的亮灭情况,来确定程序跑到那里去了,我当时就是这样实现的。
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

14
 
最近想调这个 关注一下
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

15
 
引用 12 楼 hugohong 的回复:
去年我在2443上实现了休眠唤醒功能,主要是参照2440休眠唤醒还改的,代码改的很少。
其实休眠、唤醒就是一个相反的过程,根据我当时一步一步的测试,代码没有跑到bootloader
里,就是在OAL那个startup.s里,那里有个b. ,跑到这里就进行了休眠,当有中断源产生,又从
这里跑回到OEMPowerOff那个函数,接着就回复寄存器的值(注意,在唤醒过程中一定要实现InitFlash
这个函数,当时2443没有这个函数,搞了我好半天!)
你…


InitFlash?哪有这个函数啊。在哪个文件的?
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

16
 
引用 10 楼 sanlybeen 的回复:
楼主注意检查下,是否提供了两套电源,休眠的时候是另外一套电源。下面是手册的说明
SLEEP mode: The block disconnects the internal power. So, there occurs no power consumption due to CPU and the internal logic except the wake-up logic in this mode. Activating the SLEEP mode requires two independent powersources. One of the two power sources supplies the power for the wake-up logic. The other one su…


我觉得这个没有必然的关系吧。因为我在休眠唤醒没有关闭电源的动作,都开着。

你们的供电是怎么做的?
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

17
 
引用 15 楼 gooogleman 的回复:
我觉得这个没有必然的关系吧。因为我在休眠唤醒没有关闭电源的动作,都开着。

你们的供电是怎么做的?


这个我也不太清楚,我前段时间搞了下,没成功,能休眠,但唤醒不了。感觉应该是硬件上供电有问题,具体还没查出问题,请楼主好好研究下,搞出来了,向你请教。
 
 
 

回复

123

帖子

0

TA的资源

一粒金砂(初级)

18
 
s3c2440 不需要在唤醒时初始化NandFlash,从软件上来说休眠和唤醒没有必然的联系,但是实际上休眠用来节省电源,节省电源就需要在休眠的时候关闭部分不需要的电源,调试软件的时候可以不关,调功耗的时候再去处理电源问题。
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

19
 
正在用开发板测试,先弄着先。等下来报告结果。
 
 
 

回复

55

帖子

0

TA的资源

一粒金砂(初级)

20
 
Windows CE Kernel for ARM (Thumb Enabled) Built on Feb  8 2007 at 23:36:51
ProcessorType=0920  Revision=0
sp_abt=ffff5000 sp_irq=ffff2800 sp_undef=ffffc800 OEMAddressTable = 80212c04
                                                     
                        

DCache: 8 sets, 64 ways, 32 line size, 16384 size
ICache: 8 sets, 64 ways, 32 line size, 16384 size

不知道怎么回事,我就修改一下子OAL的startup.s而已,再说我的内存也清零了。

现在下载都下不了,郁闷。

 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表