📄 rtc.txt
字号:
000624 e3500000 CMP r0,#0
000628 1a000004 BNE |L1.1600|
;;;85 {
;;;86 Rtc_Init();
00062c ebfffffe BL Rtc_Init
;;;87 isInit = 2;
000630 e3a00002 MOV r0,#2
000634 e59f1120 LDR r1,|L1.1884|
000638 e5810000 STR r0,[r1,#0] ; isInit
00063c ea000007 B |L1.1632|
;;;88 }
;;;89
;;;90 else if(isInit == 1)
|L1.1600|
000640 e59f0114 LDR r0,|L1.1884|
000644 e5900000 LDR r0,[r0,#0] ; isInit
000648 e3500001 CMP r0,#1
00064c 1a000003 BNE |L1.1632|
;;;91 {
;;;92 Rtc_TimeSet();
000650 ebfffffe BL Rtc_TimeSet
;;;93 isInit = 2;
000654 e3a00002 MOV r0,#2
000658 e59f10fc LDR r1,|L1.1884|
00065c e5810000 STR r0,[r1,#0] ; isInit
;;;94 }
;;;95
;;;96 rRTCCON = 0x01; //No reset, Merge BCD counters, 1/32768, RTC Control enable
|L1.1632|
000660 e3a00001 MOV r0,#1
000664 e3a01457 MOV r1,#0x57000000
000668 e5c10040 STRB r0,[r1,#0x40]
;;;97 // Uart_Printf("This test should be excuted once RTC test(Alarm) for RTC initialization\n");
;;;98 Uart_Printf("Press any key to exit.\n\n");
00066c e28f00ec ADR r0,|L1.1888|
000670 ebfffffe BL Uart_Printf
;;;99 while(!Uart_GetKey())
000674 e1a00000 NOP
|L1.1656|
000678 ebfffffe BL Uart_GetKey
00067c e3500000 CMP r0,#0
000680 1a000025 BNE |L1.1820|
;;;100 {
;;;101 while(1)
000684 e1a00000 NOP
|L1.1672|
000688 e1a00000 NOP
;;;102 {
;;;103 if(rBCDYEAR == 0x99)
00068c e3a00457 MOV r0,#0x57000000
000690 e5d00088 LDRB r0,[r0,#0x88]
000694 e3500099 CMP r0,#0x99
000698 1a000001 BNE |L1.1700|
;;;104 year = 0x1999;
00069c e59f50d8 LDR r5,|L1.1916|
0006a0 ea000002 B |L1.1712|
;;;105 else
;;;106 year = 0x2000 + rBCDYEAR;
|L1.1700|
0006a4 e3a00457 MOV r0,#0x57000000
0006a8 e5d00088 LDRB r0,[r0,#0x88]
0006ac e2805d80 ADD r5,r0,#0x2000
;;;107 month = rBCDMON;
|L1.1712|
0006b0 e3a00457 MOV r0,#0x57000000
0006b4 e5d08084 LDRB r8,[r0,#0x84]
;;;108 weekday = rBCDDAY;
0006b8 e3a00457 MOV r0,#0x57000000
0006bc e5d07080 LDRB r7,[r0,#0x80]
;;;109 date = rBCDDATE;
0006c0 e3a00457 MOV r0,#0x57000000
0006c4 e5d0907c LDRB r9,[r0,#0x7c]
;;;110 hour = rBCDHOUR;
0006c8 e3a00457 MOV r0,#0x57000000
0006cc e5d0a078 LDRB r10,[r0,#0x78]
;;;111 min = rBCDMIN;
0006d0 e3a00457 MOV r0,#0x57000000
0006d4 e5d0b074 LDRB r11,[r0,#0x74]
;;;112 sec = rBCDSEC;
0006d8 e3a00457 MOV r0,#0x57000000
0006dc e5d04070 LDRB r4,[r0,#0x70]
;;;113
;;;114 if(sec!=tmp)
0006e0 e1540006 CMP r4,r6
0006e4 0a000001 BEQ |L1.1776|
;;;115 {
;;;116 tmp = sec;
0006e8 e1a06004 MOV r6,r4
;;;117 break;
0006ec ea000000 B |L1.1780|
;;;118 }
;;;119 }
|L1.1776|
0006f0 eaffffe4 B |L1.1672|
;;;120 Uart_Printf("%2x : %2x : %2x %10s, %2x/%2x/%4x\n",hour,min,sec,day[weekday],month,date,year);
|L1.1780|
0006f4 e51f0168 LDR r0,|L1.1428|
0006f8 e7900107 LDR r0,[r0,r7,LSL #2]
0006fc e1a03004 MOV r3,r4
000700 e1a0200b MOV r2,r11
000704 e1a0100a MOV r1,r10
000708 e88d0301 STMIA sp,{r0,r8,r9}
00070c e24f0f56 ADR r0,|L1.1468|
000710 e58d500c STR r5,[sp,#0xc]
000714 ebfffffe BL Uart_Printf
;;;121 // Uart_Printf("%2x : %2x : %2x %9s, %2x/%2x/%4x rBCDDATE = %x, weekday= %x\n",hour,min,sec,day[weekday],month,date,year,rBCDDATE,weekday);
;;;122 }
000718 eaffffd6 B |L1.1656|
;;;123 rRTCCON = 0x0; //No reset, Merge BCD counters, 1/32768, RTC Control disable(for power consumption)
|L1.1820|
00071c e3a00000 MOV r0,#0
000720 e3a01457 MOV r1,#0x57000000
000724 e5c10040 STRB r0,[r1,#0x40]
;;;124 }
000728 e28dd014 ADD sp,sp,#0x14
00072c e8bd8ff0 LDMFD sp!,{r4-r11,pc}
|L1.1840|
000730 6944205b DCB "[ Di"
000734 616c7073 DCB "spla"
000738 54522079 DCB "y RT"
00073c 65542043 DCB "C Te"
000740 5d207473 DCB "st ]"
000744 0000000a DCB "\n\0\0\0"
|L1.1864|
000748 000000bc DCD ||.constdata$1|| + 188
|L1.1868|
00074c 656c6553 DCB "Sele"
000750 203a2074 DCB "t : "
000754 00000000 DCB "\0\0\0\0"
|L1.1880|
000758 00000a0a DCB "\n\n\0\0"
|L1.1884|
00075c 00000000 DCD isInit
|L1.1888|
000760 73657250 DCB "Pres"
000764 6e612073 DCB "s an"
000768 656b2079 DCB "y ke"
00076c 6f742079 DCB "y to"
000770 69786520 DCB " exi"
000774 0a0a2e74 DCB "t.\n\n"
000778 00000000 DCB "\0\0\0\0"
|L1.1916|
00077c 00001999 DCD 0x00001999
ENDP
Rtc_Int PROC
;;;251 void __irq Rtc_Int(void)
;;;252 {
000780 e92d500f STMFD sp!,{r0-r3,r12,lr}
;;;253 rSRCPND = BIT_RTC;
000784 e3a00440 MOV r0,#0x40000000
000788 e3a0144a MOV r1,#0x4a000000
00078c e5810000 STR r0,[r1,#0]
;;;254 rINTPND = BIT_RTC;
000790 e3a00440 MOV r0,#0x40000000
000794 e3a0144a MOV r1,#0x4a000000
000798 e5810010 STR r0,[r1,#0x10]
;;;255 rINTPND;
00079c e3a0044a MOV r0,#0x4a000000
0007a0 e5900010 LDR r0,[r0,#0x10]
;;;256
;;;257 Uart_Printf("RTC Alarm Interrupt O.K.\n");
0007a4 e28f0014 ADR r0,|L1.1984|
0007a8 ebfffffe BL Uart_Printf
;;;258 isRtcInt = 1;
0007ac e3a00001 MOV r0,#1
0007b0 e59f1024 LDR r1,|L1.2012|
0007b4 e5810000 STR r0,[r1,#0] ; isRtcInt
;;;259 }
0007b8 e8bd500f LDMFD sp!,{r0-r3,r12,lr}
0007bc e25ef004 SUBS pc,lr,#4
|L1.1984|
0007c0 20435452 DCB "RTC "
0007c4 72616c41 DCB "Alar"
0007c8 6e49206d DCB "m In"
0007cc 72726574 DCB "terr"
0007d0 20747075 DCB "upt "
0007d4 2e4b2e4f DCB "O.K."
|L1.2008|
0007d8 0000000a DCB "\n\0\0\0"
|L1.2012|
0007dc 00000000 DCD ||.bss$2||
ENDP
Test_Rtc_Alarm PROC
;;;128 void Test_Rtc_Alarm(void)
;;;129 {
0007e0 e92d4008 STMFD sp!,{r3,lr}
;;;130 Uart_Printf("[ RTC Alarm Test for S3C2442 ]\n");
0007e4 e28f00c0 ADR r0,|L1.2220|
0007e8 ebfffffe BL Uart_Printf
;;;131
;;;132 Rtc_Init();
0007ec ebfffffe BL Rtc_Init
;;;133
;;;134 rRTCCON = 0x01; //No reset, Merge BCD counters, 1/32768, RTC Control enable
0007f0 e3a00001 MOV r0,#1
0007f4 e3a01457 MOV r1,#0x57000000
0007f8 e5c10040 STRB r0,[r1,#0x40]
;;;135 rALMYEAR = TESTYEAR2 ;
0007fc e3a00002 MOV r0,#2
000800 e3a01457 MOV r1,#0x57000000
000804 e5c10068 STRB r0,[r1,#0x68]
;;;136 rALMMON = TESTMONTH2;
000808 e3a00001 MOV r0,#1
00080c e3a01457 MOV r1,#0x57000000
000810 e5c10064 STRB r0,[r1,#0x64]
;;;137 rALMDATE = TESTDATE2 ;
000814 e3a00001 MOV r0,#1
000818 e3a01457 MOV r1,#0x57000000
00081c e5c10060 STRB r0,[r1,#0x60]
;;;138 rALMHOUR = TESTHOUR2 ;
000820 e3a00000 MOV r0,#0
000824 e3a01457 MOV r1,#0x57000000
000828 e5c1005c STRB r0,[r1,#0x5c]
;;;139 rALMMIN = TESTMIN2 ;
00082c e3a00000 MOV r0,#0
000830 e3a01457 MOV r1,#0x57000000
000834 e5c10058 STRB r0,[r1,#0x58]
;;;140 rALMSEC = TESTSEC2 + 9;
000838 e3a00009 MOV r0,#9
00083c e3a01457 MOV r1,#0x57000000
000840 e5c10054 STRB r0,[r1,#0x54]
;;;141 Uart_Printf("After 9 sec, alarm interrupt will occur.. \n");
000844 e28f0080 ADR r0,|L1.2252|
000848 ebfffffe BL Uart_Printf
;;;142
;;;143 isRtcInt = 0;
00084c e3a00000 MOV r0,#0
000850 e51f107c LDR r1,|L1.2012|
000854 e5810000 STR r0,[r1,#0] ; isRtcInt
;;;144 pISR_RTC = (unsigned int)Rtc_Int;
000858 e59f0098 LDR r0,|L1.2296|
00085c e59f1098 LDR r1,|L1.2300|
000860 e5810f98 STR r0,[r1,#0xf98]
;;;145 rRTCALM = 0x7f; //Global,Year,Month,Day,Hour,Minute,Second alarm enable
000864 e3a0007f MOV r0,#0x7f
000868 e3a01457 MOV r1,#0x57000000
00086c e5c10050 STRB r0,[r1,#0x50]
;;;146 rRTCCON = 0x0; //No reset, Merge BCD counters, 1/32768, RTC Control disable
000870 e3a00000 MOV r0,#0
000874 e3a01457 MOV r1,#0x57000000
000878 e5c10040 STRB r0,[r1,#0x40]
;;;147 rINTMSK = ~(BIT_RTC);
00087c e3e00440 MVN r0,#0x40000000
000880 e3a0144a MOV r1,#0x4a000000
000884 e5810008 STR r0,[r1,#8]
;;;148
;;;149 while(isRtcInt==0);
000888 e1a00000 NOP
|L1.2188|
00088c e51f00b8 LDR r0,|L1.2012|
000890 e5900000 LDR r0,[r0,#0] ; isRtcInt
000894 e3500000 CMP r0,#0
000898 0afffffb BEQ |L1.2188|
;;;150
;;;151 rINTMSK = BIT_ALLMSK;
00089c e3e00000 MVN r0,#0
0008a0 e3a0144a MOV r1,#0x4a000000
0008a4 e5810008 STR r0,[r1,#8]
;;;152 // rRTCCON = 0x0; //RTC Control disable(for power consumption), 1/32768, Normal(merge), No reset
;;;153 }
0008a8 e8bd8008 LDMFD sp!,{r3,pc}
|L1.2220|
0008ac 5452205b DCB "[ RT"
0008b0 6c412043 DCB "C Al"
0008b4 206d7261 DCB "arm "
0008b8 74736554 DCB "Test"
0008bc 726f6620 DCB " for"
0008c0 43335320 DCB " S3C"
0008c4 32343432 DCB "2442"
0008c8 000a5d20 DCB " ]\n\0"
|L1.2252|
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -