📄 rtc_test.txt
字号:
;;;146 void RndRst_Rtc(void)
;;;147 {
0006b0 e92d4ff0 STMFD sp!,{r4-r11,lr}
0006b4 e24dd014 SUB sp,sp,#0x14
;;;148 int year;
;;;149 int month,date,weekday,hour,min,sec,tmp;
;;;150
;;;151 // modified by ows
;;;152 rGPCON_L=rGPCON_L&~(3<<0)|(2<<0); //GP0=EINT0
0006b8 e51f0048 LDR r0,|L1.1656|
0006bc e5900008 LDR r0,[r0,#8]
0006c0 e3c00003 BIC r0,r0,#3
0006c4 e3800002 ORR r0,r0,#2
0006c8 e51f1058 LDR r1,|L1.1656|
0006cc e5810008 STR r0,[r1,#8]
;;;153 rEXTINTC0=rEXTINTC0&~(7<<0)|(2<<0); //EINT0=falling edge triggered
0006d0 e1a00001 MOV r0,r1
0006d4 e5900018 LDR r0,[r0,#0x18]
0006d8 e3c00007 BIC r0,r0,#7
0006dc e3800002 ORR r0,r0,#2
0006e0 e5810018 STR r0,[r1,#0x18]
;;;154
;;;155 if(isInit==0)
0006e4 e51f012c LDR r0,|L1.1472|
0006e8 e5900000 LDR r0,[r0,#0] ; isInit
0006ec e3500000 CMP r0,#0
0006f0 1a000003 BNE |L1.1796|
;;;156 {
;;;157 Rtc_Init();
0006f4 ebfffffe BL Rtc_Init
;;;158 isInit = 1;
0006f8 e3a00001 MOV r0,#1
0006fc e51f1144 LDR r1,|L1.1472|
000700 e5810000 STR r0,[r1,#0] ; isInit
;;;159 }
;;;160
;;;161 rRTCCON = 0x01; //No reset, Merge BCD counters, 1/32768, RTC Control enable
|L1.1796|
000704 e3a00001 MOV r0,#1
000708 e51f1414 LDR r1,|L1.764|
00070c e5c10040 STRB r0,[r1,#0x40]
;;;162 Uart_Printf("Press any key to exit.\n\n");
000710 e28f00e4 ADR r0,|L1.2044|
000714 ebfffffe BL _printf
;;;163 Uart_Printf("Press EINT0 key to test round reset.\n");
000718 e28f00f8 ADR r0,|L1.2072|
00071c ebfffffe BL _printf
;;;164
;;;165 // modified by ows
;;;166 rINTMSK=rINTMSK&~(BIT_EINT0_2);
000720 e59f0118 LDR r0,|L1.2112|
000724 e5900008 LDR r0,[r0,#8]
000728 e3c00001 BIC r0,r0,#1
00072c e59f110c LDR r1,|L1.2112|
000730 e5810008 STR r0,[r1,#8]
;;;167 rEINTMASK=rEINTMASK&~(BIT_EINTPEND_EINT0);
000734 e2810646 ADD r0,r1,#0x4600000
000738 e5900034 LDR r0,[r0,#0x34]
00073c e3c00001 BIC r0,r0,#1
000740 e2811646 ADD r1,r1,#0x4600000
000744 e5810034 STR r0,[r1,#0x34]
;;;168
;;;169 pISR_EINT0_2 = (unsigned int)EINT0_int;
000748 e59f00f4 LDR r0,|L1.2116|
00074c e59f10f4 LDR r1,|L1.2120|
000750 e5810f20 STR r0,[r1,#0xf20]
;;;170
;;;171 while(!Uart_GetKey())
000754 e1a00000 NOP
|L1.1880|
000758 ebfffffe BL Uart_GetKey
00075c e3500000 CMP r0,#0
000760 1a000020 BNE |L1.2024|
;;;172 {
;;;173 while(1)
000764 e1a00000 NOP
|L1.1896|
000768 e1a00000 NOP
;;;174 {
;;;175 if(rBCDYEAR == 0x99)
00076c e51f0478 LDR r0,|L1.764|
000770 e5d00088 LDRB r0,[r0,#0x88]
000774 e3500099 CMP r0,#0x99
000778 1a000001 BNE |L1.1924|
;;;176 year = 0x1999;
00077c e51f51b0 LDR r5,|L1.1492|
000780 ea000002 B |L1.1936|
;;;177 else
;;;178 year = 0x2000 + rBCDYEAR;
|L1.1924|
000784 e51f0490 LDR r0,|L1.764|
000788 e5d00088 LDRB r0,[r0,#0x88]
00078c e2805d80 ADD r5,r0,#0x2000
;;;179 month = rBCDMON;
|L1.1936|
000790 e51f049c LDR r0,|L1.764|
000794 e5d08084 LDRB r8,[r0,#0x84]
;;;180 weekday = rBCDDAY;
000798 e5d06080 LDRB r6,[r0,#0x80]
;;;181 date = rBCDDATE;
00079c e5d0907c LDRB r9,[r0,#0x7c]
;;;182 hour = rBCDHOUR;
0007a0 e5d0a078 LDRB r10,[r0,#0x78]
;;;183 min = rBCDMIN;
0007a4 e5d0b074 LDRB r11,[r0,#0x74]
;;;184 sec = rBCDSEC;
0007a8 e5d04070 LDRB r4,[r0,#0x70]
;;;185
;;;186 if(sec!=tmp)
0007ac e1540007 CMP r4,r7
0007b0 0a000001 BEQ |L1.1980|
;;;187 {
;;;188 tmp = sec;
0007b4 e1a07004 MOV r7,r4
;;;189 break;
0007b8 ea000000 B |L1.1984|
;;;190 }
;;;191 }
|L1.1980|
0007bc eaffffe9 B |L1.1896|
;;;192 Uart_Printf("%2x : %2x : %2x %10s, %2x/%2x/%4x\n",hour,min,sec,day[weekday],month,date,year);
|L1.1984|
0007c0 e51f01f0 LDR r0,|L1.1496|
0007c4 e7900106 LDR r0,[r0,r6,LSL #2]
0007c8 e1a03004 MOV r3,r4
0007cc e1a0200b MOV r2,r11
0007d0 e1a0100a MOV r1,r10
0007d4 e88d0301 STMIA sp,{r0,r8,r9}
0007d8 e24f0f81 ADR r0,|L1.1500|
0007dc e58d500c STR r5,[sp,#0xc]
0007e0 ebfffffe BL _printf
;;;193 }
0007e4 eaffffdb B |L1.1880|
;;;194 rRTCCON = 0x0; //No reset, Merge BCD counters, 1/32768, RTC Control disable
|L1.2024|
0007e8 e3a00000 MOV r0,#0
0007ec e51f14f8 LDR r1,|L1.764|
0007f0 e5c10040 STRB r0,[r1,#0x40]
;;;195 }
0007f4 e28dd014 ADD sp,sp,#0x14
0007f8 e8bd8ff0 LDMFD sp!,{r4-r11,pc}
|L1.2044|
0007fc 73657250 DCB "Pres"
000800 6e612073 DCB "s an"
000804 656b2079 DCB "y ke"
000808 6f742079 DCB "y to"
00080c 69786520 DCB " exi"
000810 0a0a2e74 DCB "t.\n\n"
000814 00000000 DCB "\0\0\0\0"
|L1.2072|
000818 73657250 DCB "Pres"
00081c 49452073 DCB "s EI"
000820 2030544e DCB "NT0 "
000824 2079656b DCB "key "
000828 74206f74 DCB "to t"
00082c 20747365 DCB "est "
000830 6e756f72 DCB "roun"
000834 65722064 DCB "d re"
000838 2e746573 DCB "set."
00083c 0000000a DCB "\n\0\0\0"
|L1.2112|
000840 40200000 DCD 0x40200000
|L1.2116|
000844 00000000 DCD EINT0_int
|L1.2120|
000848 13fff000 DCD 0x13fff000
ENDP
Rtc_Int PROC
;;;365 void __irq Rtc_Int(void)
;;;366 {
00084c e92d500f STMFD sp!,{r0-r3,r12,lr}
;;;367 ClearPending(BIT_RTC);
000850 e3a00440 MOV r0,#0x40000000
000854 e18014c0 ORR r1,r0,r0,ASR #9
000858 e5810000 STR r0,[r1,#0]
00085c e18004c0 ORR r0,r0,r0,ASR #9
000860 e5900010 LDR r0,[r0,#0x10]
000864 e5810010 STR r0,[r1,#0x10]
000868 e1a00001 MOV r0,r1
00086c e5900010 LDR r0,[r0,#0x10]
;;;368
;;;369
;;;370 Uart_Printf("RTC Alarm Interrupt O.K.\n");
000870 e28f0014 ADR r0,|L1.2188|
000874 ebfffffe BL _printf
;;;371 isRtcInt = 1;
000878 e3a00001 MOV r0,#1
00087c e59f1024 LDR r1,|L1.2216|
000880 e5810000 STR r0,[r1,#0] ; isRtcInt
;;;372 }
000884 e8bd500f LDMFD sp!,{r0-r3,r12,lr}
000888 e25ef004 SUBS pc,lr,#4
|L1.2188|
00088c 20435452 DCB "RTC "
000890 72616c41 DCB "Alar"
000894 6e49206d DCB "m In"
000898 72726574 DCB "terr"
00089c 20747075 DCB "upt "
0008a0 2e4b2e4f DCB "O.K."
0008a4 0000000a DCB "\n\0\0\0"
|L1.2216|
0008a8 00000000 DCD ||.bss$2||
ENDP
Test_Rtc_Alarm PROC
;;;200 void Test_Rtc_Alarm(void)
;;;201 {
0008ac e92d40f8 STMFD sp!,{r3-r7,lr}
;;;202 int save_GPCON_U, save_GPCON_M,save_GPDAT, save_rGPUP;
;;;203 Uart_Printf("[ RTC Alarm Test for S3C24A0 ]\n");
0008b0 e28f0f53 ADR r0,|L1.2564|
0008b4 ebfffffe BL _printf
;;;204 Uart_Printf("%2x[sec] : %2x[min] \n",rBCDSEC,rBCDMIN);
0008b8 e51f05c4 LDR r0,|L1.764|
0008bc e5d00074 LDRB r0,[r0,#0x74]
0008c0 e1a02000 MOV r2,r0
0008c4 e51f05d0 LDR r0,|L1.764|
0008c8 e5d00070 LDRB r0,[r0,#0x70]
0008cc e1a01000 MOV r1,r0
0008d0 e28f0f53 ADR r0,|L1.2596|
0008d4 ebfffffe BL _printf
;;;205 Uart_Printf("[ alarmed after 5second! \n");
0008d8 e28f0f57 ADR r0,|L1.2620|
0008dc ebfffffe BL _printf
;;;206
;;;207 Rtc_Init();
0008e0 ebfffffe BL Rtc_Init
;;;208
;;;209
;;;210 save_GPCON_M= rGPCON_M;
0008e4 e51f0274 LDR r0,|L1.1656|
0008e8 e5900004 LDR r0,[r0,#4]
0008ec e1a05000 MOV r5,r0
;;;211 save_GPCON_U= rGPCON_U;
0008f0 e51f0280 LDR r0,|L1.1656|
0008f4 e5900000 LDR r0,[r0,#0]
0008f8 e1a04000 MOV r4,r0
;;;212 save_GPDAT= rGPDAT;
0008fc e51f028c LDR r0,|L1.1656|
000900 e590000c LDR r0,[r0,#0xc]
000904 e1a06000 MOV r6,r0
;;;213 save_rGPUP= rGPPU;
000908 e51f0298 LDR r0,|L1.1656|
00090c e5900010 LDR r0,[r0,#0x10]
000910 e1a07000 MOV r7,r0
;;;214
;;;215
;;;216
;;;217 #if GPCONM_AVAIL
;;;218 rGPCON_M |= (3<<6); // check GPIO14 (SMC_INT in circuit)
000914 e51f02a4 LDR r0,|L1.1656|
000918 e5900004 LDR r0,[r0,#4]
00091c e38000c0 ORR r0,r0,#0xc0
000920 e51f12b0 LDR r1,|L1.1656|
000924 e5810004 STR r0,[r1,#4]
;;;219 #else
;;;220 rGPCON_U |= (3<<18); // check GPIO28 (XuCTSn1 in circuit)
;;;221 #endif
;;;222
;;;223
;;;224 rRTCCON = 0x01; //No reset, Merge BCD counters, 1/32768, RTC Control enable
000928 e3a00001 MOV r0,#1
00092c e2411860 SUB r1,r1,#0x600000
000930 e5c10040 STRB r0,[r1,#0x40]
;;;225 rALMYEAR = TESTYEAR2 ;
000934 e3a00002 MOV r0,#2
000938 e1c11000 BIC r1,r1,r0
00093c e5c10068 STRB r0,[r1,#0x68]
;;;226 rALMMON = TESTMONTH2;
000940 e3a00001 MOV r0,#1
000944 e1c11000 BIC r1,r1,r0
000948 e5c10064 STRB r0,[r1,#0x64]
;;;227 rALMDATE= TESTDATE2 ;
00094c e3a00001 MOV r0,#1
000950 e1c11000 BIC r1,r1,r0
000954 e5c10060 STRB r0,[r1,#0x60]
;;;228 rALMHOUR = TESTHOUR2 ;
000958 e3a00000 MOV r0,#0
00095c e1c11000 BIC r1,r1,r0
000960 e5c1005c STRB r0,[r1,#0x5c]
;;;229 rALMMIN = TESTMIN2 ;
000964 e3a00000 MOV r0,#0
000968 e1c11000 BIC r1,r1,r0
00096c e5c10058 STRB r0,[r1,#0x58]
;;;230 rALMSEC = TESTSEC2 + 5;
000970 e3a00005 MOV r0,#5
000974 e1c11000 BIC r1,r1,r0
000978 e5c10054 STRB r0,[r1,#0x54]
;;;231
;;;232 isRtcInt = 0;
00097c e3a00000 MOV r0,#0
000980 e51f10e0 LDR r1,|L1.2216|
000984 e5810000 STR r0,[r1,#0] ; isRtcInt
;;;233 pISR_RTC = (unsigned int)Rtc_Int;
000988 e59f00c8 LDR r0,|L1.2648|
00098c e51f114c LDR r1,|L1.2120|
000990 e5810f98 STR r0,[r1,#0xf98]
;;;234 rRTCALM = 0x7f; //Global,Year,Month,Day,Hour,Minute,Second alarm enable
000994 e3a0007f MOV r0,#0x7f
000998 e51f16a4 LDR r1,|L1.764|
00099c e5c10050 STRB r0,[r1,#0x50]
;;;235 rRTCCON = 0x0; //No reset, Merge BCD counters, 1/32768, RTC Control disable
0009a0 e3a00000 MOV r0,#0
0009a4 e1c11000 BIC r1,r1,r0
0009a8 e5c10040 STRB r0,[r1,#0x40]
;;;236 rINTMSK = ~(BIT_RTC);
0009ac e3e00440 MVN r0,#0x40000000
0009b0 e0011240 AND r1,r1,r0,ASR #4
0009b4 e5810008 STR r0,[r1,#8]
;;;237
;;;238 while(isRtcInt==0);
0009b8 e1a00000 NOP
|L1.2492|
0009bc e51f011c LDR r0,|L1.2216|
0009c0 e5900000 LDR r0,[r0,#0] ; isRtcInt
0009c4 e3500000 CMP r0,#0
0009c8 0afffffb BEQ |L1.2492|
;;;239
;;;240 rINTMSK = BIT_ALLMSK;
0009cc e3e00000 MVN r0,#0
0009d0 e51f1198 LDR r1,|L1.2112|
0009d4 e5810008 STR r0,[r1,#8]
;;;241
;;;242 Uart_Printf("[ RTC Alarm Test OK ]\n");
0009d8 e28f007c ADR r0,|L1.2652|
0009dc ebfffffe BL _printf
;;;243
;;;244
;;;245 rGPCON_U = save_GPCON_U;
0009e0 e51f0370 LDR r0,|L1.1656|
0009e4 e5804000 STR r4,[r0,#0]
;;;246 rGPCON_M = save_GPCON_M;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -