📄 bsp_pcf8563.txt
字号:
0001f8 1a000001 BNE |L1.516| ;129
0001fc e3a00000 MOV r0,#0 ;129
000200 eafffff0 B |L1.456| ;129
|L1.516|
000204 e59f04ec LDR r0,|L1.1784| ;127
000208 e5d00008 LDRB r0,[r0,#8] ;127
00020c e3100020 TST r0,#0x20 ;127
000210 0afffff6 BEQ |L1.496| ;127
000214 e59f04dc LDR r0,|L1.1784| ;131
000218 e5d00000 LDRB r0,[r0,#0] ;131
00021c e3800020 ORR r0,r0,#0x20 ;131
000220 e59f14d0 LDR r1,|L1.1784| ;131
000224 e5c10000 STRB r0,[r1,#0] ;131
000228 ea000004 B |L1.576| ;133
|L1.556|
00022c e2466001 SUB r6,r6,#1 ;135
000230 e3560000 CMP r6,#0 ;135
000234 1a000001 BNE |L1.576| ;135
000238 e3a00000 MOV r0,#0 ;135
00023c eaffffe1 B |L1.456| ;135
|L1.576|
000240 e59f04b0 LDR r0,|L1.1784| ;133
000244 e5d00004 LDRB r0,[r0,#4] ;133
000248 e3100008 TST r0,#8 ;133
00024c 0afffff6 BEQ |L1.556| ;133
000250 e59f04a0 LDR r0,|L1.1784| ;137
000254 e5c04018 STRB r4,[r0,#0x18] ;137
000258 ea000004 B |L1.624| ;138
|L1.604|
00025c e2466001 SUB r6,r6,#1 ;140
000260 e3560000 CMP r6,#0 ;140
000264 1a000001 BNE |L1.624| ;140
000268 e3a00000 MOV r0,#0 ;140
00026c eaffffd5 B |L1.456| ;140
|L1.624|
000270 e59f0480 LDR r0,|L1.1784| ;138
000274 e5d00004 LDRB r0,[r0,#4] ;138
000278 e3100008 TST r0,#8 ;138
00027c 0afffff6 BEQ |L1.604| ;138
000280 e3a01000 MOV r1,#0 ;143
000284 e59f046c LDR r0,|L1.1784| ;143
000288 ebfffffe BL I2C_AcknowledgeConfig ;143
00028c e3a01001 MOV r1,#1 ;145
000290 e59f0460 LDR r0,|L1.1784| ;145
000294 ebfffffe BL I2C_STARTGenerate ;145
000298 ea000004 B |L1.688| ;146
|L1.668|
00029c e2466001 SUB r6,r6,#1 ;148
0002a0 e3560000 CMP r6,#0 ;148
0002a4 1a000001 BNE |L1.688| ;148
0002a8 e3a00000 MOV r0,#0 ;148
0002ac eaffffc5 B |L1.456| ;148
|L1.688|
0002b0 e59f0440 LDR r0,|L1.1784| ;146
0002b4 e5d00004 LDRB r0,[r0,#4] ;146
0002b8 e3100001 TST r0,#1 ;146
0002bc 0afffff6 BEQ |L1.668| ;146
0002c0 e3a000a3 MOV r0,#0xa3 ;151
0002c4 e59f142c LDR r1,|L1.1784| ;151
0002c8 e5c10018 STRB r0,[r1,#0x18] ;151
0002cc ea000004 B |L1.740| ;152
|L1.720|
0002d0 e2466001 SUB r6,r6,#1 ;154
0002d4 e3560000 CMP r6,#0 ;154
0002d8 1a000001 BNE |L1.740| ;154
0002dc e3a00000 MOV r0,#0 ;154
0002e0 eaffffb8 B |L1.456| ;154
|L1.740|
0002e4 e59f040c LDR r0,|L1.1784| ;152
0002e8 e5d00008 LDRB r0,[r0,#8] ;152
0002ec e3100020 TST r0,#0x20 ;152
0002f0 0afffff6 BEQ |L1.720| ;152
0002f4 e59f03fc LDR r0,|L1.1784| ;156
0002f8 e5d00000 LDRB r0,[r0,#0] ;156
0002fc e3800020 ORR r0,r0,#0x20 ;156
000300 e59f13f0 LDR r1,|L1.1784| ;156
000304 e5c10000 STRB r0,[r1,#0] ;156
000308 ea000004 B |L1.800| ;158
|L1.780|
00030c e2466001 SUB r6,r6,#1 ;160
000310 e3560000 CMP r6,#0 ;160
000314 1a000001 BNE |L1.800| ;160
000318 e3a00000 MOV r0,#0 ;160
00031c eaffffa9 B |L1.456| ;160
|L1.800|
000320 e59f03d0 LDR r0,|L1.1784| ;158
000324 e5d00004 LDRB r0,[r0,#4] ;158
000328 e3100008 TST r0,#8 ;158
00032c 0afffff6 BEQ |L1.780| ;158
000330 e3a01001 MOV r1,#1 ;162
000334 e59f03bc LDR r0,|L1.1784| ;162
000338 ebfffffe BL I2C_STOPGenerate ;162
00033c e59f03b4 LDR r0,|L1.1784| ;163
000340 e5d05018 LDRB r5,[r0,#0x18] ;163
000344 ea000004 B |L1.860| ;164
|L1.840|
000348 e2466001 SUB r6,r6,#1 ;166
00034c e3560000 CMP r6,#0 ;166
000350 1a000001 BNE |L1.860| ;166
000354 e3a00000 MOV r0,#0 ;166
000358 eaffff9a B |L1.456| ;166
|L1.860|
00035c e59f0394 LDR r0,|L1.1784| ;164
000360 e5d00000 LDRB r0,[r0,#0] ;164
000364 e3100002 TST r0,#2 ;164
000368 1afffff6 BNE |L1.840| ;164
00036c e1a00005 MOV r0,r5 ;169
000370 eaffff94 B |L1.456| ;169
ENDP
Get_Wday PROC
;;;172 unsigned int Get_Wday(unsigned int y, unsigned int m, unsigned int d)
;;;173 {
000374 e92d47f0 PUSH {r4-r10,lr}
000378 e1a05000 MOV r5,r0
00037c e1a06001 MOV r6,r1
000380 e1a07002 MOV r7,r2
;;;174 unsigned int w, c;
;;;175 if (m <= 2)
000384 e3560002 CMP r6,#2
000388 8a000001 BHI |L1.916|
;;;176 {
;;;177 m |= 4;//1月2月同5月六月表
00038c e3866004 ORR r6,r6,#4
;;;178 y--;
000390 e2455001 SUB r5,r5,#1
;;;179 }
;;;180 c = y / 100;
|L1.916|
000394 e3a01064 MOV r1,#0x64
000398 e1a00005 MOV r0,r5
00039c ebfffffe BL __aeabi_uidivmod
0003a0 e1a08000 MOV r8,r0
;;;181 c &= 0x03;//百年%4
0003a4 e2088003 AND r8,r8,#3
;;;182 y %= 100;
0003a8 e3a01064 MOV r1,#0x64
0003ac e1a00005 MOV r0,r5
0003b0 ebfffffe BL __aeabi_uidivmod
0003b4 e1a05001 MOV r5,r1
;;;183 w = ((c | (c << 2)) + (y + (y >> 2)) + (13 * m + 8)/ 5 + d) % 7;//(星期=百年%4*5+年+年/4+(13*月+8)/5+日)%7
0003b8 e3a0100d MOV r1,#0xd
0003bc e0010196 MUL r1,r6,r1
0003c0 e2810008 ADD r0,r1,#8
0003c4 e3a01005 MOV r1,#5
0003c8 ebfffffe BL __aeabi_uidivmod
0003cc e1881108 ORR r1,r8,r8,LSL #2
0003d0 e0852125 ADD r2,r5,r5,LSR #2
0003d4 e0811002 ADD r1,r1,r2
0003d8 e0800001 ADD r0,r0,r1
0003dc e0809007 ADD r9,r0,r7
0003e0 e3a01007 MOV r1,#7
0003e4 e1a00009 MOV r0,r9
0003e8 ebfffffe BL __aeabi_uidivmod
0003ec e1a04001 MOV r4,r1
;;;184 return w;//返回星期
0003f0 e1a00004 MOV r0,r4
0003f4 e8bd47f0 POP {r4-r10,lr}
;;;185 }
0003f8 e12fff1e BX lr
ENDP
Time_check_valid PROC
;;;186 u16 Time_check_valid( RTC_clock *time )
;;;187 {
0003fc e92d4030 PUSH {r4,r5,lr}
000400 e1a01000 MOV r1,r0
;;;188 u8 y,m,d,h,min;
;;;189 // bcd 转换成 bin
;;;190 y = BCD2BIN( time->year );
000404 e5d10005 LDRB r0,[r1,#5]
000408 e200000f AND r0,r0,#0xf
00040c e5d15005 LDRB r5,[r1,#5]
000410 e1a05245 ASR r5,r5,#4
000414 e0855105 ADD r5,r5,r5,LSL #2
000418 e0800085 ADD r0,r0,r5,LSL #1
00041c e20020ff AND r2,r0,#0xff
;;;191 m = BCD2BIN( time->month );
000420 e5d10004 LDRB r0,[r1,#4]
000424 e200000f AND r0,r0,#0xf
000428 e5d15004 LDRB r5,[r1,#4]
00042c e1a05245 ASR r5,r5,#4
000430 e0855105 ADD r5,r5,r5,LSL #2
000434 e0800085 ADD r0,r0,r5,LSL #1
000438 e20030ff AND r3,r0,#0xff
;;;192 d = BCD2BIN( time->date );
00043c e5d10003 LDRB r0,[r1,#3]
000440 e200000f AND r0,r0,#0xf
000444 e5d15003 LDRB r5,[r1,#3]
000448 e1a05245 ASR r5,r5,#4
00044c e0855105 ADD r5,r5,r5,LSL #2
000450 e0800085 ADD r0,r0,r5,LSL #1
000454 e200c0ff AND r12,r0,#0xff
;;;193 h = BCD2BIN( time->hour );
000458 e5d10002 LDRB r0,[r1,#2]
00045c e200000f AND r0,r0,#0xf
000460 e5d15002 LDRB r5,[r1,#2]
000464 e1a05245 ASR r5,r5,#4
000468 e0855105 ADD r5,r5,r5,LSL #2
00046c e0800085 ADD r0,r0,r5,LSL #1
000470 e200e0ff AND lr,r0,#0xff
;;;194 min = BCD2BIN( time->minute );
000474 e5d10001 LDRB r0,[r1,#1]
000478 e200000f AND r0,r0,#0xf
00047c e5d15001 LDRB r5,[r1,#1]
000480 e1a05245 ASR r5,r5,#4
000484 e0855105 ADD r5,r5,r5,LSL #2
000488 e0800085 ADD r0,r0,r5,LSL #1
00048c e20040ff AND r4,r0,#0xff
;;;195
;;;196 if ( ( y > 99 ) || ( m > 12 ) || ( d > 31 ) || ( h > 23 ) || ( min > 59 ) || (d == 0) || (m == 0))
000490 e3520063 CMP r2,#0x63
000494 ca00000b BGT |L1.1224|
000498 e353000c CMP r3,#0xc
00049c ca000009 BGT |L1.1224|
0004a0 e35c001f CMP r12,#0x1f
0004a4 ca000007 BGT |L1.1224|
0004a8 e35e0017 CMP lr,#0x17
0004ac ca000005 BGT |L1.1224|
0004b0 e354003b CMP r4,#0x3b
0004b4 ca000003 BGT |L1.1224|
0004b8 e35c0000 CMP r12,#0
0004bc 0a000001 BEQ |L1.1224|
0004c0 e3530000 CMP r3,#0
0004c4 1a000002 BNE |L1.1236|
;;;197 {
;;;198 return 0;
|L1.1224|
0004c8 e3a00000 MOV r0,#0
|L1.1228|
0004cc e8bd4030 POP {r4,r5,lr}
;;;199 }
;;;200 else
;;;201 {
;;;202 return 1;
;;;203 }
;;;204 }
0004d0 e12fff1e BX lr
|L1.1236|
0004d4 e3a00001 MOV r0,#1 ;202
0004d8 eafffffb B |L1.1228| ;202
ENDP
Set_PCF8563_Time PROC
;;;215 void Set_PCF8563_Time( RTC_clock *time )
;;;216 {
0004dc e92d4010 PUSH {r4,lr}
0004e0 e1a04000 MOV r4,r0
;;;217
;;;218 if( !Time_check_valid( time ) ) // 检查时间合法性
0004e4 e1a00004 MOV r0,r4
0004e8 ebfffffe BL Time_check_valid
0004ec e3500000 CMP r0,#0
0004f0 1a000001 BNE |L1.1276|
;;;219 {
;;;220 return;
;;;221 }
;;;222
;;;223 time->wday = Get_Wday(BCD2BIN(time->year), BCD2BIN(time->month), BCD2BIN(time->date)); // 计算星期
;;;224 // os_mut_wait( MUT_i2c, 0xffff );
;;;225 Write_PCF8563_Reg( PCF8563_Y_R, time->year );
;;;226 Write_PCF8563_Reg( PCF8563_MON_R, time->month );
;;;227 Write_PCF8563_Reg( PCF8563_DAY_R, time->wday);
;;;228 Write_PCF8563_Reg( PCF8563_DAT_R, time->date );
;;;229 Write_PCF8563_Reg( PCF8563_H_R, time->hour );
;;;230 Write_PCF8563_Reg( PCF8563_MIN_R, time->minute );
;;;231 Write_PCF8563_Reg( PCF8563_S_R, time->second );
;;;232 // os_mut_release( MUT_i2c );
;;;233 }
|L1.1268|
0004f4 e8bd4010 POP {r4,lr}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -