3827|7

72

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

请教WINCE sleep wakeup问题 [复制链接]

大家好,请教一个有关sleep和wakeup的问题。
我们知道,在系统进入睡眠的时候,会调用OEMPowerOff(),在这里面,系统会关闭外设电源,保存寄存器,然后sleep,当外部中断发生的时候,会从睡眠的地方起来。但小弟,这里有个疑问,请教大家了。我把代码贴出来,各位大侠帮忙看看:(注:以下代码来自于三星芯片)
stepldr/startup.s
    STARTUPTEXT
    LEAF_ENTRY StartUp
   
    b        ResetHandler  
    b        .
...
ResetHandler
    ldr        r0, =WTCON       ; disable the watchdog timer.
    ldr        r1, =0x0         
    str        r1, [r0]
    ldr        r0, =INTMSK      ; mask all first-level interrupts.
    ldr        r1, =0xffffffff
    str        r1, [r0]
......
......
; :::::::::::::::::::::::::::::::::::::::::::::
;           BEGIN: Power Management
; - - - - - - - - - - - - - - - - - - - - - - -
        ldr        r1, =GSTATUS2  ; Determine Booting Mode
        ldr        r10, [r1]
        tst        r10, #0x2
        beq        %F2           ;如果不是wakup唤醒,则跳过下面的执行语句
        str r10, [r1]                  ; Clear Test
......
......
        mov r1, #256
loop11
        subs r1, r1, #1                ; wait until the SelfRefresh is released.
        bne loop11

        ldr      r2, =0x201000                               ; offset into the RAM
        add    r2, r2, #0x30000000                        ; add physical base
        mov   pc, r2                 ;如果是wakeup事件,则跳转到0x30201000地址
......
......

OAL/startup.s
        LEAF_ENTRY CPUPowerOff            ;此函数由OEMPowerOff()调用,完成sleep和唤醒所做的工作

;       1. Push SVC state onto our stack  ;C语言进入此处,压栈
        stmdb   sp!, {r4-r12}                  
        stmdb   sp!, {lr}

;       2. Save MMU & CPU Register to RAM
    ldr     r3, =SLEEPDATA_BASE_VIRTUAL     ; base of Sleep mode storage

        ldr     r2, =Awake_address              ; store Virtual return address
        str     r2, [r3], #4
......
......
        ldr     r4, =vCLKCON
        ldr     r5, =0x7fff8            ; 设置CPU进入sleep模式

;                8. Jump to real Power-Off Address
        ldr                r6, =0x80000000                ; make address to 0x8020 1020
        add                r6, r6, #0x200000        ;
        add                r6, r6, #0x1000                ;
        add                r6, r6, #0x20                ;
        mov     pc, r6                                ;这里的代码看上去像是醒了后执行的,那么这个0x80201020是什么地址,为什么比stepldr/startup.s里面的地址多了0x20空间出来?

; This point is called from EBOOT's startup code(MMU is enabled)
;       in this routine, left information(REGs, INTMSK, INTSUBMSK ...)

Awake_address

;       1. Recover CPU Registers

        ldr     r3, =SLEEPDATA_BASE_VIRTUAL                ; Sleep mode information data structure
        add     r2, r3, #SleepState_FIQ_SPSR
        mov     r1, #Mode_FIQ:OR:I_Bit:OR:F_Bit                ; Enter FIQ mode, no interrupts - also FIQ
        msr     cpsr, r1
        ldr     r0,  [r2], #4
        msr     spsr, r0
        ldr     r8,  [r2], #4
        ldr     r9,  [r2], #4
        ldr     r10, [r2], #4
        ldr     r11, [r2], #4
        ldr     r12, [r2], #4
        ldr     sp,  [r2], #4
        ldr     lr,  [r2], #4
...
...
;       2. Recover Last mode's REG's, & go back to caller of CPUPowerOff()

        ldr     sp, [r3, #SleepState_SVC_SP]
        ldr     lr, [sp], #4
        ldmia   sp!, {r4-r12}
        mov     pc, lr                          ; and now back to our sponsors,回到off.c文件里面去。

现在我有几个问题:
1,stepldr/startup.s里面的跳转地址是0x30201000,那么这个地址到底指向了哪里?是Awake_address还是上面的注释8处?那么系统是如何把这个地址定位成0x30201000的呢?是config.bib?是?但我在config.bib里面没有找到这个值啊。
2,上面的那个问题,为什么注释8处弄出来个0x80201020,为什么比30201000多0x20个地址空间?这是做什么用的?

谢谢。

此帖出自WindowsCE论坛

最新回复

config.bib 中看看 ROMSTART 吧.  详情 回复 发表于 2008-11-12 11:00
点赞 关注
 

回复
举报

65

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
沙发一个先!
此帖出自WindowsCE论坛
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
没有人顶,我自己顶一个先。。。
此帖出自WindowsCE论坛
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

4
 
帮你顶顶
此帖出自WindowsCE论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

5
 
0x30201000 是 Windows CE 内核运行的物理地址,你跳到这个地址可以直接启动 Windows CE。加的 0x20 偏移地址是 ARM9 7种异常模式的电源管理中断入口地址,结论是 0x30201020 是 WINDOWS CE 内核的电源中断模式入口。
此帖出自WindowsCE论坛
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

6
 
至于0x80201020 的问题实际上是 0x30201020 对应的 经过 MMU 映射后的 CACHE 地址,实际上还是 0x30201020
此帖出自WindowsCE论坛
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

7
 
引用 4 楼 xajhuang 的回复:
0x30201000 是 Windows CE 内核运行的物理地址,你跳到这个地址可以直接启动 Windows CE。加的 0x20 偏移地址是 ARM9 7种异常模式的电源管理中断入口地址,结论是 0x30201020 是 WINDOWS CE 内核的电源中断模式入口。


0x30201000 是 Windows CE 内核运行的物理地址,那么这个地址定义在什么地方?config.bib?还是?
此帖出自WindowsCE论坛
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(中级)

8
 
config.bib 中看看 ROMSTART 吧.
此帖出自WindowsCE论坛
 
 
 

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

随便看看
查找数据手册?

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