📄 rtc.txt
字号:
; generated by ARM C Compiler, ADS1.2 [Build 805]
; commandline [-errors .\err\rtc.err -O0 -asm -g+ -cpu ARM920T -fs "-IC:\Program Files\ARM\ADSv1_2\INCLUDE"]
CODE32
AREA ||.text||, CODE, READONLY
Rtc_Test PROC
;;;30 void Rtc_Test(void)
;;;31 {
|L1.0|
000000 e92d4010 STMFD sp!,{r4,lr}
;;;32 int i;
;;;33
;;;34 Uart_Printf("\n====== RTC Test program start ======\n");
000004 e28f00b4 ADR r0,|L1.192|
000008 ebfffffe BL Uart_Printf
;;;35
;;;36 while(1)
00000c e1a00000 NOP
|L1.16|
000010 e1a00000 NOP
;;;37 {
;;;38 i=0;
000014 e3a04000 MOV r4,#0
;;;39 Uart_Printf("\n\n");
000018 e28f00c8 ADR r0,|L1.232|
00001c ebfffffe BL Uart_Printf
;;;40 while(1)
000020 e1a00000 NOP
|L1.36|
000024 e1a00000 NOP
;;;41 { //display menu
;;;42 Uart_Printf("%2d:%s",i,func_rtc_test[i][1]);
000028 e59f00bc LDR r0,|L1.236|
00002c e0800184 ADD r0,r0,r4,LSL #3
000030 e1a01004 MOV r1,r4
000034 e5902004 LDR r2,[r0,#4]
000038 e28f00b0 ADR r0,|L1.240|
00003c ebfffffe BL Uart_Printf
;;;43 i++;
000040 e2844001 ADD r4,r4,#1
;;;44 if((int)(func_rtc_test[i][0])==0)
000044 e59f00a0 LDR r0,|L1.236|
000048 e7900184 LDR r0,[r0,r4,LSL #3]
00004c e3500000 CMP r0,#0
000050 1a000002 BNE |L1.96|
;;;45 {
;;;46 Uart_Printf("\n");
000054 e28f009c ADR r0,|L1.248|
000058 ebfffffe BL Uart_Printf
;;;47 break;
00005c ea000004 B |L1.116|
;;;48 }
;;;49 if((i%4)==0)
|L1.96|
000060 e3140003 TST r4,#3
000064 1a000001 BNE |L1.112|
;;;50 Uart_Printf("\n");
000068 e28f0088 ADR r0,|L1.248|
00006c ebfffffe BL Uart_Printf
;;;51 }
|L1.112|
000070 eaffffeb B |L1.36|
;;;52
;;;53 Uart_Printf("\nPress Enter key to exit : ");
|L1.116|
000074 e28f0080 ADR r0,|L1.252|
000078 ebfffffe BL Uart_Printf
;;;54 i = Uart_GetIntNum();
00007c ebfffffe BL Uart_GetIntNum
000080 e1a04000 MOV r4,r0
;;;55 if(i==-1) break; // return.
000084 e3740001 CMN r4,#1
000088 1a000000 BNE |L1.144|
00008c ea000008 B |L1.180|
;;;56 if(i>=0 && (i<((sizeof(func_rtc_test)-1)/8)) ) // select and execute...
|L1.144|
000090 e3540000 CMP r4,#0
000094 ba000005 BLT |L1.176|
000098 e3540003 CMP r4,#3
00009c 2a000003 BCS |L1.176|
;;;57 ( (void (*)(void)) (func_rtc_test[i][0]) )();
0000a0 e59f1044 LDR r1,|L1.236|
0000a4 e7910184 LDR r0,[r1,r4,LSL #3]
0000a8 e1a0e00f MOV lr,pc
0000ac e1a0f000 MOV pc,r0
;;;58 }
|L1.176|
0000b0 eaffffd6 B |L1.16|
;;;59
;;;60 Uart_Printf("\n====== RTC Test program end ======\n");
|L1.180|
0000b4 e28f005c ADR r0,|L1.280|
0000b8 ebfffffe BL Uart_Printf
;;;61 }
0000bc e8bd8010 LDMFD sp!,{r4,pc}
|L1.192|
0000c0 3d3d3d0a DCB "\n==="
0000c4 203d3d3d DCB "=== "
0000c8 43545220 DCB " RTC"
0000cc 73655420 DCB " Tes"
0000d0 72702074 DCB "t pr"
0000d4 6172676f DCB "ogra"
0000d8 7473206d DCB "m st"
0000dc 20747261 DCB "art "
0000e0 3d3d3d3d DCB "===="
0000e4 000a3d3d DCB "==\n\0"
|L1.232|
0000e8 00000a0a DCB "\n\n\0\0"
|L1.236|
0000ec 00000000 DCD func_rtc_test
|L1.240|
0000f0 3a643225 DCB "%2d:"
0000f4 00007325 DCB "%s\0\0"
|L1.248|
0000f8 0000000a DCB "\n\0\0\0"
|L1.252|
0000fc 6572500a DCB "\nPre"
000100 45207373 DCB "ss E"
000104 7265746e DCB "nter"
000108 79656b20 DCB " key"
00010c 206f7420 DCB " to "
000110 74697865 DCB "exit"
000114 00203a20 DCB " : \0"
|L1.280|
000118 3d3d3d0a DCB "\n==="
00011c 203d3d3d DCB "=== "
000120 20435452 DCB "RTC "
000124 74736554 DCB "Test"
000128 6f727020 DCB " pro"
00012c 6d617267 DCB "gram"
000130 646e6520 DCB " end"
000134 3d3d3d20 DCB " ==="
000138 0a3d3d3d DCB "===\n"
00013c 00000000 DCB "\0\0\0\0"
ENDP
Rtc_Init PROC
;;;156 void Rtc_Init(void)
;;;157 {
000140 e3a00457 MOV r0,#0x57000000
;;;158 rRTCCON = rRTCCON & ~(0xf) | 0x1; //No reset, Merge BCD counters, 1/32768, RTC Control enable
000144 e5d00040 LDRB r0,[r0,#0x40]
000148 e3c0000f BIC r0,r0,#0xf
00014c e3800001 ORR r0,r0,#1
000150 e3a01457 MOV r1,#0x57000000
000154 e5c10040 STRB r0,[r1,#0x40]
;;;159
;;;160 rBCDYEAR = rBCDYEAR & ~(0xff) | TESTYEAR;
000158 e3a00457 MOV r0,#0x57000000
00015c e5d00088 LDRB r0,[r0,#0x88]
000160 e3c000ff BIC r0,r0,#0xff
000164 e3800001 ORR r0,r0,#1
000168 e3a01457 MOV r1,#0x57000000
00016c e5c10088 STRB r0,[r1,#0x88]
;;;161 rBCDMON = rBCDMON & ~(0x1f) | TESTMONTH;
000170 e3a00457 MOV r0,#0x57000000
000174 e5d00084 LDRB r0,[r0,#0x84]
000178 e3c0001f BIC r0,r0,#0x1f
00017c e3800012 ORR r0,r0,#0x12
000180 e3a01457 MOV r1,#0x57000000
000184 e5c10084 STRB r0,[r1,#0x84]
;;;162 rBCDDATE = rBCDDATE & ~(0x3f) | TESTDATE;
000188 e3a00457 MOV r0,#0x57000000
00018c e5d0007c LDRB r0,[r0,#0x7c]
000190 e3c0003f BIC r0,r0,#0x3f
000194 e3800031 ORR r0,r0,#0x31
000198 e3a01457 MOV r1,#0x57000000
00019c e5c1007c STRB r0,[r1,#0x7c]
;;;163 rBCDDAY = rBCDDAY & ~(0x7) | TESTDAY; //SUN:1 MON:2 TUE:3 WED:4 THU:5 FRI:6 SAT:7
0001a0 e3a00457 MOV r0,#0x57000000
0001a4 e5d00080 LDRB r0,[r0,#0x80]
0001a8 e3c00007 BIC r0,r0,#7
0001ac e3800002 ORR r0,r0,#2
0001b0 e3a01457 MOV r1,#0x57000000
0001b4 e5c10080 STRB r0,[r1,#0x80]
;;;164 rBCDHOUR = rBCDHOUR & ~(0x3f) | TESTHOUR;
0001b8 e3a00457 MOV r0,#0x57000000
0001bc e5d00078 LDRB r0,[r0,#0x78]
0001c0 e3c0003f BIC r0,r0,#0x3f
0001c4 e3800023 ORR r0,r0,#0x23
0001c8 e3a01457 MOV r1,#0x57000000
0001cc e5c10078 STRB r0,[r1,#0x78]
;;;165 rBCDMIN = rBCDMIN & ~(0x7f) | TESTMIN;
0001d0 e3a00457 MOV r0,#0x57000000
0001d4 e5d00074 LDRB r0,[r0,#0x74]
0001d8 e3c0007f BIC r0,r0,#0x7f
0001dc e3800059 ORR r0,r0,#0x59
0001e0 e3a01457 MOV r1,#0x57000000
0001e4 e5c10074 STRB r0,[r1,#0x74]
;;;166 rBCDSEC = rBCDSEC & ~(0x7f) | TESTSEC;
0001e8 e3a00457 MOV r0,#0x57000000
0001ec e5d00070 LDRB r0,[r0,#0x70]
0001f0 e3c0007f BIC r0,r0,#0x7f
0001f4 e3800059 ORR r0,r0,#0x59
0001f8 e3a01457 MOV r1,#0x57000000
0001fc e5c10070 STRB r0,[r1,#0x70]
;;;167
;;;168 rRTCCON = 0x0; //No reset, Merge BCD counters, 1/32768, RTC Control disable
000200 e3a00000 MOV r0,#0
000204 e3a01457 MOV r1,#0x57000000
000208 e5c10040 STRB r0,[r1,#0x40]
;;;169 }
00020c e1a0f00e MOV pc,lr
ENDP
Rtc_TimeSet PROC
;;;172 void Rtc_TimeSet(void)
;;;173 {
000210 e92d4ff0 STMFD sp!,{r4-r11,lr}
000214 e24dd014 SUB sp,sp,#0x14
;;;174 int syear,smonth,sdate,shour,smin,ssec;
;;;175 int sday;
;;;176
;;;177 Uart_Printf("[ RTC Time Setting ]\n");
000218 e28f0f89 ADR r0,|L1.1092|
00021c ebfffffe BL Uart_Printf
;;;178 Rtc_Init(); //RTC Initialize
000220 ebfffffe BL Rtc_Init
;;;179 Uart_Printf("RTC Time Initialized ...\n");
000224 e28f0f8c ADR r0,|L1.1116|
000228 ebfffffe BL Uart_Printf
;;;180
;;;181 Uart_Printf("Year (Two digit the latest)[0~99] : ");
00022c e28f0f91 ADR r0,|L1.1144|
000230 ebfffffe BL Uart_Printf
;;;182 syear = Uart_GetIntNum();
000234 ebfffffe BL Uart_GetIntNum
000238 e1a04000 MOV r4,r0
;;;183
;;;184 Uart_Printf("Month [1~12] : ");
00023c e28f0f97 ADR r0,|L1.1184|
000240 ebfffffe BL Uart_Printf
;;;185 smonth = Uart_GetIntNum();
000244 ebfffffe BL Uart_GetIntNum
000248 e1a05000 MOV r5,r0
;;;186
;;;187 Uart_Printf("Date [1~31] : ");
00024c e28f0f9d ADR r0,|L1.1224|
000250 ebfffffe BL Uart_Printf
;;;188 sdate = Uart_GetIntNum();
000254 ebfffffe BL Uart_GetIntNum
000258 e1a06000 MOV r6,r0
;;;189
;;;190 Uart_Printf("\n1:Sunday 2:Monday 3:Thesday 4:Wednesday 5:Thursday 6:Friday 7:Saturday\n");
00025c e59f028c LDR r0,|L1.1264|
000260 ebfffffe BL Uart_Printf
;;;191 Uart_Printf("Day of the week : ");
000264 e28f0fa2 ADR r0,|L1.1268|
000268 ebfffffe BL Uart_Printf
;;;192 sday = Uart_GetIntNum();
00026c ebfffffe BL Uart_GetIntNum
000270 e1a0a000 MOV r10,r0
;;;193
;;;194 Uart_Printf("Hour [0~23] : ");
000274 e28f0fa8 ADR r0,|L1.1308|
000278 ebfffffe BL Uart_Printf
;;;195 shour = Uart_GetIntNum();
00027c ebfffffe BL Uart_GetIntNum
000280 e1a07000 MOV r7,r0
;;;196
;;;197 Uart_Printf("Minute [0~59] : ");
000284 e28f0fae ADR r0,|L1.1348|
000288 ebfffffe BL Uart_Printf
;;;198 smin = Uart_GetIntNum();
00028c ebfffffe BL Uart_GetIntNum
000290 e1a08000 MOV r8,r0
;;;199
;;;200 Uart_Printf("Second [0~59] : ");
000294 e28f0fb4 ADR r0,|L1.1388|
000298 ebfffffe BL Uart_Printf
;;;201 ssec = Uart_GetIntNum();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -