; generated by Component: ARM Compiler 5.06 update 6 (build 750) Tool: ArmCC [4d3637]
; commandline ArmCC [--list --debug -c --asm --interleave -o.\obj\usart.o --asm_dir=.\list\ --list_dir=.\list\ --depend=.\obj\usart.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\usart.crf user\usart.c]
                          THUMB

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

                  USART1_init PROC
;;;2      
;;;3      void USART1_init(void)
000000  b500              PUSH     {lr}
;;;4      {
000002  b085              SUB      sp,sp,#0x14
;;;5          
;;;6          GPIO_InitTypeDef GPIO_InitStructure;
;;;7      
;;;8      	  USART_InitTypeDef USART_InitStructure;
;;;9          RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); //
000004  2101              MOVS     r1,#1
000006  0388              LSLS     r0,r1,#14
000008  f7fffffe          BL       RCC_APB2PeriphClockCmd
;;;10         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //?? 
00000c  2101              MOVS     r1,#1
00000e  2004              MOVS     r0,#4
000010  f7fffffe          BL       RCC_APB2PeriphClockCmd
;;;11     
;;;12         USART_DeInit(USART1);  //????5  
000014  487f              LDR      r0,|L1.532|
000016  f7fffffe          BL       USART_DeInit
;;;13         /*  USART1 Rx (PA.10) Ϊ */
;;;14       GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
00001a  f44f6080          MOV      r0,#0x400
00001e  f8ad0010          STRH     r0,[sp,#0x10]
;;;15       GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
000022  2004              MOVS     r0,#4
000024  f88d0013          STRB     r0,[sp,#0x13]
;;;16       GPIO_Init(GPIOA, &GPIO_InitStructure);
000028  a904              ADD      r1,sp,#0x10
00002a  487b              LDR      r0,|L1.536|
00002c  f7fffffe          BL       GPIO_Init
;;;17       
;;;18       /*  USART1 Tx (PA.09) Ϊù */
;;;19       GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
000030  f44f7000          MOV      r0,#0x200
000034  f8ad0010          STRH     r0,[sp,#0x10]
;;;20       GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
000038  2003              MOVS     r0,#3
00003a  f88d0012          STRB     r0,[sp,#0x12]
;;;21       GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
00003e  2018              MOVS     r0,#0x18
000040  f88d0013          STRB     r0,[sp,#0x13]
;;;22       GPIO_Init(GPIOA, &GPIO_InitStructure);	 
000044  a904              ADD      r1,sp,#0x10
000046  4874              LDR      r0,|L1.536|
000048  f7fffffe          BL       GPIO_Init
;;;23     
;;;24       USART_InitStructure.USART_BaudRate =115200;						                    //115200bps
00004c  f44f30e1          MOV      r0,#0x1c200
000050  9000              STR      r0,[sp,#0]
;;;25       USART_InitStructure.USART_WordLength = USART_WordLength_8b;		                //λ8λ
000052  2000              MOVS     r0,#0
000054  f8ad0004          STRH     r0,[sp,#4]
;;;26       USART_InitStructure.USART_StopBits = USART_StopBits_1;			                //ֹͣλ1λ
000058  f8ad0006          STRH     r0,[sp,#6]
;;;27       USART_InitStructure.USART_Parity = USART_Parity_No;				                //Уλ
00005c  f8ad0008          STRH     r0,[sp,#8]
;;;28       USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;   //Ӳ
000060  f8ad000c          STRH     r0,[sp,#0xc]
;;;29       USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;					//շģʽ
000064  200c              MOVS     r0,#0xc
000066  f8ad000a          STRH     r0,[sp,#0xa]
;;;30     
;;;31       USART_Init(USART1, &USART_InitStructure);							                //ôڲ
00006a  4669              MOV      r1,sp
00006c  4869              LDR      r0,|L1.532|
00006e  f7fffffe          BL       USART_Init
;;;32       USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);                                    //ʹܽж
000072  2201              MOVS     r2,#1
000074  f2405125          MOV      r1,#0x525
000078  4866              LDR      r0,|L1.532|
00007a  f7fffffe          BL       USART_ITConfig
;;;33       /* ʹܴ1 */
;;;34       USART_Cmd(USART1, ENABLE);	
00007e  2101              MOVS     r1,#1
000080  4864              LDR      r0,|L1.532|
000082  f7fffffe          BL       USART_Cmd
;;;35     }
000086  b005              ADD      sp,sp,#0x14
000088  bd00              POP      {pc}
;;;36     
                          ENDP

                  itoa PROC
;;;47     **********************************************************/
;;;48     char *itoa(int value, char *string, int radix)
00008a  b5f0              PUSH     {r4-r7,lr}
;;;49     {
00008c  4603              MOV      r3,r0
00008e  460d              MOV      r5,r1
000090  4616              MOV      r6,r2
;;;50         int     i, d;
;;;51         int     flag = 0;
000092  2700              MOVS     r7,#0
;;;52         char    *ptr = string;
000094  4629              MOV      r1,r5
;;;53     
;;;54         /* This implementation only works for decimal numbers. */
;;;55         if (radix != 10)
000096  2e0a              CMP      r6,#0xa
000098  d003              BEQ      |L1.162|
;;;56         {
;;;57             *ptr = 0;
00009a  2000              MOVS     r0,#0
00009c  7008              STRB     r0,[r1,#0]
;;;58             return string;
00009e  4628              MOV      r0,r5
                  |L1.160|
;;;59         }
;;;60     
;;;61         if (!value)
;;;62         {
;;;63             *ptr++ = 0x30;
;;;64             *ptr = 0;
;;;65             return string;
;;;66         }
;;;67     
;;;68         /* if this is a negative value insert the minus sign. */
;;;69         if (value < 0)
;;;70         {
;;;71             *ptr++ = '-';
;;;72     
;;;73             /* Make the value positive. */
;;;74             value *= -1;
;;;75         }
;;;76     
;;;77         for (i = 10000; i > 0; i /= 10)
;;;78         {
;;;79             d = value / i;
;;;80     
;;;81             if (d || flag)
;;;82             {
;;;83                 *ptr++ = (char)(d + 0x30);
;;;84                 value -= (d * i);
;;;85                 flag = 1;
;;;86             }
;;;87         }
;;;88     
;;;89         /* Null terminate the string. */
;;;90         *ptr = 0;
;;;91     
;;;92         return string;
;;;93     
;;;94     } /* NCL_Itoa */
0000a0  bdf0              POP      {r4-r7,pc}
                  |L1.162|
0000a2  b933              CBNZ     r3,|L1.178|
0000a4  2030              MOVS     r0,#0x30              ;63
0000a6  f8010b01          STRB     r0,[r1],#1            ;63
0000aa  2000              MOVS     r0,#0                 ;64
0000ac  7008              STRB     r0,[r1,#0]            ;64
0000ae  4628              MOV      r0,r5                 ;65
0000b0  e7f6              B        |L1.160|
                  |L1.178|
0000b2  2b00              CMP      r3,#0                 ;69
0000b4  da03              BGE      |L1.190|
0000b6  202d              MOVS     r0,#0x2d              ;71
0000b8  f8010b01          STRB     r0,[r1],#1            ;71
0000bc  425b              RSBS     r3,r3,#0              ;74
                  |L1.190|
0000be  f2427210          MOV      r2,#0x2710            ;77
0000c2  e00d              B        |L1.224|
                  |L1.196|
0000c4  fb93f4f2          SDIV     r4,r3,r2              ;79
0000c8  b904              CBNZ     r4,|L1.204|
0000ca  b137              CBZ      r7,|L1.218|
                  |L1.204|
0000cc  f1040030          ADD      r0,r4,#0x30           ;83
0000d0  f8010b01          STRB     r0,[r1],#1            ;83
0000d4  fb043312          MLS      r3,r4,r2,r3           ;84
0000d8  2701              MOVS     r7,#1                 ;85
                  |L1.218|
0000da  200a              MOVS     r0,#0xa               ;77
0000dc  fb92f2f0          SDIV     r2,r2,r0              ;77
                  |L1.224|
0000e0  2a00              CMP      r2,#0                 ;77
0000e2  dcef              BGT      |L1.196|
0000e4  2000              MOVS     r0,#0                 ;90
0000e6  7008              STRB     r0,[r1,#0]            ;90
0000e8  4628              MOV      r0,r5                 ;92
0000ea  e7d9              B        |L1.160|
;;;95     /****************************************************************************
                          ENDP

                  USART_OUT PROC
;;;108    ****************************************************************************/
;;;109    void USART_OUT(USART_TypeDef* USARTx, uint8_t *Data,...){ 
0000ec  b40f              PUSH     {r0-r3}
0000ee  b570              PUSH     {r4-r6,lr}
0000f0  b086              SUB      sp,sp,#0x18
0000f2  4606              MOV      r6,r0
;;;110    
;;;111    	const char *s;
;;;112        int d;
;;;113       
;;;114        char buf[16];
;;;115        va_list ap;
;;;116        va_start(ap, Data);
0000f4  a80c              ADD      r0,sp,#0x30
0000f6  9001              STR      r0,[sp,#4]
;;;117    
;;;118    	while(*Data!=0){				                          //жǷ񵽴ַ
0000f8  e083              B        |L1.514|
                  |L1.250|
;;;119    		if(*Data==0x5c){									  //'\'
0000fa  980b              LDR      r0,[sp,#0x2c]
0000fc  7800              LDRB     r0,[r0,#0]
0000fe  285c              CMP      r0,#0x5c
000100  d12c              BNE      |L1.348|
;;;120    			switch (*++Data){
000102  980b              LDR      r0,[sp,#0x2c]
000104  1c40              ADDS     r0,r0,#1
000106  900b              STR      r0,[sp,#0x2c]
000108  7800              LDRB     r0,[r0,#0]
00010a  286e              CMP      r0,#0x6e
00010c  d009              BEQ      |L1.290|
00010e  2872              CMP      r0,#0x72
000110  d10f              BNE      |L1.306|
;;;121    				case 'r':							          //س
;;;122    					USART_SendData(USARTx, 0x0d);	   
000112  210d              MOVS     r1,#0xd
000114  4630              MOV      r0,r6
000116  f7fffffe          BL       USART_SendData
;;;123    
;;;124    					Data++;
00011a  980b              LDR      r0,[sp,#0x2c]
00011c  1c40              ADDS     r0,r0,#1
00011e  900b              STR      r0,[sp,#0x2c]
;;;125    					break;
000120  e01b              B        |L1.346|
                  |L1.290|
;;;126    				case 'n':							          //з
;;;127    					USART_SendData(USARTx, 0x0a);	
000122  210a              MOVS     r1,#0xa
000124  4630              MOV      r0,r6
000126  f7fffffe          BL       USART_SendData
;;;128    					Data++;
00012a  980b              LDR      r0,[sp,#0x2c]
00012c  1c40              ADDS     r0,r0,#1
00012e  900b              STR      r0,[sp,#0x2c]
;;;129    					break;
000130  e013              B        |L1.346|
                  |L1.306|
;;;130    				
;;;131    				default:
;;;132    					USART_SendData(USARTx, 0x5c);
000132  215c              MOVS     r1,#0x5c
000134  4630              MOV      r0,r6
000136  f7fffffe          BL       USART_SendData
;;;133    					while(USART_GetFlagStatus(USARTx, USART_FLAG_TC)==RESET);		 	
00013a  bf00              NOP      
                  |L1.316|
00013c  2140              MOVS     r1,#0x40
00013e  4630              MOV      r0,r6
000140  f7fffffe          BL       USART_GetFlagStatus
000144  2800              CMP      r0,#0
000146  d0f9              BEQ      |L1.316|
;;;134    					USART_SendData(USARTx, *Data);		 					
000148  980b              LDR      r0,[sp,#0x2c]
00014a  7801              LDRB     r1,[r0,#0]
00014c  4630              MOV      r0,r6
00014e  f7fffffe          BL       USART_SendData
;;;135    					Data++;
000152  980b              LDR      r0,[sp,#0x2c]
000154  1c40              ADDS     r0,r0,#1
000156  900b              STR      r0,[sp,#0x2c]
;;;136    				    break;
000158  bf00              NOP      
                  |L1.346|
00015a  e04b              B        |L1.500|
                  |L1.348|
;;;137    			}  			 
;;;138    		}
;;;139    	
;;;140    		else if(*Data=='%'){									  //
00015c  980b              LDR      r0,[sp,#0x2c]
00015e  7800              LDRB     r0,[r0,#0]
000160  2825              CMP      r0,#0x25
000162  d140              BNE      |L1.486|
;;;141    			switch (*++Data){				
000164  980b              LDR      r0,[sp,#0x2c]
000166  1c40              ADDS     r0,r0,#1
000168  900b              STR      r0,[sp,#0x2c]
00016a  7800              LDRB     r0,[r0,#0]
00016c  2864              CMP      r0,#0x64
00016e  d018              BEQ      |L1.418|
000170  2873              CMP      r0,#0x73
000172  d133              BNE      |L1.476|
;;;142    				case 's':										  //ַ
;;;143                    	s = va_arg(ap, const char *);
000174  9801              LDR      r0,[sp,#4]
000176  c810              LDM      r0!,{r4}
000178  9001              STR      r0,[sp,#4]
;;;144                    	for ( ; *s; s++) {
00017a  e00b              B        |L1.404|
                  |L1.380|
;;;145                        	USART_SendData(USARTx,*s);
00017c  7821              LDRB     r1,[r4,#0]
00017e  4630              MOV      r0,r6
000180  f7fffffe          BL       USART_SendData
;;;146    						while(USART_GetFlagStatus(USARTx, USART_FLAG_TC)==RESET);
000184  bf00              NOP      
                  |L1.390|
000186  2140              MOVS     r1,#0x40
000188  4630              MOV      r0,r6
00018a  f7fffffe          BL       USART_GetFlagStatus
00018e  2800              CMP      r0,#0
000190  d0f9              BEQ      |L1.390|
000192  1c64              ADDS     r4,r4,#1              ;144
                  |L1.404|
000194  7820              LDRB     r0,[r4,#0]            ;144
000196  2800              CMP      r0,#0                 ;144
000198  d1f0              BNE      |L1.380|
;;;147                    	}
;;;148    					Data++;
00019a  980b              LDR      r0,[sp,#0x2c]
00019c  1c40              ADDS     r0,r0,#1
00019e  900b              STR      r0,[sp,#0x2c]
;;;149                    	break;
0001a0  e020              B        |L1.484|
                  |L1.418|
;;;150                	case 'd':										  //ʮ
;;;151                    	d = va_arg(ap, int);
0001a2  9801              LDR      r0,[sp,#4]
0001a4  c820              LDM      r0!,{r5}
0001a6  9001              STR      r0,[sp,#4]
;;;152                    	itoa(d, buf, 10);
0001a8  220a              MOVS     r2,#0xa
0001aa  a902              ADD      r1,sp,#8
0001ac  4628              MOV      r0,r5
0001ae  f7fffffe          BL       itoa
;;;153                    	for (s = buf; *s; s++) {
0001b2  ac02              ADD      r4,sp,#8
0001b4  e00b              B        |L1.462|
                  |L1.438|
;;;154                        	USART_SendData(USARTx,*s);
0001b6  7821              LDRB     r1,[r4,#0]
0001b8  4630              MOV      r0,r6
0001ba  f7fffffe          BL       USART_SendData
;;;155    						while(USART_GetFlagStatus(USARTx, USART_FLAG_TC)==RESET);
0001be  bf00              NOP      
                  |L1.448|
0001c0  2140              MOVS     r1,#0x40
0001c2  4630              MOV      r0,r6
0001c4  f7fffffe          BL       USART_GetFlagStatus
0001c8  2800              CMP      r0,#0
0001ca  d0f9              BEQ      |L1.448|
0001cc  1c64              ADDS     r4,r4,#1              ;153
                  |L1.462|
0001ce  7820              LDRB     r0,[r4,#0]            ;153
0001d0  2800              CMP      r0,#0                 ;153
0001d2  d1f0              BNE      |L1.438|
;;;156                    	}
;;;157    					Data++;
0001d4  980b              LDR      r0,[sp,#0x2c]
0001d6  1c40              ADDS     r0,r0,#1
0001d8  900b              STR      r0,[sp,#0x2c]
;;;158                    	break;
0001da  e003              B        |L1.484|
                  |L1.476|
;;;159    				default:
;;;160    					Data++;
0001dc  980b              LDR      r0,[sp,#0x2c]
0001de  1c40              ADDS     r0,r0,#1
0001e0  900b              STR      r0,[sp,#0x2c]
;;;161    				    break;
0001e2  bf00              NOP      
                  |L1.484|
0001e4  e006              B        |L1.500|
                  |L1.486|
;;;162    			}		 
;;;163    		}
;;;164    		else USART_SendData(USARTx, *Data++);
0001e6  980b              LDR      r0,[sp,#0x2c]
0001e8  f8101b01          LDRB     r1,[r0],#1
0001ec  900b              STR      r0,[sp,#0x2c]
0001ee  4630              MOV      r0,r6
0001f0  f7fffffe          BL       USART_SendData
                  |L1.500|
;;;165    		while(USART_GetFlagStatus(USARTx, USART_FLAG_TC)==RESET);
0001f4  bf00              NOP      
                  |L1.502|
0001f6  2140              MOVS     r1,#0x40
0001f8  4630              MOV      r0,r6
0001fa  f7fffffe          BL       USART_GetFlagStatus
0001fe  2800              CMP      r0,#0
000200  d0f9              BEQ      |L1.502|
                  |L1.514|
000202  980b              LDR      r0,[sp,#0x2c]         ;118
000204  7800              LDRB     r0,[r0,#0]            ;118
000206  2800              CMP      r0,#0                 ;118
000208  f47faf77          BNE      |L1.250|
;;;166    	}
;;;167    }
00020c  b006              ADD      sp,sp,#0x18
00020e  bc70              POP      {r4-r6}
000210  f85dfb14          LDR      pc,[sp],#0x14
;;;168    
                          ENDP

                  |L1.532|
                          DCD      0x40013800
                  |L1.536|
                          DCD      0x40010800
