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

📄 bsp_pcf8563.txt

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