⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bsp_pcf8563.txt

📁 使用STR710的IIC接口对PCF8563时钟芯片的测试程序.采用KEIL UV3编译.使用了MDK3.05操作系统.
💻 TXT
📖 第 1 页 / 共 3 页
字号:
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 + -