📄 bsp_pcf8563.txt
字号:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.0 [Build 951] for uVision
; commandline ArmCC [--debug -c --asm --interleave -o.\output\bsp_pcf8563.o --device=DARMST --apcs=interwork -O0 -Id:\Keil\ARM\INC\ST\71x src\BSP\BSP_PCF8563.c]
ARM
AREA ||.text.7||, CODE, READONLY, ALIGN=2
PCF8563Delay PROC
;;;29 {
;;;30 while ( n-- )
000000 e1a00000 MOV r0,r0
|L1.4|
000004 e1b01000 MOVS r1,r0
000008 e2400001 SUB r0,r0,#1
00000c 1afffffc BNE |L1.4|
;;;31 ;
;;;32 }
000010 e12fff1e BX lr
ENDP
Config_I2C0 PROC
;;;44 void Config_I2C0( void )
;;;45 {
000014 e92d4010 PUSH {r4,lr}
;;;46 GPIO_Config( GPIO1, I2C0_SDA | I2C0_SCL, GPIO_AF_OD );
000018 e3a02006 MOV r2,#6
00001c e3a01a06 MOV r1,#0x6000
000020 e59f06cc LDR r0,|L1.1780|
000024 ebfffffe BL GPIO_Config
;;;47 I2C_Init( I2C0 );
000028 e59f06c8 LDR r0,|L1.1784|
00002c ebfffffe BL I2C_Init
;;;48 I2C_FCLKConfig( I2C0 );
000030 e59f06c0 LDR r0,|L1.1784|
000034 ebfffffe BL I2C_FCLKConfig
;;;49 I2C_OnOffConfig( I2C0, ENABLE );
000038 e3a01001 MOV r1,#1
00003c e59f06b4 LDR r0,|L1.1784|
000040 ebfffffe BL I2C_OnOffConfig
;;;50 I2C_SpeedConfig( I2C0,200000 );
000044 e59f16b0 LDR r1,|L1.1788|
000048 e59f06a8 LDR r0,|L1.1784|
00004c ebfffffe BL I2C_SpeedConfig
;;;51 I2C_AcknowledgeConfig( I2C0, ENABLE );
000050 e3a01001 MOV r1,#1
000054 e59f069c LDR r0,|L1.1784|
000058 ebfffffe BL I2C_AcknowledgeConfig
;;;52 }
00005c e8bd4010 POP {r4,lr}
000060 e12fff1e BX lr
ENDP
Write_PCF8563_Reg PROC
;;;64 void Write_PCF8563_Reg( u8 RegAddr, u8 dat )
;;;65 {
000064 e92d4070 PUSH {r4-r6,lr}
000068 e1a04000 MOV r4,r0
00006c e1a05001 MOV r5,r1
;;;66 u32 i = 10000;
000070 e59f6688 LDR r6,|L1.1792|
;;;67 //Enable Start generation
;;;68 I2C_STARTGenerate( I2C0, ENABLE );
000074 e3a01001 MOV r1,#1
000078 e59f0678 LDR r0,|L1.1784|
00007c ebfffffe BL I2C_STARTGenerate
;;;69 while ( !( I2C0->SR1 & I2C_SB ) )
000080 ea000004 B |L1.152|
;;;70 {
;;;71 I2C_ERR_EXIT(i);
|L1.132|
000084 e2466001 SUB r6,r6,#1
000088 e3560000 CMP r6,#0
00008c 1a000001 BNE |L1.152|
;;;72 }
;;;73
;;;74 //Send the slave address
;;;75 I2C0->DR = PCF8563_IC_ADDR & 0xfe; // Tx
;;;76 while ( !( I2C0->SR2 & 0x20 ) ) // ENDAD
;;;77 {
;;;78 I2C_ERR_EXIT(i);
;;;79 }
;;;80 I2C0->CR |= 0x20; // Set PE
;;;81
;;;82 //Send Data to the slave
;;;83 while ( !( I2C0->SR1 & I2C_BTF ) )
;;;84 {
;;;85 I2C_ERR_EXIT(i);
;;;86 }
;;;87 I2C0->DR = RegAddr;
;;;88 while ( !( I2C0->SR1 & I2C_BTF ) )
;;;89 {
;;;90 I2C_ERR_EXIT(i);
;;;91 }
;;;92 I2C0->DR = dat;
;;;93 while ( !( I2C0->SR1 & I2C_BTF ) )
;;;94 {
;;;95 I2C_ERR_EXIT(i);
;;;96 }
;;;97
;;;98 //Stop the communication
;;;99 I2C_STOPGenerate( I2C0, ENABLE );
;;;100 while ( I2C0->CR & I2C_STOP_Mask )
;;;101 {
;;;102 I2C_ERR_EXIT(i);
;;;103 }
;;;104 }
|L1.144|
000090 e8bd4070 POP {r4-r6,lr}
000094 e12fff1e BX lr
|L1.152|
000098 e59f0658 LDR r0,|L1.1784| ;69
00009c e5d00004 LDRB r0,[r0,#4] ;69
0000a0 e3100001 TST r0,#1 ;69
0000a4 0afffff6 BEQ |L1.132| ;69
0000a8 e3a000a2 MOV r0,#0xa2 ;75
0000ac e59f1644 LDR r1,|L1.1784| ;75
0000b0 e5c10018 STRB r0,[r1,#0x18] ;75
0000b4 ea000003 B |L1.200| ;76
|L1.184|
0000b8 e2466001 SUB r6,r6,#1 ;78
0000bc e3560000 CMP r6,#0 ;78
0000c0 1a000000 BNE |L1.200| ;78
0000c4 eafffff1 B |L1.144| ;78
|L1.200|
0000c8 e59f0628 LDR r0,|L1.1784| ;76
0000cc e5d00008 LDRB r0,[r0,#8] ;76
0000d0 e3100020 TST r0,#0x20 ;76
0000d4 0afffff7 BEQ |L1.184| ;76
0000d8 e59f0618 LDR r0,|L1.1784| ;80
0000dc e5d00000 LDRB r0,[r0,#0] ;80
0000e0 e3800020 ORR r0,r0,#0x20 ;80
0000e4 e59f160c LDR r1,|L1.1784| ;80
0000e8 e5c10000 STRB r0,[r1,#0] ;80
0000ec ea000003 B |L1.256| ;83
|L1.240|
0000f0 e2466001 SUB r6,r6,#1 ;85
0000f4 e3560000 CMP r6,#0 ;85
0000f8 1a000000 BNE |L1.256| ;85
0000fc eaffffe3 B |L1.144| ;85
|L1.256|
000100 e59f05f0 LDR r0,|L1.1784| ;83
000104 e5d00004 LDRB r0,[r0,#4] ;83
000108 e3100008 TST r0,#8 ;83
00010c 0afffff7 BEQ |L1.240| ;83
000110 e59f05e0 LDR r0,|L1.1784| ;87
000114 e5c04018 STRB r4,[r0,#0x18] ;87
000118 ea000003 B |L1.300| ;88
|L1.284|
00011c e2466001 SUB r6,r6,#1 ;90
000120 e3560000 CMP r6,#0 ;90
000124 1a000000 BNE |L1.300| ;90
000128 eaffffd8 B |L1.144| ;90
|L1.300|
00012c e59f05c4 LDR r0,|L1.1784| ;88
000130 e5d00004 LDRB r0,[r0,#4] ;88
000134 e3100008 TST r0,#8 ;88
000138 0afffff7 BEQ |L1.284| ;88
00013c e59f05b4 LDR r0,|L1.1784| ;92
000140 e5c05018 STRB r5,[r0,#0x18] ;92
000144 ea000003 B |L1.344| ;93
|L1.328|
000148 e2466001 SUB r6,r6,#1 ;95
00014c e3560000 CMP r6,#0 ;95
000150 1a000000 BNE |L1.344| ;95
000154 eaffffcd B |L1.144| ;95
|L1.344|
000158 e59f0598 LDR r0,|L1.1784| ;93
00015c e5d00004 LDRB r0,[r0,#4] ;93
000160 e3100008 TST r0,#8 ;93
000164 0afffff7 BEQ |L1.328| ;93
000168 e3a01001 MOV r1,#1 ;99
00016c e59f0584 LDR r0,|L1.1784| ;99
000170 ebfffffe BL I2C_STOPGenerate ;99
000174 ea000003 B |L1.392| ;100
|L1.376|
000178 e2466001 SUB r6,r6,#1 ;102
00017c e3560000 CMP r6,#0 ;102
000180 1a000000 BNE |L1.392| ;102
000184 eaffffc1 B |L1.144| ;102
|L1.392|
000188 e59f0568 LDR r0,|L1.1784| ;100
00018c e5d00000 LDRB r0,[r0,#0] ;100
000190 e3100002 TST r0,#2 ;100
000194 1afffff7 BNE |L1.376| ;100
000198 eaffffbc B |L1.144|
ENDP
Read_PCF8563_Reg PROC
;;;115 u8 Read_PCF8563_Reg( u8 RegAddr )
;;;116 {
00019c e92d4070 PUSH {r4-r6,lr}
0001a0 e1a04000 MOV r4,r0
;;;117 u8 c;
;;;118 u32 i = 10000;
0001a4 e59f6554 LDR r6,|L1.1792|
;;;119 //Enable Start generation
;;;120 I2C_STARTGenerate( I2C0, ENABLE );
0001a8 e3a01001 MOV r1,#1
0001ac e59f0544 LDR r0,|L1.1784|
0001b0 ebfffffe BL I2C_STARTGenerate
;;;121 while ( !( I2C0->SR1 & I2C_SB ) )
0001b4 ea000005 B |L1.464|
;;;122 {
;;;123 I2C_ERR_RETURN(i, 0x00);
|L1.440|
0001b8 e2466001 SUB r6,r6,#1
0001bc e3560000 CMP r6,#0
0001c0 1a000002 BNE |L1.464|
0001c4 e3a00000 MOV r0,#0
|L1.456|
0001c8 e8bd4070 POP {r4-r6,lr}
;;;124 }
;;;125 //Send the slave address
;;;126 I2C0->DR = PCF8563_IC_ADDR & 0xfe; // Tx
;;;127 while ( !( I2C0->SR2 & 0x20 ) ) // ENDAD
;;;128 {
;;;129 I2C_ERR_RETURN(i, 0x00);
;;;130 }
;;;131 I2C0->CR |= 0x20; // Set PE
;;;132 //Send Data to the slave
;;;133 while ( !( I2C0->SR1 & I2C_BTF ) )
;;;134 {
;;;135 I2C_ERR_RETURN(i, 0x00);
;;;136 }
;;;137 I2C0->DR = RegAddr;
;;;138 while ( !( I2C0->SR1 & I2C_BTF ) )
;;;139 {
;;;140 I2C_ERR_RETURN(i, 0x00);
;;;141 }
;;;142 //Disable I2C acknowledge feature
;;;143 I2C_AcknowledgeConfig( I2C0, DISABLE );
;;;144 //Enable Start generation
;;;145 I2C_STARTGenerate( I2C0, ENABLE );
;;;146 while ( !( I2C0->SR1 & I2C_SB ) )
;;;147 {
;;;148 I2C_ERR_RETURN(i, 0x00);
;;;149 }
;;;150 //Send the slave address
;;;151 I2C0->DR = PCF8563_IC_ADDR | 0x01; // Rx
;;;152 while ( !( I2C0->SR2 & 0x20 ) ) // ENDAD
;;;153 {
;;;154 I2C_ERR_RETURN(i, 0x00);
;;;155 }
;;;156 I2C0->CR |= 0x20; // Set PE
;;;157 //Read Data from the slave & stop the communication
;;;158 while ( !( I2C0->SR1 & I2C_BTF ) )
;;;159 {
;;;160 I2C_ERR_RETURN(i, 0x00);
;;;161 }
;;;162 I2C_STOPGenerate( I2C0, ENABLE );
;;;163 c = I2C0->DR;
;;;164 while ( I2C0->CR & I2C_STOP_Mask )
;;;165 {
;;;166 I2C_ERR_RETURN(i, 0x00);
;;;167 }
;;;168
;;;169 return c;
;;;170 }
0001cc e12fff1e BX lr
|L1.464|
0001d0 e59f0520 LDR r0,|L1.1784| ;121
0001d4 e5d00004 LDRB r0,[r0,#4] ;121
0001d8 e3100001 TST r0,#1 ;121
0001dc 0afffff5 BEQ |L1.440| ;121
0001e0 e3a000a2 MOV r0,#0xa2 ;126
0001e4 e59f150c LDR r1,|L1.1784| ;126
0001e8 e5c10018 STRB r0,[r1,#0x18] ;126
0001ec ea000004 B |L1.516| ;127
|L1.496|
0001f0 e2466001 SUB r6,r6,#1 ;129
0001f4 e3560000 CMP r6,#0 ;129
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -