一步一步实验wince(2009-04-2)creator
sz111@126.com
原本以为睡眠唤醒都已经ok了,但是今天测试唤醒之后会导致死机,最后发现是UPLL和MPLL配置不对,
修改之后不死机了,但是串口乱码。一直没有找到原因。通过用wince读写寄存器发现在唤醒winceCLKDIVN从5改为7了。问题就在这里了。原来stepldr里面我当时固定了CLKDIVN,导致CLKDIVN_VAR无效了。修改之后ok了。
另外,唤醒源一定要为EINT0--EINT15之间的一个,休眠之后中断是都屏蔽的。唤醒的时候直接从reset执行了。
其中,真正进入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 ; jump to Power off code in ROM
为何这里要多加0x1000呢,原来是因为NB0为了保持格式兼容,前4K为空,所以真正的程序是从
0x1000之后开始的。StartUp是从0x80200000开始,所以sleep真正跳到了SelfRefreshAndPowerOff 程序很巧妙啊。
STARTUPTEXT
LEAF_ENTRY StartUp
1 b ResetHandler
b %B1 ;handler for Undefined mode
b %B1 ;handler for SWI interrupt
b %B1 ;handler for PAbort
b %B1 ;handler for DAbort
b %B1 ;reserved
b %B1 ;handler for IRQ interrupt
b %B1 ;handler for FIQ interrupt
SelfRefreshAndPowerOff ; run with Instruction Cache's code
str r1, [r0] ; Enable SDRAM self-refresh
str r3, [r2] ; MISCCR Setting
str r5, [r4] ; Power Off !!
b .
|
文件: | wince5寄存器读写.rar |
大小: | 126KB |
下载: | 下载 |
|
阅读(2239) | 评论(0) | 转发(1) |