; generated by ARM C/C++ Compiler, RVCT4.0 [Build 728]
; commandline ArmCC [--debug -c --asm --interleave -o..\OBJ\i2c.o --depend=..\OBJ\i2c.d --cpu=Cortex-M3 --apcs=interwork -O0 -I..\..\Libraries\STM32F10x_StdPeriph_Driver\inc -I..\..\Libraries\CMSIS\CM3\CoreSupport -I..\..\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x -I..\..\USER\INC -IC:\Keil\ARM\INC -IC:\Keil\ARM\INC\ST\STM32F10x -D__MICROLIB -DUSE_STDPERIPH_DRIVER -DSTM32F10X_HD --omf_browse=..\OBJ\i2c.crf ..\..\USER\SRC\I2C.c]
                          THUMB

                          AREA ||.text||, CODE, READONLY, ALIGN=2

                  InitI2C0 PROC
;;;47     ***************************************************************************/
;;;48     void InitI2C0(void)
000000  4887              LDR      r0,|L1.544|
;;;49     {
;;;50     	RCC->APB2ENR|=1<<4;//ʹIO PORTCʱ 							 
000002  6980              LDR      r0,[r0,#0x18]
000004  f0400010          ORR      r0,r0,#0x10
000008  4985              LDR      r1,|L1.544|
00000a  6188              STR      r0,[r1,#0x18]
;;;51     	GPIOC->CRH&=0XFFF00FFF;//PC11/12 
00000c  4885              LDR      r0,|L1.548|
00000e  6840              LDR      r0,[r0,#4]
000010  f420207f          BIC      r0,r0,#0xff000
000014  4983              LDR      r1,|L1.548|
000016  6048              STR      r0,[r1,#4]
;;;52     	GPIOC->CRH|=0X00033000;	   
000018  4608              MOV      r0,r1
00001a  6840              LDR      r0,[r0,#4]
00001c  f440304c          ORR      r0,r0,#0x33000
000020  6048              STR      r0,[r1,#4]
;;;53     	GPIOC->ODR|=3<<11;     //PC11,12 
000022  4608              MOV      r0,r1
000024  68c0              LDR      r0,[r0,#0xc]
000026  f44050c0          ORR      r0,r0,#0x1800
00002a  60c8              STR      r0,[r1,#0xc]
;;;54     }
00002c  4770              BX       lr
;;;55     
                          ENDP

                  StartI2C0 PROC
;;;63     ***************************************************************************/
;;;64     void StartI2C0(void)
00002e  b510              PUSH     {r4,lr}
;;;65     {
;;;66         I2C_SDA0=1;    
000030  2001              MOVS     r0,#1
000032  497d              LDR      r1,|L1.552|
000034  6008              STR      r0,[r1,#0]
;;;67         delay_us(100);
000036  f04f0064          MOV      r0,#0x64
00003a  f7fffffe          BL       delay_us
;;;68     
;;;69         I2C_SCL0=1;	   
00003e  2001              MOVS     r0,#1
000040  497a              LDR      r1,|L1.556|
000042  f8c101b0          STR      r0,[r1,#0x1b0]
;;;70         delay_us(100);
000046  2064              MOVS     r0,#0x64
000048  f7fffffe          BL       delay_us
;;;71      
;;;72         I2C_SDA0=0;
00004c  2000              MOVS     r0,#0
00004e  4976              LDR      r1,|L1.552|
000050  6008              STR      r0,[r1,#0]
;;;73         delay_us(100);
000052  f04f0064          MOV      r0,#0x64
000056  f7fffffe          BL       delay_us
;;;74     
;;;75         I2C_SCL0=0;	 
00005a  2000              MOVS     r0,#0
00005c  4973              LDR      r1,|L1.556|
00005e  f8c101b0          STR      r0,[r1,#0x1b0]
;;;76         delay_us(100);
000062  2064              MOVS     r0,#0x64
000064  f7fffffe          BL       delay_us
;;;77     
;;;78     
;;;79     }
000068  bd10              POP      {r4,pc}
;;;80     
                          ENDP

                  StopI2C0 PROC
;;;88     ***************************************************************************/
;;;89     void StopI2C0(void)
00006a  b510              PUSH     {r4,lr}
;;;90     {
;;;91     	I2C_SDA0=0;
00006c  2000              MOVS     r0,#0
00006e  496e              LDR      r1,|L1.552|
000070  6008              STR      r0,[r1,#0]
;;;92         delay_us(100);
000072  f04f0064          MOV      r0,#0x64
000076  f7fffffe          BL       delay_us
;;;93      
;;;94         I2C_SCL0=1;
00007a  2001              MOVS     r0,#1
00007c  496b              LDR      r1,|L1.556|
00007e  f8c101b0          STR      r0,[r1,#0x1b0]
;;;95         delay_us(100);  
000082  2064              MOVS     r0,#0x64
000084  f7fffffe          BL       delay_us
;;;96     
;;;97         I2C_SDA0=1;
000088  2001              MOVS     r0,#1
00008a  4967              LDR      r1,|L1.552|
00008c  6008              STR      r0,[r1,#0]
;;;98         delay_us(100);
00008e  f04f0064          MOV      r0,#0x64
000092  f7fffffe          BL       delay_us
;;;99      
;;;100    
;;;101    }
000096  bd10              POP      {r4,pc}
;;;102    
                          ENDP

                  NoAck0 PROC
;;;110    ***************************************************************************/
;;;111    void NoAck0(void)
000098  b510              PUSH     {r4,lr}
;;;112    {
;;;113    	
;;;114    	I2C_SDA0=1;
00009a  2001              MOVS     r0,#1
00009c  4962              LDR      r1,|L1.552|
00009e  6008              STR      r0,[r1,#0]
;;;115    	delay_us(100);
0000a0  f04f0064          MOV      r0,#0x64
0000a4  f7fffffe          BL       delay_us
;;;116    	
;;;117    	I2C_SCL0=1;
0000a8  2001              MOVS     r0,#1
0000aa  4960              LDR      r1,|L1.556|
0000ac  f8c101b0          STR      r0,[r1,#0x1b0]
;;;118    	delay_us(100);
0000b0  2064              MOVS     r0,#0x64
0000b2  f7fffffe          BL       delay_us
;;;119    	
;;;120    	I2C_SCL0=0;
0000b6  2000              MOVS     r0,#0
0000b8  495d              LDR      r1,|L1.560|
0000ba  6008              STR      r0,[r1,#0]
;;;121    	delay_us(100);
0000bc  f04f0064          MOV      r0,#0x64
0000c0  f7fffffe          BL       delay_us
;;;122    	
;;;123    	I2C_SDA0=0;
0000c4  2000              MOVS     r0,#0
0000c6  4959              LDR      r1,|L1.556|
0000c8  f8c101ac          STR      r0,[r1,#0x1ac]
;;;124    	delay_us(100);
0000cc  2064              MOVS     r0,#0x64
0000ce  f7fffffe          BL       delay_us
;;;125    
;;;126    }
0000d2  bd10              POP      {r4,pc}
;;;127    /***************************************************************************
                          ENDP

                  Ack0 PROC
;;;134    ***************************************************************************/
;;;135    void Ack0(void)
0000d4  b510              PUSH     {r4,lr}
;;;136    {
;;;137    	SDA_OUT0();
0000d6  4853              LDR      r0,|L1.548|
0000d8  6840              LDR      r0,[r0,#4]
0000da  f4204070          BIC      r0,r0,#0xf000
0000de  4951              LDR      r1,|L1.548|
0000e0  6048              STR      r0,[r1,#4]
0000e2  4608              MOV      r0,r1
0000e4  6840              LDR      r0,[r0,#4]
0000e6  f4405040          ORR      r0,r0,#0x3000
0000ea  6048              STR      r0,[r1,#4]
;;;138     	I2C_SDA0=1;
0000ec  2001              MOVS     r0,#1
0000ee  494e              LDR      r1,|L1.552|
0000f0  6008              STR      r0,[r1,#0]
;;;139        delay_us(100); 
0000f2  f04f0064          MOV      r0,#0x64
0000f6  f7fffffe          BL       delay_us
;;;140        I2C_SCL0=1;
0000fa  2001              MOVS     r0,#1
0000fc  494b              LDR      r1,|L1.556|
0000fe  f8c101b0          STR      r0,[r1,#0x1b0]
;;;141        delay_us(100); 
000102  2064              MOVS     r0,#0x64
000104  f7fffffe          BL       delay_us
;;;142    	I2C_SCL0=0;
000108  2000              MOVS     r0,#0
00010a  4949              LDR      r1,|L1.560|
00010c  6008              STR      r0,[r1,#0]
;;;143        delay_us(100); 
00010e  f04f0064          MOV      r0,#0x64
000112  f7fffffe          BL       delay_us
;;;144     	I2C_SDA0=1;
000116  2001              MOVS     r0,#1
000118  4944              LDR      r1,|L1.556|
00011a  f8c101ac          STR      r0,[r1,#0x1ac]
;;;145    
;;;146    	
;;;147    }
00011e  bd10              POP      {r4,pc}
;;;148    /***************************************************************************
                          ENDP

                  TestAck0 PROC
;;;155    ***************************************************************************/
;;;156    unsigned char TestAck0( )
000120  b510              PUSH     {r4,lr}
;;;157    {
;;;158    	unsigned char ack;
;;;159    
;;;160    	I2C_SCL0=1;
000122  2001              MOVS     r0,#1
000124  4942              LDR      r1,|L1.560|
000126  6008              STR      r0,[r1,#0]
;;;161    	delay_us(100);
000128  f04f0064          MOV      r0,#0x64
00012c  f7fffffe          BL       delay_us
;;;162    	SDA_IN0();
000130  483c              LDR      r0,|L1.548|
000132  6840              LDR      r0,[r0,#4]
000134  f4204070          BIC      r0,r0,#0xf000
000138  493a              LDR      r1,|L1.548|
00013a  6048              STR      r0,[r1,#4]
00013c  4608              MOV      r0,r1
00013e  6840              LDR      r0,[r0,#4]
000140  f4404000          ORR      r0,r0,#0x8000
000144  6048              STR      r0,[r1,#4]
;;;163    	delay_us(100);
000146  2064              MOVS     r0,#0x64
000148  f7fffffe          BL       delay_us
;;;164    	ack=SDA_STATE0;
00014c  4837              LDR      r0,|L1.556|
00014e  f8d0012c          LDR      r0,[r0,#0x12c]
000152  b2c4              UXTB     r4,r0
;;;165    	delay_us(100);
000154  2064              MOVS     r0,#0x64
000156  f7fffffe          BL       delay_us
;;;166    	I2C_SCL0=0;
00015a  2000              MOVS     r0,#0
00015c  4934              LDR      r1,|L1.560|
00015e  6008              STR      r0,[r1,#0]
;;;167    	delay_us(100);
000160  f04f0064          MOV      r0,#0x64
000164  f7fffffe          BL       delay_us
;;;168    	return(ack);
000168  4620              MOV      r0,r4
;;;169    
;;;170    
;;;171    }
00016a  bd10              POP      {r4,pc}
;;;172    /***************************************************************************
                          ENDP

                  I2CWrite0 PROC
;;;179    ***************************************************************************/
;;;180    unsigned char I2CWrite0(unsigned char DData)
00016c  b570              PUSH     {r4-r6,lr}
;;;181    {
00016e  4604              MOV      r4,r0
;;;182    	unsigned char j,tem;
;;;183    
;;;184    	for(j=0;j<8;j++) 
000170  2500              MOVS     r5,#0
000172  e01e              B        |L1.434|
                  |L1.372|
;;;185    	{
;;;186    		if((DData<<j)&0x80)
000174  fa04f005          LSL      r0,r4,r5
000178  f0100f80          TST      r0,#0x80
00017c  d003              BEQ      |L1.390|
;;;187    		{
;;;188    			I2C_SDA0=1;
00017e  2001              MOVS     r0,#1
000180  4929              LDR      r1,|L1.552|
000182  6008              STR      r0,[r1,#0]
000184  e002              B        |L1.396|
                  |L1.390|
;;;189    		}
;;;190    		else
;;;191    		{
;;;192    			I2C_SDA0=0;
000186  2000              MOVS     r0,#0
000188  4927              LDR      r1,|L1.552|
00018a  6008              STR      r0,[r1,#0]
                  |L1.396|
;;;193    		}
;;;194    		delay_us(100);
00018c  2064              MOVS     r0,#0x64
00018e  f7fffffe          BL       delay_us
;;;195    		I2C_SCL0=1;
000192  2001              MOVS     r0,#1
000194  4926              LDR      r1,|L1.560|
000196  6008              STR      r0,[r1,#0]
;;;196    		delay_us(100);
000198  f04f0064          MOV      r0,#0x64
00019c  f7fffffe          BL       delay_us
;;;197    		I2C_SCL0=0;;
0001a0  2000              MOVS     r0,#0
0001a2  4922              LDR      r1,|L1.556|
0001a4  f8c101b0          STR      r0,[r1,#0x1b0]
;;;198    		delay_us(100);
0001a8  2064              MOVS     r0,#0x64
0001aa  f7fffffe          BL       delay_us
0001ae  1c68              ADDS     r0,r5,#1              ;184
0001b0  b2c5              UXTB     r5,r0                 ;184
                  |L1.434|
0001b2  2d08              CMP      r5,#8                 ;184
0001b4  dbde              BLT      |L1.372|
;;;199    
;;;200    	}
;;;201    	delay_us(100);
0001b6  2064              MOVS     r0,#0x64
0001b8  f7fffffe          BL       delay_us
;;;202    	
;;;203    	SDA_IN0();
0001bc  4819              LDR      r0,|L1.548|
0001be  6840              LDR      r0,[r0,#4]
0001c0  f4204070          BIC      r0,r0,#0xf000
0001c4  4917              LDR      r1,|L1.548|
0001c6  6048              STR      r0,[r1,#4]
0001c8  4608              MOV      r0,r1
0001ca  6840              LDR      r0,[r0,#4]
0001cc  f4404000          ORR      r0,r0,#0x8000
0001d0  6048              STR      r0,[r1,#4]
;;;204    	delay_us(100);
0001d2  2064              MOVS     r0,#0x64
0001d4  f7fffffe          BL       delay_us
;;;205    	I2C_SCL0=1;
0001d8  2001              MOVS     r0,#1
0001da  4915              LDR      r1,|L1.560|
0001dc  6008              STR      r0,[r1,#0]
;;;206    	delay_us(1000);
0001de  f44f707a          MOV      r0,#0x3e8
0001e2  f7fffffe          BL       delay_us
;;;207    	if(SDA_STATE0==1)
0001e6  4811              LDR      r0,|L1.556|
0001e8  f8d0012c          LDR      r0,[r0,#0x12c]
0001ec  2801              CMP      r0,#1
0001ee  d101              BNE      |L1.500|
;;;208    	{
;;;209    		tem=0;  
0001f0  2600              MOVS     r6,#0
0001f2  e000              B        |L1.502|
                  |L1.500|
;;;210    	}
;;;211    	else
;;;212    	{
;;;213    		tem=1;   
0001f4  2601              MOVS     r6,#1
                  |L1.502|
;;;214    	}
;;;215    	I2C_SCL0=0;
0001f6  2000              MOVS     r0,#0
0001f8  490d              LDR      r1,|L1.560|
0001fa  6008              STR      r0,[r1,#0]
;;;216    	delay_us(100);	
0001fc  f04f0064          MOV      r0,#0x64
000200  f7fffffe          BL       delay_us
;;;217        SDA_OUT0();
000204  4807              LDR      r0,|L1.548|
000206  6840              LDR      r0,[r0,#4]
000208  f4204070          BIC      r0,r0,#0xf000
00020c  4905              LDR      r1,|L1.548|
00020e  6048              STR      r0,[r1,#4]
000210  4608              MOV      r0,r1
000212  6840              LDR      r0,[r0,#4]
000214  f4405040          ORR      r0,r0,#0x3000
000218  6048              STR      r0,[r1,#4]
;;;218    
;;;219    	return(tem);  
00021a  4630              MOV      r0,r6
;;;220    }
00021c  bd70              POP      {r4-r6,pc}
;;;221    
                          ENDP

00021e  0000              DCW      0x0000
                  |L1.544|
                          DCD      0x40021000
                  |L1.548|
                          DCD      0x40011000
                  |L1.552|
                          DCD      0x422201ac
                  |L1.556|
                          DCD      0x42220000
                  |L1.560|
                          DCD      0x422201b0
