📄 sleep.txt
字号:
;;;217 int i;
;;;218
;;;219 if(rALIVECON & 1<<3)//Wake-up from SLEEP mode
00059c e51f04f8 LDR r0,|L1.172|
0005a0 e5900044 LDR r0,[r0,#0x44]
0005a4 e3100008 TST r0,#8
0005a8 0a00001e BEQ |L1.1576|
;;;220 {
;;;221 #if CHECK_SDRAM_SELFREFRESH
;;;222 Test_CheckSDRAM(_NONCACHE_STARTADDRESS,0x400000); //Check NONCACHEABLE AREA
0005ac e3a01840 MOV r1,#0x400000
0005b0 e3a00544 MOV r0,#0x11000000
0005b4 ebfffffe BL Test_CheckSDRAM
;;;223 #endif
;;;224
;;;225 Uart_Printf("AC97Codec is going to Normal mode, now.\n");
0005b8 e28f0fd6 ADR r0,|L1.2328|
0005bc ebfffffe BL _printf
;;;226 AC97_Init();
0005c0 ebfffffe BL AC97_Init
;;;227 AC97_Codec_Init(22050);
0005c4 e59f0378 LDR r0,|L1.2372|
0005c8 ebfffffe BL AC97_Codec_Init
;;;228
;;;229 Clear_SleepKey();
0005cc ebfffffe BL Clear_SleepKey
;;;230
;;;231 Uart_Printf("Wake-up from SLEEP mode\n");
0005d0 e28f0fdc ADR r0,|L1.2376|
0005d4 ebfffffe BL _printf
;;;232 //Uart_Printf("Check whether or not the interrupt pending bit retain the wake-up source.\n");
;;;233
;;;234 #if 1
;;;235 //Unmask interrupt
;;;236 if(rEINTPEND&(1<<19))// The RTC does not request INT, only wake the CPU up from sleep mode.
0005d8 e51f0534 LDR r0,|L1.172|
0005dc e5900038 LDR r0,[r0,#0x38]
0005e0 e3100a80 TST r0,#0x80000
0005e4 0a000001 BEQ |L1.1520|
;;;237 Uart_Printf("\nALARM for SLEEP mode wake-up.\n\n");
0005e8 e28f0fdd ADR r0,|L1.2404|
0005ec ebfffffe BL _printf
;;;238
;;;239 //rINTMSK=rINTMSK&~(BIT_EINT7_10);
;;;240 rINTMSK=rINTMSK&~(BIT_EINT0_2);
|L1.1520|
0005f0 e51f04e8 LDR r0,|L1.272|
0005f4 e5900008 LDR r0,[r0,#8]
0005f8 e3c00001 BIC r0,r0,#1
0005fc e51f14f4 LDR r1,|L1.272|
000600 e5810008 STR r0,[r1,#8]
;;;241 rEINTMASK=rEINTMASK&~(BIT_EINTPEND_EINT0);
000604 e2810646 ADD r0,r1,#0x4600000
000608 e5900034 LDR r0,[r0,#0x34]
00060c e3c00001 BIC r0,r0,#1
000610 e2811646 ADD r1,r1,#0x4600000
000614 e5810034 STR r0,[r1,#0x34]
;;;242 /*
;;;243 //Unmask sub interrupt
;;;244 rEINTMASK=rEINTMASK&~(BIT_EINTPEND_EINT0);
;;;245 rEINTMASK=rEINTMASK&~(BIT_EINTPEND_EINT1);
;;;246 rEINTMASK=rEINTMASK&~(BIT_EINTPEND_EINT10);
;;;247 rEINTMASK=rEINTMASK&~(BIT_EINTPEND_EINT11);
;;;248 //for(i=0;i<100;i++);
;;;249 */
;;;250 #endif
;;;251 Port_Init();
000618 ebfffffe BL Port_Init
;;;252 Uart_Printf("SLEEP mode test is done\n");
00061c e28f0fd9 ADR r0,|L1.2440|
000620 ebfffffe BL _printf
000624 ea000123 B |L1.2744|
;;;253 }
;;;254 else//Entering into SLEEP mode
;;;255 {
;;;256 Uart_Printf("[SLEEP Mode Test]\n");
|L1.1576|
000628 e28f0fdd ADR r0,|L1.2468|
00062c ebfffffe BL _printf
;;;257 Uart_Printf("nBATT_FLT pin should be tested.\n");
000630 e28f0fe0 ADR r0,|L1.2488|
000634 ebfffffe BL _printf
;;;258
;;;259 LcdEnvidOnOff(0); //Before entering SLEEP mode, LCD must be off
000638 e3a00000 MOV r0,#0
00063c ebfffffe BL LcdEnvidOnOff
;;;260 Delay(1);
000640 e3a00001 MOV r0,#1
000644 ebfffffe BL Delay
;;;261
;;;262 Uart_Printf("Entering into SLEEP mode\n");
000648 e28f0fe3 ADR r0,|L1.2524|
00064c ebfffffe BL _printf
;;;263 Uart_Printf("S3C24A0 will wake up by EINT0/1/9 or RTC alarm.\n");
000650 e28f0fe8 ADR r0,|L1.2552|
000654 ebfffffe BL _printf
;;;264
;;;265 //Write SLEEP information into BACKUP AREA
;;;266 Set_SleepKey();
000658 ebfffffe BL Set_SleepKey
;;;267 //Test_InitSDRAM((_BACKUPFORSLEEP_STARTADDRESS+0x50), 0x100000); //Write test data into BACKUP AREA
;;;268
;;;269 #if CHECK_SDRAM_SELFREFRESH
;;;270 Test_InitSDRAM(_NONCACHE_STARTADDRESS,0x400000); //Write test data into NONCACHEABLE AREA
00065c e3a01840 MOV r1,#0x400000
000660 e3a00544 MOV r0,#0x11000000
000664 ebfffffe BL Test_InitSDRAM
;;;271 #endif
;;;272
;;;273 ConfigSleepGPIO();
000668 ebfffffe BL ConfigSleepGPIO
;;;274
;;;275 //Wake-up(EINT0)
;;;276 #if CHOOSE_EINT0_TYPE
;;;277 SelectEintType();
;;;278 #else
;;;279 rGPCON_L= ( rGPCON_L & ~(3<<0) ) | (2<<0); //GP0=EINT0
00066c e51f05c8 LDR r0,|L1.172|
000670 e5900008 LDR r0,[r0,#8]
000674 e3c00003 BIC r0,r0,#3
000678 e3800002 ORR r0,r0,#2
00067c e51f15d8 LDR r1,|L1.172|
000680 e5810008 STR r0,[r1,#8]
;;;280 rEXTINTC0=rEXTINTC0&~(7<<0)|(2<<0); //EINT0=falling edge triggered
000684 e1a00001 MOV r0,r1
000688 e5900018 LDR r0,[r0,#0x18]
00068c e3c00007 BIC r0,r0,#7
000690 e3800002 ORR r0,r0,#2
000694 e5810018 STR r0,[r1,#0x18]
;;;281 #endif
;;;282
;;;283 //Wake-up(EINT1)
;;;284 rGPCON_L=rGPCON_L&~(3<<2)|(2<<2); //GP1=EINT1
000698 e1a00001 MOV r0,r1
00069c e5900008 LDR r0,[r0,#8]
0006a0 e3c0000c BIC r0,r0,#0xc
0006a4 e3800008 ORR r0,r0,#8
0006a8 e5810008 STR r0,[r1,#8]
;;;285 rEXTINTC0=rEXTINTC0&~(7<<4)|(2<<4); //EINT0=falling edge triggered
0006ac e1a00001 MOV r0,r1
0006b0 e5900018 LDR r0,[r0,#0x18]
0006b4 e3c00070 BIC r0,r0,#0x70
0006b8 e3800020 ORR r0,r0,#0x20
0006bc e5810018 STR r0,[r1,#0x18]
;;;286
;;;287 //Wake-up(EINT9)
;;;288 rGPCON_L=rGPCON_L&~(3<<20)|(2<<18); //GP9=EINT9
0006c0 e1a00001 MOV r0,r1
0006c4 e5900008 LDR r0,[r0,#8]
0006c8 e3c009c0 BIC r0,r0,#0x300000
0006cc e3800a80 ORR r0,r0,#0x80000
0006d0 e5810008 STR r0,[r1,#8]
;;;289 rEXTINTC1=rEXTINTC1&~(7<<28)|(2<<24); //EINT9=falling edge triggered
0006d4 e1a00001 MOV r0,r1
0006d8 e590001c LDR r0,[r0,#0x1c]
0006dc e3c00470 BIC r0,r0,#0x70000000
0006e0 e3800780 ORR r0,r0,#0x2000000
0006e4 e581001c STR r0,[r1,#0x1c]
;;;290
;;;291 //To test.... EINT11 can not wake-up the S3C24A0 from Sleep mode
;;;292 rGPCON_M=rGPCON_M&~(3<<0)|(2<<0); //GP11=EINT11
0006e8 e1a00001 MOV r0,r1
0006ec e5900004 LDR r0,[r0,#4]
0006f0 e3c00003 BIC r0,r0,#3
0006f4 e3800002 ORR r0,r0,#2
0006f8 e5810004 STR r0,[r1,#4]
;;;293 rEXTINTC2=rEXTINTC2&~(7<<0)|(2<<0); //EINT11=falling edge triggered
0006fc e1a00001 MOV r0,r1
000700 e5900020 LDR r0,[r0,#0x20]
000704 e3c00007 BIC r0,r0,#7
000708 e3800002 ORR r0,r0,#2
00070c e5810020 STR r0,[r1,#0x20]
;;;294
;;;295 rEXTINTC0=0x222;
000710 e59f0314 LDR r0,|L1.2604|
000714 e1c11000 BIC r1,r1,r0
000718 e5810018 STR r0,[r1,#0x18]
;;;296 rEXTINTC1=0x2222222;
00071c e59f030c LDR r0,|L1.2608|
000720 e1c11000 BIC r1,r1,r0
000724 e581001c STR r0,[r1,#0x1c]
;;;297 rEXTINTC2=0x22222222;
000728 e1800200 ORR r0,r0,r0,LSL #4
00072c e1c11000 BIC r1,r1,r0
000730 e5810020 STR r0,[r1,#0x20]
;;;298
;;;299 //Interrupt service routine
;;;300 pISR_EINT0_2=(U32)EintInt;
000734 e59f02f8 LDR r0,|L1.2612|
000738 e59f12f8 LDR r1,|L1.2616|
00073c e5810f20 STR r0,[r1,#0xf20]
;;;301 pISR_RTC=(U32)AlarmInt;
000740 e59f02f4 LDR r0,|L1.2620|
000744 e5810f98 STR r0,[r1,#0xf98]
;;;302 pISR_EINT7_10=(U32)Eint9Int;
000748 e59f02f0 LDR r0,|L1.2624|
00074c e5810f28 STR r0,[r1,#0xf28]
;;;303 pISR_EINT11_14=(U32)Eint11Int;
000750 e59f02ec LDR r0,|L1.2628|
000754 e5810f2c STR r0,[r1,#0xf2c]
;;;304
;;;305 //Clear sub interrupt pending
;;;306 rEINTPEND=BIT_EINTPEND_EINT11;
000758 e3a00e80 MOV r0,#0x800
00075c e51f16b8 LDR r1,|L1.172|
000760 e5810038 STR r0,[r1,#0x38]
;;;307 rEINTPEND=BIT_EINTPEND_EINT9;
000764 e3a00f80 MOV r0,#0x200
000768 e1c11000 BIC r1,r1,r0
00076c e5810038 STR r0,[r1,#0x38]
;;;308 rEINTPEND=BIT_EINTPEND_EINT1;
000770 e3a00002 MOV r0,#2
000774 e1c11000 BIC r1,r1,r0
000778 e5810038 STR r0,[r1,#0x38]
;;;309 rEINTPEND=BIT_EINTPEND_EINT0;
00077c e3a00001 MOV r0,#1
000780 e1c11000 BIC r1,r1,r0
000784 e5810038 STR r0,[r1,#0x38]
;;;310 rEINTPEND=BIT_EINTPEND_PWMKUP;
000788 e3a00a80 MOV r0,#0x80000
00078c e1c11000 BIC r1,r1,r0
000790 e5810038 STR r0,[r1,#0x38]
;;;311 rEINTPEND=BIT_EINTPEND_ALLMSK;
000794 e51f0284 LDR r0,|L1.1304|
000798 e1c11000 BIC r1,r1,r0
00079c e5810038 STR r0,[r1,#0x38]
;;;312
;;;313 //Clear interrupt pending
;;;314 ClearPending(BIT_EINT11_14);
0007a0 e3a00008 MOV r0,#8
0007a4 e2411646 SUB r1,r1,#0x4600000
0007a8 e5810000 STR r0,[r1,#0]
0007ac e1c10000 BIC r0,r1,r0
0007b0 e5900010 LDR r0,[r0,#0x10]
0007b4 e5810010 STR r0,[r1,#0x10]
0007b8 e1a00001 MOV r0,r1
0007bc e5900010 LDR r0,[r0,#0x10]
;;;315 ClearPending(BIT_EINT7_10);
0007c0 e3a00004 MOV r0,#4
0007c4 e1c11000 BIC r1,r1,r0
0007c8 e5810000 STR r0,[r1,#0]
0007cc e1c10000 BIC r0,r1,r0
0007d0 e5900010 LDR r0,[r0,#0x10]
0007d4 e5810010 STR r0,[r1,#0x10]
0007d8 e1a00001 MOV r0,r1
0007dc e5900010 LDR r0,[r0,#0x10]
;;;316 ClearPending(BIT_EINT0_2);
0007e0 e3a00001 MOV r0,#1
0007e4 e1c11000 BIC r1,r1,r0
0007e8 e5810000 STR r0,[r1,#0]
0007ec e1c10000 BIC r0,r1,r0
0007f0 e5900010 LDR r0,[r0,#0x10]
0007f4 e5810010 STR r0,[r1,#0x10]
0007f8 e1a00001 MOV r0,r1
0007fc e5900010 LDR r0,[r0,#0x10]
;;;317 ClearPending(BIT_RTC);
000800 e3a00440 MOV r0,#0x40000000
000804 e18014c0 ORR r1,r0,r0,ASR #9
000808 e5810000 STR r0,[r1,#0]
00080c e18004c0 ORR r0,r0,r0,ASR #9
000810 e5900010 LDR r0,[r0,#0x10]
000814 e5810010 STR r0,[r1,#0x10]
000818 e1a00001 MOV r0,r1
00081c e5900010 LDR r0,[r0,#0x10]
;;;318
;;;319 #if 1
;;;320 //Unmask interrupt
;;;321 rINTMSK=rINTMSK&~(BIT_EINT11_14); //Just testing....
000820 e1a00001 MOV r0,r1
000824 e5900008 LDR r0,[r0,#8]
000828 e3c00008 BIC r0,r0,#8
00082c e5810008 STR r0,[r1,#8]
;;;322 rINTMSK=rINTMSK&~(BIT_EINT7_10);
000830 e1a00001 MOV r0,r1
000834 e5900008 LDR r0,[r0,#8]
000838 e3c00004 BIC r0,r0,#4
00083c e5810008 STR r0,[r1,#8]
;;;323 rINTMSK=rINTMSK&~(BIT_EINT0_2);
000840 e1a00001 MOV r0,r1
000844 e5900008 LDR r0,[r0,#8]
000848 e3c00001 BIC r0,r0,#1
00084c e5810008 STR r0,[r1,#8]
;;;324 rINTMSK=rINTMSK&~(BIT_RTC); //Just testing....
000850 e1a00001 MOV r0,r1
000854 e5900008 LDR r0,[r0,#8]
000858 e3c00440 BIC r0,r0,#0x40000000
00085c e5810008 STR r0,[r1,#8]
;;;325
;;;326 //Unmask sub interrupt
;;;327 rEINTMASK=rEINTMASK&~(BIT_EINTPEND_EINT0);
000860 e2810646 ADD r0,r1,#0x4600000
000864 e5900034 LDR r0,[r0,#0x34]
000868 e3c00001 BIC r0,r0,#1
00086c e2811646 ADD r1,r1,#0x4600000
000870 e5810034 STR r0,[r1,#0x34]
;;;328 rEINTMASK=rEINTMASK&~(BIT_EINTPEND_EINT1);
000874 e1a00001 MOV r0,r1
000878 e5900034 LDR r0,[r0,#0x34]
00087c e3c00002 BIC r0,r0,#2
000880 e5810034 STR r0,[r1,#0x34]
;;;329 rEINTMASK=rEINTMASK&~(BIT_EINTPEND_EINT9);
000884 e1a00001 MOV r0,r1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -