; generated by Component: ARM Compiler 5.06 update 6 (build 750) Tool: ArmCC [4d3637]
; commandline ArmCC [--list --debug -c --asm --interleave -o.\obj\mpuiic.o --asm_dir=.\list\ --list_dir=.\list\ --depend=.\obj\mpuiic.d --cpu=Cortex-M3 --apcs=interwork -O0 --diag_suppress=9931 -I.\FWlib\inc -I.\user -I.\CM3 -I.\dmp -I.\RTE\_STM32-FD -If:\Users\Administrator\AppData\Local\Arm\Packs\ARM\CMSIS\5.7.0\CMSIS\Core\Include -If:\Users\Administrator\AppData\Local\Arm\Packs\Keil\STM32F1xx_DFP\2.4.1\Device\Include -D__MICROLIB -D__UVISION_VERSION=530 -D_RTE_ -DSTM32F10X_MD -D_RTE_ -DUSE_STDPERIPH_DRIVER -DSTM32F10X_MD --omf_browse=.\obj\mpuiic.crf user\mpuiic.c]
                          THUMB

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

                  MPU_I2C_Delay PROC
;;;4      
;;;5      void MPU_I2C_Delay(void)
000000  b510              PUSH     {r4,lr}
;;;6      {
;;;7      	delay_us(2);
000002  2002              MOVS     r0,#2
000004  f7fffffe          BL       delay_us
;;;8      }
000008  bd10              POP      {r4,pc}
;;;9      
                          ENDP

                  MPU_I2C_Init1 PROC
;;;10     //ʼI2C
;;;11     void MPU_I2C_Init1(void)
00000a  b508              PUSH     {r3,lr}
;;;12     {					     
;;;13       GPIO_InitTypeDef  GPIO_InitStructure;
;;;14     	
;;;15     	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); 
00000c  2101              MOVS     r1,#1
00000e  2008              MOVS     r0,#8
000010  f7fffffe          BL       RCC_APB2PeriphClockCmd
;;;16     		
;;;17       GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10|GPIO_Pin_11;	
000014  f44f6040          MOV      r0,#0xc00
000018  f8ad0000          STRH     r0,[sp,#0]
;;;18       GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		
00001c  2010              MOVS     r0,#0x10
00001e  f88d0003          STRB     r0,[sp,#3]
;;;19       GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		 
000022  2003              MOVS     r0,#3
000024  f88d0002          STRB     r0,[sp,#2]
;;;20       GPIO_Init(GPIOB, &GPIO_InitStructure);					 
000028  4669              MOV      r1,sp
00002a  4893              LDR      r0,|L1.632|
00002c  f7fffffe          BL       GPIO_Init
;;;21     	
;;;22       GPIO_SetBits(GPIOB,GPIO_Pin_10|GPIO_Pin_11);						 //PB10,PB11 	
000030  f44f6140          MOV      r1,#0xc00
000034  4890              LDR      r0,|L1.632|
000036  f7fffffe          BL       GPIO_SetBits
;;;23      
;;;24     }
00003a  bd08              POP      {r3,pc}
;;;25     
                          ENDP

                  MPU_I2C_Init PROC
;;;26     void MPU_I2C_Init(void)
00003c  b508              PUSH     {r3,lr}
;;;27     {					     
;;;28       GPIO_InitTypeDef  GPIO_InitStructure;
;;;29     	
;;;30     	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB,ENABLE); 
00003e  2101              MOVS     r1,#1
000040  200c              MOVS     r0,#0xc
000042  f7fffffe          BL       RCC_APB2PeriphClockCmd
;;;31     		
;;;32       GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;	
000046  2001              MOVS     r0,#1
000048  f8ad0000          STRH     r0,[sp,#0]
;;;33       GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		
00004c  2010              MOVS     r0,#0x10
00004e  f88d0003          STRB     r0,[sp,#3]
;;;34       GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		 
000052  2003              MOVS     r0,#3
000054  f88d0002          STRB     r0,[sp,#2]
;;;35       GPIO_Init(GPIOB, &GPIO_InitStructure);	
000058  4669              MOV      r1,sp
00005a  4887              LDR      r0,|L1.632|
00005c  f7fffffe          BL       GPIO_Init
;;;36     
;;;37       GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;	
000060  2020              MOVS     r0,#0x20
000062  f8ad0000          STRH     r0,[sp,#0]
;;;38       GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		
000066  2010              MOVS     r0,#0x10
000068  f88d0003          STRB     r0,[sp,#3]
;;;39       GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		 
00006c  2003              MOVS     r0,#3
00006e  f88d0002          STRB     r0,[sp,#2]
;;;40       GPIO_Init(GPIOA, &GPIO_InitStructure);		
000072  4669              MOV      r1,sp
000074  4881              LDR      r0,|L1.636|
000076  f7fffffe          BL       GPIO_Init
;;;41     	
;;;42       //GPIO_SetBits(GPIOA,GPIO_Pin_5);						 //
;;;43     	GPIO_SetBits(GPIOB,GPIO_Pin_0);						 //
00007a  2101              MOVS     r1,#1
00007c  487e              LDR      r0,|L1.632|
00007e  f7fffffe          BL       GPIO_SetBits
;;;44      
;;;45     }
000082  bd08              POP      {r3,pc}
;;;46     
                          ENDP

                  MPU_I2C_Start PROC
;;;47     void MPU_I2C_Start(void)
000084  b510              PUSH     {r4,lr}
;;;48     {
;;;49     	MPU_SDA_OUT();     //sda
000086  487c              LDR      r0,|L1.632|
000088  6800              LDR      r0,[r0,#0]
00008a  f020000f          BIC      r0,r0,#0xf
00008e  497a              LDR      r1,|L1.632|
000090  6008              STR      r0,[r1,#0]
000092  4608              MOV      r0,r1
000094  6800              LDR      r0,[r0,#0]
000096  f0400003          ORR      r0,r0,#3
00009a  6008              STR      r0,[r1,#0]
;;;50     	MPU_I2C_SDA=1;	  	  
00009c  2001              MOVS     r0,#1
00009e  4978              LDR      r1,|L1.640|
0000a0  6008              STR      r0,[r1,#0]
;;;51     	MPU_I2C_SCL=1;
0000a2  4978              LDR      r1,|L1.644|
0000a4  f8c10194          STR      r0,[r1,#0x194]
;;;52     	MPU_I2C_Delay();
0000a8  f7fffffe          BL       MPU_I2C_Delay
;;;53      	MPU_I2C_SDA=0;
0000ac  2000              MOVS     r0,#0
0000ae  4974              LDR      r1,|L1.640|
0000b0  6008              STR      r0,[r1,#0]
;;;54     	MPU_I2C_Delay();
0000b2  f7fffffe          BL       MPU_I2C_Delay
;;;55     	MPU_I2C_SCL=0;
0000b6  2000              MOVS     r0,#0
0000b8  4972              LDR      r1,|L1.644|
0000ba  f8c10194          STR      r0,[r1,#0x194]
;;;56     }	  
0000be  bd10              POP      {r4,pc}
;;;57     //I2Cֹͣź
                          ENDP

                  MPU_I2C_Stop PROC
;;;58     void MPU_I2C_Stop(void)
0000c0  b510              PUSH     {r4,lr}
;;;59     {
;;;60     	MPU_SDA_OUT();//sda
0000c2  486d              LDR      r0,|L1.632|
0000c4  6800              LDR      r0,[r0,#0]
0000c6  f020000f          BIC      r0,r0,#0xf
0000ca  496b              LDR      r1,|L1.632|
0000cc  6008              STR      r0,[r1,#0]
0000ce  4608              MOV      r0,r1
0000d0  6800              LDR      r0,[r0,#0]
0000d2  f0400003          ORR      r0,r0,#3
0000d6  6008              STR      r0,[r1,#0]
;;;61     	MPU_I2C_SCL=0;
0000d8  2000              MOVS     r0,#0
0000da  496b              LDR      r1,|L1.648|
0000dc  6008              STR      r0,[r1,#0]
;;;62     	MPU_I2C_SDA=0;
0000de  496b              LDR      r1,|L1.652|
0000e0  f8c10180          STR      r0,[r1,#0x180]
;;;63      	MPU_I2C_Delay();
0000e4  f7fffffe          BL       MPU_I2C_Delay
;;;64     	MPU_I2C_SCL=1;  
0000e8  2001              MOVS     r0,#1
0000ea  4967              LDR      r1,|L1.648|
0000ec  6008              STR      r0,[r1,#0]
;;;65     	MPU_I2C_SDA=1;
0000ee  4967              LDR      r1,|L1.652|
0000f0  f8c10180          STR      r0,[r1,#0x180]
;;;66     	MPU_I2C_Delay();							   	
0000f4  f7fffffe          BL       MPU_I2C_Delay
;;;67     }
0000f8  bd10              POP      {r4,pc}
;;;68     
                          ENDP

                  MPU_I2C_Wait_Ack PROC
;;;70     //        0Ӧɹ
;;;71     unsigned char MPU_I2C_Wait_Ack(void)
0000fa  b510              PUSH     {r4,lr}
;;;72     {
;;;73     	unsigned char errTime=0;
0000fc  2400              MOVS     r4,#0
;;;74     	MPU_SDA_IN();      //SDAΪ  
0000fe  485e              LDR      r0,|L1.632|
000100  6800              LDR      r0,[r0,#0]
000102  f020000f          BIC      r0,r0,#0xf
000106  495c              LDR      r1,|L1.632|
000108  6008              STR      r0,[r1,#0]
00010a  4608              MOV      r0,r1
00010c  6800              LDR      r0,[r0,#0]
00010e  f0400008          ORR      r0,r0,#8
000112  6008              STR      r0,[r1,#0]
;;;75     	MPU_I2C_SDA=1;MPU_I2C_Delay();	   
000114  2001              MOVS     r0,#1
000116  495a              LDR      r1,|L1.640|
000118  6008              STR      r0,[r1,#0]
00011a  f7fffffe          BL       MPU_I2C_Delay
;;;76     	MPU_I2C_SCL=1;MPU_I2C_Delay();	 
00011e  2001              MOVS     r0,#1
000120  4958              LDR      r1,|L1.644|
000122  f8c10194          STR      r0,[r1,#0x194]
000126  f7fffffe          BL       MPU_I2C_Delay
;;;77     	while(MPU_READ_SDA)
00012a  e007              B        |L1.316|
                  |L1.300|
;;;78     	{ //
;;;79     		errTime++;
00012c  1c60              ADDS     r0,r4,#1
00012e  b2c4              UXTB     r4,r0
;;;80     		if(errTime>250)
000130  2cfa              CMP      r4,#0xfa
000132  dd03              BLE      |L1.316|
;;;81     		{
;;;82     			MPU_I2C_Stop();
000134  f7fffffe          BL       MPU_I2C_Stop
;;;83     			return 1;
000138  2001              MOVS     r0,#1
                  |L1.314|
;;;84     		}
;;;85     	}
;;;86     	MPU_I2C_SCL=0;
;;;87     	return 0;  
;;;88     } 
00013a  bd10              POP      {r4,pc}
                  |L1.316|
00013c  4850              LDR      r0,|L1.640|
00013e  3880              SUBS     r0,r0,#0x80           ;77
000140  6800              LDR      r0,[r0,#0]            ;77
000142  2800              CMP      r0,#0                 ;77
000144  d1f2              BNE      |L1.300|
000146  4950              LDR      r1,|L1.648|
000148  6008              STR      r0,[r1,#0]            ;86
00014a  bf00              NOP                            ;87
00014c  e7f5              B        |L1.314|
;;;89     
                          ENDP

                  MPU_I2C_Ack PROC
;;;90     //ACKӦ
;;;91     void MPU_I2C_Ack(void)
00014e  b510              PUSH     {r4,lr}
;;;92     {
;;;93     	MPU_I2C_SCL=0;
000150  2000              MOVS     r0,#0
000152  494d              LDR      r1,|L1.648|
000154  6008              STR      r0,[r1,#0]
;;;94     	MPU_SDA_OUT();
000156  4848              LDR      r0,|L1.632|
000158  6800              LDR      r0,[r0,#0]
00015a  f020000f          BIC      r0,r0,#0xf
00015e  4946              LDR      r1,|L1.632|
000160  6008              STR      r0,[r1,#0]
000162  4608              MOV      r0,r1
000164  6800              LDR      r0,[r0,#0]
000166  f0400003          ORR      r0,r0,#3
00016a  6008              STR      r0,[r1,#0]
;;;95     	MPU_I2C_SDA=0;
00016c  2000              MOVS     r0,#0
00016e  4947              LDR      r1,|L1.652|
000170  f8c10180          STR      r0,[r1,#0x180]
;;;96     	MPU_I2C_Delay();
000174  f7fffffe          BL       MPU_I2C_Delay
;;;97     	MPU_I2C_SCL=1;
000178  2001              MOVS     r0,#1
00017a  4943              LDR      r1,|L1.648|
00017c  6008              STR      r0,[r1,#0]
;;;98     	MPU_I2C_Delay();
00017e  f7fffffe          BL       MPU_I2C_Delay
;;;99     	MPU_I2C_SCL=0;
000182  2000              MOVS     r0,#0
000184  493f              LDR      r1,|L1.644|
000186  f8c10194          STR      r0,[r1,#0x194]
;;;100    }
00018a  bd10              POP      {r4,pc}
;;;101    //ACKӦ		    
                          ENDP

                  MPU_I2C_NAck PROC
;;;102    void MPU_I2C_NAck(void)
00018c  b510              PUSH     {r4,lr}
;;;103    {
;;;104    	MPU_I2C_SCL=0;
00018e  2000              MOVS     r0,#0
000190  493d              LDR      r1,|L1.648|
000192  6008              STR      r0,[r1,#0]
;;;105    	MPU_SDA_OUT();
000194  4838              LDR      r0,|L1.632|
000196  6800              LDR      r0,[r0,#0]
000198  f020000f          BIC      r0,r0,#0xf
00019c  4936              LDR      r1,|L1.632|
00019e  6008              STR      r0,[r1,#0]
0001a0  4608              MOV      r0,r1
0001a2  6800              LDR      r0,[r0,#0]
0001a4  f0400003          ORR      r0,r0,#3
0001a8  6008              STR      r0,[r1,#0]
;;;106    	MPU_I2C_SDA=1;
0001aa  2001              MOVS     r0,#1
0001ac  4937              LDR      r1,|L1.652|
0001ae  f8c10180          STR      r0,[r1,#0x180]
;;;107    	MPU_I2C_Delay();
0001b2  f7fffffe          BL       MPU_I2C_Delay
;;;108    	MPU_I2C_SCL=1;
0001b6  2001              MOVS     r0,#1
0001b8  4933              LDR      r1,|L1.648|
0001ba  6008              STR      r0,[r1,#0]
;;;109    	MPU_I2C_Delay();
0001bc  f7fffffe          BL       MPU_I2C_Delay
;;;110    	MPU_I2C_SCL=0;
0001c0  2000              MOVS     r0,#0
0001c2  4930              LDR      r1,|L1.644|
0001c4  f8c10194          STR      r0,[r1,#0x194]
;;;111    }					 				     
0001c8  bd10              POP      {r4,pc}
;;;112    		  
                          ENDP

                  MPU_I2C_Send_Byte PROC
;;;113    void MPU_I2C_Send_Byte(unsigned char x)
0001ca  b570              PUSH     {r4-r6,lr}
;;;114    {                        
0001cc  4604              MOV      r4,r0
;;;115      unsigned char i;   
;;;116    	MPU_SDA_OUT(); 	    
0001ce  482a              LDR      r0,|L1.632|
0001d0  6800              LDR      r0,[r0,#0]
0001d2  f020000f          BIC      r0,r0,#0xf
0001d6  4928              LDR      r1,|L1.632|
0001d8  6008              STR      r0,[r1,#0]
0001da  4608              MOV      r0,r1
0001dc  6800              LDR      r0,[r0,#0]
0001de  f0400003          ORR      r0,r0,#3
0001e2  6008              STR      r0,[r1,#0]
;;;117        MPU_I2C_SCL=0;              //ʱͿʼݴ
0001e4  2000              MOVS     r0,#0
0001e6  4928              LDR      r1,|L1.648|
0001e8  6008              STR      r0,[r1,#0]
;;;118        for(i=0;i<8;i++)
0001ea  2500              MOVS     r5,#0
0001ec  e011              B        |L1.530|
                  |L1.494|
;;;119        {              
;;;120            MPU_I2C_SDA=(x&0x80)>>7;
0001ee  09e0              LSRS     r0,r4,#7
0001f0  4923              LDR      r1,|L1.640|
0001f2  6008              STR      r0,[r1,#0]
;;;121            x<<=1; 	  
0001f4  0660              LSLS     r0,r4,#25
0001f6  0e04              LSRS     r4,r0,#24
;;;122    		MPU_I2C_SCL=1;
0001f8  2001              MOVS     r0,#1
0001fa  4922              LDR      r1,|L1.644|
0001fc  f8c10194          STR      r0,[r1,#0x194]
;;;123    		MPU_I2C_Delay(); 
000200  f7fffffe          BL       MPU_I2C_Delay
;;;124    		MPU_I2C_SCL=0;	
000204  2000              MOVS     r0,#0
000206  4920              LDR      r1,|L1.648|
000208  6008              STR      r0,[r1,#0]
;;;125    		MPU_I2C_Delay();
00020a  f7fffffe          BL       MPU_I2C_Delay
00020e  1c68              ADDS     r0,r5,#1              ;118
000210  b2c5              UXTB     r5,r0                 ;118
                  |L1.530|
000212  2d08              CMP      r5,#8                 ;118
000214  dbeb              BLT      |L1.494|
;;;126        }	 
;;;127    } 	    
000216  bd70              POP      {r4-r6,pc}
;;;128    
                          ENDP

                  MPU_I2C_Read_Byte PROC
;;;129    unsigned char MPU_I2C_Read_Byte(unsigned char ack)
000218  b570              PUSH     {r4-r6,lr}
;;;130    {
00021a  4605              MOV      r5,r0
;;;131    	unsigned char i,receive=0;
00021c  2400              MOVS     r4,#0
;;;132    	MPU_SDA_IN();//SDAΪ
00021e  4816              LDR      r0,|L1.632|
000220  6800              LDR      r0,[r0,#0]
000222  f020000f          BIC      r0,r0,#0xf
000226  4914              LDR      r1,|L1.632|
000228  6008              STR      r0,[r1,#0]
00022a  4608              MOV      r0,r1
00022c  6800              LDR      r0,[r0,#0]
00022e  f0400008          ORR      r0,r0,#8
000232  6008              STR      r0,[r1,#0]
;;;133        for(i=0;i<8;i++ )
000234  2600              MOVS     r6,#0
000236  e014              B        |L1.610|
                  |L1.568|
;;;134    	{
;;;135            MPU_I2C_SCL=0; 
000238  2000              MOVS     r0,#0
00023a  4913              LDR      r1,|L1.648|
00023c  6008              STR      r0,[r1,#0]
;;;136            MPU_I2C_Delay();
00023e  f7fffffe          BL       MPU_I2C_Delay
;;;137    		MPU_I2C_SCL=1;
000242  2001              MOVS     r0,#1
000244  490f              LDR      r1,|L1.644|
000246  f8c10194          STR      r0,[r1,#0x194]
;;;138            receive<<=1;
00024a  0660              LSLS     r0,r4,#25
00024c  0e04              LSRS     r4,r0,#24
;;;139            if(MPU_READ_SDA)receive++;   
00024e  480c              LDR      r0,|L1.640|
000250  3880              SUBS     r0,r0,#0x80
000252  6800              LDR      r0,[r0,#0]
000254  b108              CBZ      r0,|L1.602|
000256  1c60              ADDS     r0,r4,#1
000258  b2c4              UXTB     r4,r0
                  |L1.602|
;;;140    		MPU_I2C_Delay(); 
00025a  f7fffffe          BL       MPU_I2C_Delay
00025e  1c70              ADDS     r0,r6,#1              ;133
000260  b2c6              UXTB     r6,r0                 ;133
                  |L1.610|
000262  2e08              CMP      r6,#8                 ;133
000264  dbe8              BLT      |L1.568|
;;;141        }					 
;;;142        if (!ack)
000266  b915              CBNZ     r5,|L1.622|
;;;143            MPU_I2C_NAck();//nACK
000268  f7fffffe          BL       MPU_I2C_NAck
00026c  e001              B        |L1.626|
                  |L1.622|
;;;144        else
;;;145            MPU_I2C_Ack(); //ACK   
00026e  f7fffffe          BL       MPU_I2C_Ack
                  |L1.626|
;;;146        return receive;
000272  4620              MOV      r0,r4
;;;147    }
000274  bd70              POP      {r4-r6,pc}
;;;148    
                          ENDP

000276  0000              DCW      0x0000
                  |L1.632|
                          DCD      0x40010c00
                  |L1.636|
                          DCD      0x40010800
                  |L1.640|
                          DCD      0x42218180
                  |L1.644|
                          DCD      0x42210000
                  |L1.648|
                          DCD      0x42210194
                  |L1.652|
                          DCD      0x42218000
