📄 sleep.txt
字号:
000a50 e3a0044a MOV r0,#0x4a000000
000a54 e5900000 LDR r0,[r0,#0]
000a58 e3a0144a MOV r1,#0x4a000000
000a5c e5810000 STR r0,[r1,#0]
;;;546 rINTPND=rINTPND;
000a60 e3a0044a MOV r0,#0x4a000000
000a64 e5900010 LDR r0,[r0,#0x10]
000a68 e3a0144a MOV r1,#0x4a000000
000a6c e5810010 STR r0,[r1,#0x10]
;;;547
;;;548 #endif
;;;549
;;;550 rEINTMASK = rEINTMASK&~(1<<11);
000a70 e3a00456 MOV r0,#0x56000000
000a74 e59000a4 LDR r0,[r0,#0xa4]
000a78 e3c00e80 BIC r0,r0,#0x800
000a7c e3a01456 MOV r1,#0x56000000
000a80 e58100a4 STR r0,[r1,#0xa4]
;;;551 //SRCPND: EINT8_23 will be set by EINT11 after wake-up.
;;;552 rINTMSK = BIT_ALLMSK;
000a84 e3e00000 MVN r0,#0
000a88 e3a0144a MOV r1,#0x4a000000
000a8c e5810008 STR r0,[r1,#8]
;;;553
;;;554 // NOTE:
;;;555 // Any interrupt can't be available in Sleep mode.
;;;556 // because SDRAM enters into self-refresh mode during Sleep mode.
;;;557 // ISR code is on the SDRAM.
;;;558
;;;559 Uart_Printf("\nAlarm Wake-Up (y/n)? ");
000a90 e28f0f4c ADR r0,|L1.3016|
000a94 ebfffffe BL Uart_Printf
;;;560 if(Uart_Getch()=='y')
000a98 ebfffffe BL Uart_Getch
000a9c e3500079 CMP r0,#0x79
000aa0 1a000003 BNE |L1.2740|
;;;561 {
;;;562 Uart_Printf("\nS3C2442 will wake up by RTC alarm(10 sec) or EINT0 .\n");
000aa4 e28f0f4d ADR r0,|L1.3040|
000aa8 ebfffffe BL Uart_Printf
;;;563 SetAlarmWakeUp();
000aac ebfffffe BL SetAlarmWakeUp
000ab0 ea000001 B |L1.2748|
;;;564 }
;;;565 else
;;;566 {
;;;567 Uart_Printf("\nPush EINT0 button for wake-up from sleep mode.\n");
|L1.2740|
000ab4 e28f0f57 ADR r0,|L1.3096|
000ab8 ebfffffe BL Uart_Printf
;;;568 }
;;;569
;;;570 rRTCCON=0x0; // R/W disable, 1/32768, Normal(merge), No reset
|L1.2748|
000abc e3a00000 MOV r0,#0
000ac0 e3a01457 MOV r1,#0x57000000
000ac4 e5c10040 STRB r0,[r1,#0x40]
;;;571 rADCCON|=(1<<2);
000ac8 e3a00458 MOV r0,#0x58000000
000acc e5900000 LDR r0,[r0,#0]
000ad0 e3800004 ORR r0,r0,#4
000ad4 e3a01458 MOV r1,#0x58000000
000ad8 e5810000 STR r0,[r1,#0]
;;;572
;;;573 /* Pin Configuration in Sleep Mode */
;;;574 rMISCCR|=(1<<12); //USB port0 = suspend
000adc e3a00456 MOV r0,#0x56000000
000ae0 e5900080 LDR r0,[r0,#0x80]
000ae4 e3800d40 ORR r0,r0,#0x1000
000ae8 e3a01456 MOV r1,#0x56000000
000aec e5810080 STR r0,[r1,#0x80]
;;;575 rMISCCR|=(1<<13); //USB port1 = suspend
000af0 e3a00456 MOV r0,#0x56000000
000af4 e5900080 LDR r0,[r0,#0x80]
000af8 e3800d80 ORR r0,r0,#0x2000
000afc e3a01456 MOV r1,#0x56000000
000b00 e5810080 STR r0,[r1,#0x80]
;;;576 //rMISCCR|=(1<<2); //Previous state at STOP(?) mode (???)
;;;577 //rMISCCR &= ~(1<<2); //Previous state at STOP(?) mode (???)
;;;578
;;;579 Uart_Printf("\nrMISCCR0 = %x\n", rMISCCR);
000b04 e3a00456 MOV r0,#0x56000000
000b08 e5900080 LDR r0,[r0,#0x80]
000b0c e1a01000 MOV r1,r0
000b10 e28f0f4d ADR r0,|L1.3148|
000b14 ebfffffe BL Uart_Printf
;;;580
;;;581 //rMISCCR |=(0x67<<3);
;;;582
;;;583 //Uart_Printf("rMISCCR1 = %x\n", rMISCCR);
;;;584
;;;585 rGSTATUS3=(U32)StartPointAfterSleepWakeUp; // mmory control part in startup code.
000b18 e59f013c LDR r0,|L1.3164|
000b1c e3a01456 MOV r1,#0x56000000
000b20 e58100b8 STR r0,[r1,#0xb8]
;;;586 Uart_Printf("\nrGSTATUS(Restart target address after wake-up):%x\n", rGSTATUS3);
000b24 e3a00456 MOV r0,#0x56000000
000b28 e59000b8 LDR r0,[r0,#0xb8]
000b2c e1a01000 MOV r1,r0
000b30 e28f0f4a ADR r0,|L1.3168|
000b34 ebfffffe BL Uart_Printf
;;;587 rGSTATUS4=0xaaaaaaaa;
000b38 e59f0154 LDR r0,|L1.3220|
000b3c e3a01456 MOV r1,#0x56000000
000b40 e58100bc STR r0,[r1,#0xbc]
;;;588
;;;589 Uart_TxEmpty(1); //Wait until UART0 Tx buffer empty.
000b44 e3a00001 MOV r0,#1
000b48 ebfffffe BL Uart_TxEmpty
;;;590
;;;591 ConfigSleepGPIO();
000b4c ebfffffe BL ConfigSleepGPIO
;;;592 ConfigMiscIO();
000b50 ebfffffe BL ConfigMiscIO
;;;593 //Max1718_Set(110);
;;;594
;;;595 rMISCCR=rMISCCR|(3<<0); //Data[31:0] Pull-Up Disable
000b54 e3a00456 MOV r0,#0x56000000
000b58 e5900080 LDR r0,[r0,#0x80]
000b5c e3800003 ORR r0,r0,#3
000b60 e3a01456 MOV r1,#0x56000000
000b64 e5810080 STR r0,[r1,#0x80]
;;;596 Lcd_EnvidOnOff(0); //LCD must be off before entering Sleep mode.
000b68 e3a00000 MOV r0,#0
000b6c ebfffffe BL Lcd_EnvidOnOff
;;;597
;;;598 //rMISCCR = (rMISCCR & ~(0x1f<<20)) | (6<<20); // set 6.
;;;599
;;;600 //===================================================
;;;601 // VERY IMPORTANT NOTE
;;;602 // To enter SLEEP/SLIDLE mode, MMU TLB-fill operation should be prohibited
;;;603 // because MTT table is in SDRAM and SDRAM is in the self-refresh mode.
;;;604 // So, we will fill TLB before entering SDRAM self-refresh
;;;605 // instead of disabling MMU.
;;;606 rREFRESH;//To fill TLB for the special register used in EnterPWDN
000b70 e3a00448 MOV r0,#0x48000000
000b74 e5900024 LDR r0,[r0,#0x24]
;;;607 rCLKCON;
000b78 e3a0044c MOV r0,#0x4c000000
000b7c e590000c LDR r0,[r0,#0xc]
;;;608 //===================================================
;;;609
;;;610 EnterPWDN(0xffff8); //Sleep Mode
000b80 e59f0110 LDR r0,|L1.3224|
000b84 e3a01020 MOV r1,#0x20
000b88 e1a0e00f MOV lr,pc
000b8c e1a0f001 MOV pc,r1
;;;611 //Never return here.
;;;612
;;;613 }
000b90 e8bd8038 LDMFD sp!,{r3-r5,pc}
|L1.2964|
000b94 0000000c DCD ||.bss$2|| + 12
|L1.2968|
000b98 000009ff DCD 0x000009ff
|L1.2972|
000b9c 00000004 DCD ||.bss$2|| + 4
|L1.2976|
000ba0 00000008 DCD ||.bss$2|| + 8
|L1.2980|
000ba4 656c535b DCB "[Sle"
000ba8 4d207065 DCB "ep M"
000bac 2065646f DCB "ode "
000bb0 74736554 DCB "Test"
000bb4 00000a5d DCB "]\n\0\0"
|L1.3000|
000bb8 00000000 DCD Eint0Int
|L1.3004|
000bbc 31fff000 DCD 0x31fff000
|L1.3008|
000bc0 00000000 DCD Eint8_23Int
|L1.3012|
000bc4 00000000 DCD AlarmInt
|L1.3016|
000bc8 616c410a DCB "\nAla"
000bcc 57206d72 DCB "rm W"
000bd0 2d656b61 DCB "ake-"
000bd4 28207055 DCB "Up ("
000bd8 296e2f79 DCB "y/n)"
000bdc 0000203f DCB "? \0\0"
|L1.3040|
000be0 4333530a DCB "\nS3C"
000be4 32343432 DCB "2442"
000be8 6c697720 DCB " wil"
000bec 6177206c DCB "l wa"
000bf0 7520656b DCB "ke u"
000bf4 79622070 DCB "p by"
000bf8 43545220 DCB " RTC"
000bfc 616c6120 DCB " ala"
000c00 31286d72 DCB "rm(1"
000c04 65732030 DCB "0 se"
000c08 6f202963 DCB "c) o"
000c0c 49452072 DCB "r EI"
000c10 2030544e DCB "NT0 "
000c14 00000a2e DCB ".\n\0\0"
|L1.3096|
000c18 7375500a DCB "\nPus"
000c1c 49452068 DCB "h EI"
000c20 2030544e DCB "NT0 "
000c24 74747562 DCB "butt"
000c28 66206e6f DCB "on f"
000c2c 7720726f DCB "or w"
000c30 2d656b61 DCB "ake-"
000c34 66207075 DCB "up f"
000c38 206d6f72 DCB "rom "
000c3c 65656c73 DCB "slee"
000c40 6f6d2070 DCB "p mo"
000c44 0a2e6564 DCB "de.\n"
000c48 00000000 DCB "\0\0\0\0"
|L1.3148|
000c4c 494d720a DCB "\nrMI"
000c50 52434353 DCB "SCCR"
000c54 203d2030 DCB "0 = "
000c58 000a7825 DCB "%x\n\0"
|L1.3164|
000c5c 00000000 DCD StartPointAfterSleepWakeUp
|L1.3168|
000c60 5347720a DCB "\nrGS"
000c64 55544154 DCB "TATU"
000c68 65522853 DCB "S(Re"
000c6c 72617473 DCB "star"
000c70 61742074 DCB "t ta"
000c74 74656772 DCB "rget"
000c78 64646120 DCB " add"
000c7c 73736572 DCB "ress"
000c80 74666120 DCB " aft"
000c84 77207265 DCB "er w"
000c88 2d656b61 DCB "ake-"
000c8c 3a297075 DCB "up):"
000c90 000a7825 DCB "%x\n\0"
|L1.3220|
000c94 aaaaaaaa DCD 0xaaaaaaaa
|L1.3224|
000c98 000ffff8 DCD 0x000ffff8
ENDP
Check_SleepWakeUp PROC
;;;413 void Check_SleepWakeUp(void)
;;;414 {
000c9c e92d4008 STMFD sp!,{r3,lr}
;;;415 Uart_Printf("[Sleep related registers]\n");
000ca0 e28f0f58 ADR r0,|L1.3592|
000ca4 ebfffffe BL Uart_Printf
;;;416
;;;417 Uart_Printf("GSTATUS2: PWRST=%d OFFRST=%d WDTRST=%d\n",
000ca8 e3a00456 MOV r0,#0x56000000
000cac e59000b4 LDR r0,[r0,#0xb4]
000cb0 e3a0c001 MOV r12,#1
000cb4 e00c3120 AND r3,r12,r0,LSR #2
000cb8 e3a00456 MOV r0,#0x56000000
000cbc e59000b4 LDR r0,[r0,#0xb4]
000cc0 e3a0c001 MOV r12,#1
000cc4 e00c20a0 AND r2,r12,r0,LSR #1
000cc8 e3a00456 MOV r0,#0x56000000
000ccc e59000b4 LDR r0,[r0,#0xb4]
000cd0 e2001001 AND r1,r0,#1
000cd4 e28f0f52 ADR r0,|L1.3620|
000cd8 ebfffffe BL Uart_Printf
;;;418 (rGSTATUS2&(1<<0))!=0,
;;;419 (rGSTATUS2&(1<<1))!=0,
;;;420 (rGSTATUS2&(1<<2))!=0);
;;;421 Uart_Printf("GSTATUS2:%x, GSTATUS2\n");
000cdc e28f0f5a ADR r0,|L1.3660|
000ce0 ebfffffe BL Uart_Printf
;;;422 Uart_Printf("GSTATUS3:%x(0x0,0x%x), GSTATUS4=%x(0x0,0xaaaaaaaa)\n",
000ce4 e3a00456 MOV r0,#0x56000000
000ce8 e59000bc LDR r0,[r0,#0xbc]
000cec e1a03000 MOV r3,r0
000cf0 e3a00456 MOV r0,#0x56000000
000cf4 e59000b8 LDR r0,[r0,#0xb8]
000cf8 e1a01000 MOV r1,r0
000cfc e51f20a8 LDR r2,|L1.3164|
000d00 e28f0f57 ADR r0,|L1.3684|
000d04 ebfffffe BL Uart_Printf
;;;423 rGSTATUS3,(U32)StartPointAfterSleepWakeUp, rGSTATUS4);
;;;424
;;;425 if(rGSTATUS2&(1<<0))
000d08 e3a00456 MOV r0,#0x56000000
000d0c e59000b4 LDR r0,[r0,#0xb4]
000d10 e3100001 TST r0,#1
000d14 0a000008 BEQ |L1.3388|
;;;426 {
;;;427 Uart_Printf("Power On Reset\n\n");
000d18 e28f0f5e ADR r0,|L1.3736|
000d1c ebfffffe BL Uart_Printf
;;;428 rGSTATUS2=(1<<0);
000d20 e3a00001 MOV r0,#1
000d24 e3a01456 MOV r1,#0x56000000
000d28 e58100b4 STR r0,[r1,#0x
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -