; generated by ARM C/C++ Compiler, 5.03 [Build 24]
; 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 -I..\..\Libraries\STM32F10x_StdPeriph_Driver\inc -I..\..\Libraries\CMSIS\CM3\CoreSupport -I..\..\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x -I..\..\USER\INC -IC:\Keil\ARM\RV31\INC -IC:\Keil\ARM\CMSIS\Include -IC:\Keil\ARM\Inc\ST\STM32F10x -D__MICROLIB -DUSE_STDPERIPH_DRIVER -DSTM32F10X_HD --omf_browse=..\OBJ\usart.crf ..\..\USER\SRC\USART.c]
                          THUMB

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

                  _sys_exit PROC
;;;60     #pragma import(__use_no_semihosting) 
;;;61     _sys_exit(int x) 
000000  4601              MOV      r1,r0
;;;62     { 
;;;63     x = x; 
000002  bf00              NOP      
;;;64     } 
000004  4770              BX       lr
;;;65     struct __FILE 
                          ENDP

                  fputc PROC
;;;80       */
;;;81     PUTCHAR_PROTOTYPE
000006  b570              PUSH     {r4-r6,lr}
;;;82     {
000008  4604              MOV      r4,r0
00000a  460d              MOV      r5,r1
;;;83       	/* Place your implementation of fputc here */
;;;84       	/* e.g. write a character to the USART */
;;;85       
;;;86       	/* Loop until the end of transmission */
;;;87       	while (USART_GetFlagStatus(USART_COM1, USART_FLAG_TC) == RESET)
00000c  bf00              NOP      
                  |L1.14|
00000e  2140              MOVS     r1,#0x40
000010  48f8              LDR      r0,|L1.1012|
000012  f7fffffe          BL       USART_GetFlagStatus
000016  2800              CMP      r0,#0
000018  d0f9              BEQ      |L1.14|
;;;88       	{}
;;;89      	USART_SendData(USART_COM1, (uint8_t) ch);
00001a  b2e1              UXTB     r1,r4
00001c  48f5              LDR      r0,|L1.1012|
00001e  f7fffffe          BL       USART_SendData
;;;90       	return ch;
000022  4620              MOV      r0,r4
;;;91     }
000024  bd70              POP      {r4-r6,pc}
;;;92     ////////////////////////////////////////////////////
                          ENDP

                  USART_NvicCfg PROC
;;;94     ////////////////////////////////////////////////////////////////////////////////
;;;95     static void USART_NvicCfg(uint16_t IRQn, uint8_t prio)
000026  b538              PUSH     {r3-r5,lr}
;;;96     {
000028  4605              MOV      r5,r0
00002a  460c              MOV      r4,r1
;;;97     	NVIC_InitTypeDef NVIC_InitStructure;
;;;98     
;;;99       	/* Configure the NVIC Preemption Priority Bits */  
;;;100       	//NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
;;;101    	
;;;102    	/* Enable the USARTz Interrupt */
;;;103      	NVIC_InitStructure.NVIC_IRQChannel = IRQn;
00002c  b2e8              UXTB     r0,r5
00002e  f88d0000          STRB     r0,[sp,#0]
;;;104    	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = USART_NVIC_PREE_PRI;	//ռȼ
000032  2000              MOVS     r0,#0
000034  f88d0001          STRB     r0,[sp,#1]
;;;105        NVIC_InitStructure.NVIC_IRQChannelSubPriority = prio;						//Ӧȼ
000038  f88d4002          STRB     r4,[sp,#2]
;;;106       	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
00003c  2001              MOVS     r0,#1
00003e  f88d0003          STRB     r0,[sp,#3]
;;;107      	NVIC_Init(&NVIC_InitStructure);
000042  4668              MOV      r0,sp
000044  f7fffffe          BL       NVIC_Init
;;;108    }
000048  bd38              POP      {r3-r5,pc}
;;;109    
                          ENDP

                  USART_HardwareInit PROC
;;;110    static void USART_HardwareInit(COM_TypeDef COM, USART_InitTypeDef* USART_InitStruct)
00004a  b538              PUSH     {r3-r5,lr}
;;;111    {
00004c  4604              MOV      r4,r0
00004e  460d              MOV      r5,r1
;;;112    	GPIO_InitTypeDef GPIO_InitStructure;
;;;113    	
;;;114    	//ʼNVIC
;;;115    	USART_NvicCfg(COM_IRQn[COM], COM_Priority[COM]);	
000050  4ae9              LDR      r2,|L1.1016|
000052  5d11              LDRB     r1,[r2,r4]
000054  4ae9              LDR      r2,|L1.1020|
000056  f8320014          LDRH     r0,[r2,r4,LSL #1]
00005a  f7fffffe          BL       USART_NvicCfg
;;;116    	
;;;117    	//˿ڳʼ,
;;;118    	// Enable GPIO clock ,AFIOʱֻʹUSART3ӳʱſ->RCC_APB2Periph_AFIO
;;;119    	RCC_APB2PeriphClockCmd(COM_TX_PORT_CLK[COM] | COM_RX_PORT_CLK[COM], ENABLE);
00005e  49e8              LDR      r1,|L1.1024|
000060  f8511024          LDR      r1,[r1,r4,LSL #2]
000064  4ae7              LDR      r2,|L1.1028|
000066  f8522024          LDR      r2,[r2,r4,LSL #2]
00006a  ea410002          ORR      r0,r1,r2
00006e  2101              MOVS     r1,#1
000070  f7fffffe          BL       RCC_APB2PeriphClockCmd
;;;120    	
;;;121    	//USARTʱʹ Enable UART clock 
;;;122    	if (COM == COM1)
000074  b934              CBNZ     r4,|L1.132|
;;;123    	{	//USART1  ΪAPB2
;;;124    		RCC_APB2PeriphClockCmd(COM_USART_CLK[COM], ENABLE); 
000076  49e4              LDR      r1,|L1.1032|
000078  f8510024          LDR      r0,[r1,r4,LSL #2]
00007c  2101              MOVS     r1,#1
00007e  f7fffffe          BL       RCC_APB2PeriphClockCmd
000082  e005              B        |L1.144|
                  |L1.132|
;;;125    	}
;;;126    	else
;;;127    	{	//USART2-3ΪAPB1
;;;128    		RCC_APB1PeriphClockCmd(COM_USART_CLK[COM], ENABLE);
000084  49e0              LDR      r1,|L1.1032|
000086  f8510024          LDR      r0,[r1,r4,LSL #2]
00008a  2101              MOVS     r1,#1
00008c  f7fffffe          BL       RCC_APB1PeriphClockCmd
                  |L1.144|
;;;129    	}
;;;130    	
;;;131    	//USART Tx˿ Configure USART Tx as alternate function push-pull
;;;132    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
000090  2018              MOVS     r0,#0x18
000092  f88d0003          STRB     r0,[sp,#3]
;;;133    	GPIO_InitStructure.GPIO_Pin = COM_TX_PIN[COM];
000096  48dd              LDR      r0,|L1.1036|
000098  f8300014          LDRH     r0,[r0,r4,LSL #1]
00009c  f8ad0000          STRH     r0,[sp,#0]
;;;134    	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
0000a0  2003              MOVS     r0,#3
0000a2  f88d0002          STRB     r0,[sp,#2]
;;;135    	GPIO_Init(COM_TX_PORT[COM], &GPIO_InitStructure);
0000a6  49da              LDR      r1,|L1.1040|
0000a8  f8510024          LDR      r0,[r1,r4,LSL #2]
0000ac  4669              MOV      r1,sp
0000ae  f7fffffe          BL       GPIO_Init
;;;136    	
;;;137    	//USART Rx˿ Configure USART Rx as input floating 
;;;138    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
0000b2  2004              MOVS     r0,#4
0000b4  f88d0003          STRB     r0,[sp,#3]
;;;139    	GPIO_InitStructure.GPIO_Pin = COM_RX_PIN[COM];
0000b8  48d6              LDR      r0,|L1.1044|
0000ba  f8300014          LDRH     r0,[r0,r4,LSL #1]
0000be  f8ad0000          STRH     r0,[sp,#0]
;;;140    	GPIO_Init(COM_RX_PORT[COM], &GPIO_InitStructure);
0000c2  49d5              LDR      r1,|L1.1048|
0000c4  f8510024          LDR      r0,[r1,r4,LSL #2]
0000c8  4669              MOV      r1,sp
0000ca  f7fffffe          BL       GPIO_Init
;;;141    	
;;;142    	
;;;143    		
;;;144    	//USARTʼ
;;;145    	USART_Init(COM_USART[COM], USART_InitStruct);
0000ce  49d3              LDR      r1,|L1.1052|
0000d0  f8510024          LDR      r0,[r1,r4,LSL #2]
0000d4  4629              MOV      r1,r5
0000d6  f7fffffe          BL       USART_Init
;;;146    	
;;;147    	//жʹ
;;;148      	USART_ITConfig(COM_USART[COM], USART_IT_RXNE, ENABLE);
0000da  49d0              LDR      r1,|L1.1052|
0000dc  f8510024          LDR      r0,[r1,r4,LSL #2]
0000e0  2201              MOVS     r2,#1
0000e2  f2405125          MOV      r1,#0x525
0000e6  f7fffffe          BL       USART_ITConfig
;;;149       	//USART_ITConfig(USART_COM1, USART_IT_TXE, ENABLE);
;;;150    	
;;;151    	//ʹUSART
;;;152    	USART_Cmd(COM_USART[COM], ENABLE);
0000ea  49cc              LDR      r1,|L1.1052|
0000ec  f8510024          LDR      r0,[r1,r4,LSL #2]
0000f0  2101              MOVS     r1,#1
0000f2  f7fffffe          BL       USART_Cmd
;;;153    }
0000f6  bd38              POP      {r3-r5,pc}
;;;154    void USART_SendChar(COM_TypeDef COM, u8 ch_data)
                          ENDP

                  USART_SendChar PROC
0000f8  b570              PUSH     {r4-r6,lr}
;;;155    {
0000fa  4604              MOV      r4,r0
0000fc  460d              MOV      r5,r1
;;;156      	/* Loop until the end of transmission */
;;;157      	while (USART_GetFlagStatus(COM_USART[COM], USART_FLAG_TC) == RESET)
0000fe  bf00              NOP      
                  |L1.256|
000100  49c6              LDR      r1,|L1.1052|
000102  f8510024          LDR      r0,[r1,r4,LSL #2]
000106  2140              MOVS     r1,#0x40
000108  f7fffffe          BL       USART_GetFlagStatus
00010c  2800              CMP      r0,#0
00010e  d0f7              BEQ      |L1.256|
;;;158      	{
;;;159    		;
;;;160    	}
;;;161    	USART_SendData(COM_USART[COM], (u8)ch_data);
000110  49c2              LDR      r1,|L1.1052|
000112  f8510024          LDR      r0,[r1,r4,LSL #2]
000116  4629              MOV      r1,r5
000118  f7fffffe          BL       USART_SendData
;;;162    }
00011c  bd70              POP      {r4-r6,pc}
;;;163    
                          ENDP

                  USART1_Init PROC
;;;164    void USART1_Init(u32 baud_rate)
00011e  b51f              PUSH     {r0-r4,lr}
;;;165    {
000120  4604              MOV      r4,r0
;;;166    	/* USARTx configured as follow:
;;;167            - BaudRate = baud_rate baud  
;;;168            - 8λ Word Length = 8 Bits
;;;169            - 1λֹͣλ One Stop Bit
;;;170            - No parity
;;;171            - Hardware flow control disabled (RTS and CTS signals)
;;;172            - Receive and transmit enabled
;;;173      	*/
;;;174    	USART_InitTypeDef USART_InitStructure;
;;;175    	
;;;176    	USART_InitStructure.USART_BaudRate = baud_rate;
000122  9400              STR      r4,[sp,#0]
;;;177      	USART_InitStructure.USART_WordLength = USART_WordLength_8b;
000124  2000              MOVS     r0,#0
000126  f8ad0004          STRH     r0,[sp,#4]
;;;178      	USART_InitStructure.USART_StopBits = USART_StopBits_1;
00012a  f8ad0006          STRH     r0,[sp,#6]
;;;179      	USART_InitStructure.USART_Parity = USART_Parity_No;
00012e  f8ad0008          STRH     r0,[sp,#8]
;;;180      	USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
000132  f8ad000c          STRH     r0,[sp,#0xc]
;;;181      	USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
000136  200c              MOVS     r0,#0xc
000138  f8ad000a          STRH     r0,[sp,#0xa]
;;;182    
;;;183      	USART_HardwareInit(COM1, &USART_InitStructure);
00013c  4669              MOV      r1,sp
00013e  2000              MOVS     r0,#0
000140  f7fffffe          BL       USART_HardwareInit
;;;184    }
000144  bd1f              POP      {r0-r4,pc}
;;;185    void USART2_Init(u32 baud_rate)
                          ENDP

                  USART2_Init PROC
000146  b51f              PUSH     {r0-r4,lr}
;;;186    {
000148  4604              MOV      r4,r0
;;;187    	/* USARTx configured as follow:
;;;188            - BaudRate = baud_rate baud  
;;;189            - 8λ Word Length = 8 Bits
;;;190            - 1λֹͣλ One Stop Bit
;;;191            - No parity
;;;192            - Hardware flow control disabled (RTS and CTS signals)
;;;193            - Receive and transmit enabled
;;;194      */
;;;195    	USART_InitTypeDef USART_InitStructure;
;;;196    	
;;;197    	USART_InitStructure.USART_BaudRate = baud_rate;
00014a  9400              STR      r4,[sp,#0]
;;;198      	USART_InitStructure.USART_WordLength = USART_WordLength_8b;
00014c  2000              MOVS     r0,#0
00014e  f8ad0004          STRH     r0,[sp,#4]
;;;199      	USART_InitStructure.USART_StopBits = USART_StopBits_1;
000152  f8ad0006          STRH     r0,[sp,#6]
;;;200      	USART_InitStructure.USART_Parity = USART_Parity_No;
000156  f8ad0008          STRH     r0,[sp,#8]
;;;201      	USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
00015a  f8ad000c          STRH     r0,[sp,#0xc]
;;;202      	USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
00015e  200c              MOVS     r0,#0xc
000160  f8ad000a          STRH     r0,[sp,#0xa]
;;;203    
;;;204      	USART_HardwareInit(COM2, &USART_InitStructure);
000164  4669              MOV      r1,sp
000166  2001              MOVS     r0,#1
000168  f7fffffe          BL       USART_HardwareInit
;;;205    }
00016c  bd1f              POP      {r0-r4,pc}
;;;206    
                          ENDP

                  USART1_RxIntHandler PROC
;;;213    /////////////////////////////////////////////////////////////////////////////////////////////
;;;214    void USART1_RxIntHandler(void)
00016e  b510              PUSH     {r4,lr}
;;;215    {
;;;216    	if(USART_GetITStatus(USART_COM1, USART_IT_RXNE) != RESET)
000170  f2405125          MOV      r1,#0x525
000174  489f              LDR      r0,|L1.1012|
000176  f7fffffe          BL       USART_GetITStatus
00017a  b130              CBZ      r0,|L1.394|
;;;217    	{
;;;218    		//Read one byte from the receive data register 
;;;219    		COM1_RxBuff[Index] = USART_ReceiveData(USART_COM1);
00017c  489d              LDR      r0,|L1.1012|
00017e  f7fffffe          BL       USART_ReceiveData
000182  49a7              LDR      r1,|L1.1056|
000184  4aa7              LDR      r2,|L1.1060|
000186  7812              LDRB     r2,[r2,#0]  ; Index
000188  5488              STRB     r0,[r1,r2]
                  |L1.394|
;;;220    
;;;221    	}
;;;222    	if(Index < Frame_Length)
00018a  48a6              LDR      r0,|L1.1060|
00018c  7800              LDRB     r0,[r0,#0]  ; Index
00018e  49a6              LDR      r1,|L1.1064|
000190  7809              LDRB     r1,[r1,#0]  ; Frame_Length
000192  4288              CMP      r0,r1
000194  da04              BGE      |L1.416|
;;;223    	{
;;;224    		Index ++;
000196  48a3              LDR      r0,|L1.1060|
000198  7800              LDRB     r0,[r0,#0]  ; Index
00019a  1c40              ADDS     r0,r0,#1
00019c  49a1              LDR      r1,|L1.1060|
00019e  7008              STRB     r0,[r1,#0]
                  |L1.416|
;;;225    	}
;;;226    
;;;227    }
0001a0  bd10              POP      {r4,pc}
;;;228    void USART2_RxIntHandler(void)
                          ENDP

                  USART2_RxIntHandler PROC
0001a2  b510              PUSH     {r4,lr}
;;;229    {
;;;230    	if(USART_GetITStatus(USART_COM2, USART_IT_RXNE) != RESET)
0001a4  f2405125          MOV      r1,#0x525
0001a8  48a0              LDR      r0,|L1.1068|
0001aa  f7fffffe          BL       USART_GetITStatus
0001ae  b158              CBZ      r0,|L1.456|
;;;231    	{
;;;232    
;;;233    		RxBuffer2[RxCounter2++] = USART_ReceiveData(USART_COM2);
0001b0  489e              LDR      r0,|L1.1068|
0001b2  f7fffffe          BL       USART_ReceiveData
0001b6  b2c1              UXTB     r1,r0
0001b8  489d              LDR      r0,|L1.1072|
0001ba  7802              LDRB     r2,[r0,#0]  ; RxCounter2
0001bc  7800              LDRB     r0,[r0,#0]  ; RxCounter2
0001be  1c40              ADDS     r0,r0,#1
0001c0  4b9b              LDR      r3,|L1.1072|
0001c2  7018              STRB     r0,[r3,#0]
0001c4  489b              LDR      r0,|L1.1076|
0001c6  5481              STRB     r1,[r0,r2]
                  |L1.456|
;;;234    	}
;;;235    	
;;;236    }
0001c8  bd10              POP      {r4,pc}
;;;237    void USART1_Transmit(u8 ch_data)
                          ENDP

                  USART1_Transmit PROC
0001ca  b510              PUSH     {r4,lr}
;;;238    {
0001cc  4604              MOV      r4,r0
;;;239    	// Loop until the end of transmission
;;;240      	while (USART_GetFlagStatus(USART_COM1, USART_FLAG_TC) == RESET)
0001ce  bf00              NOP      
                  |L1.464|
0001d0  2140              MOVS     r1,#0x40
0001d2  4888              LDR      r0,|L1.1012|
0001d4  f7fffffe          BL       USART_GetFlagStatus
0001d8  2800              CMP      r0,#0
0001da  d0f9              BEQ      |L1.464|
;;;241      	{
;;;242    		;
;;;243    	}
;;;244    	USART_SendData(USART_COM1, (u8)ch_data);
0001dc  4621              MOV      r1,r4
0001de  4885              LDR      r0,|L1.1012|
0001e0  f7fffffe          BL       USART_SendData
;;;245    }
0001e4  bd10              POP      {r4,pc}
;;;246    
                          ENDP

                  USART2_Transmit PROC
;;;247    void USART2_Transmit(u8 ch_data)
0001e6  b510              PUSH     {r4,lr}
;;;248    {
0001e8  4604              MOV      r4,r0
;;;249    	// Loop until the end of transmission 
;;;250      	while (USART_GetFlagStatus(USART_COM2, USART_FLAG_TC) == RESET)
0001ea  bf00              NOP      
                  |L1.492|
0001ec  2140              MOVS     r1,#0x40
0001ee  488f              LDR      r0,|L1.1068|
0001f0  f7fffffe          BL       USART_GetFlagStatus
0001f4  2800              CMP      r0,#0
0001f6  d0f9              BEQ      |L1.492|
;;;251      	{
;;;252    		;
;;;253    	}
;;;254    	USART_SendData(USART_COM2, (u8)ch_data);
0001f8  4621              MOV      r1,r4
0001fa  488c              LDR      r0,|L1.1068|
0001fc  f7fffffe          BL       USART_SendData
;;;255    }
000200  bd10              POP      {r4,pc}
;;;256    
                          ENDP

                  USART_Debug PROC
;;;257    //////////////////////////////ϲӦú/////////////////////////////////////
;;;258    void USART_Debug(u8 debug_data)
000202  b510              PUSH     {r4,lr}
;;;259    {
000204  4604              MOV      r4,r0
;;;260    	USART_Transmit(0xaa);
000206  20aa              MOVS     r0,#0xaa
000208  f7fffffe          BL       USART1_Transmit
;;;261    	USART_Transmit(debug_data);
00020c  4620              MOV      r0,r4
00020e  f7fffffe          BL       USART1_Transmit
;;;262    	USART_Transmit(0x55);
000212  2055              MOVS     r0,#0x55
000214  f7fffffe          BL       USART1_Transmit
;;;263    }
000218  bd10              POP      {r4,pc}
;;;264    void USART_SendLine(s32 Data ,
                          ENDP

                  USART_SendLine PROC
00021a  e92d5ff0          PUSH     {r4-r12,lr}
;;;265    					u8 Is_H, 
;;;266    				    u8 Line_ID)
;;;267    {
00021e  4605              MOV      r5,r0
000220  4688              MOV      r8,r1
000222  4616              MOV      r6,r2
;;;268    	u8 Temp_A_L;				
;;;269    	u8 Temp_A_H;
;;;270    	u8 Temp_B_L;
;;;271    	s8 Temp_B_H;
;;;272    	
;;;273    	u8 ch_XOR = 0;
000224  2400              MOVS     r4,#0
;;;274    	
;;;275    	Temp_A_L = Data;
000226  f00509ff          AND      r9,r5,#0xff
;;;276    	Temp_A_H = Data>>8;
00022a  f3c52a07          UBFX     r10,r5,#8,#8
;;;277    	Temp_B_L = Data >> 16;
00022e  f3c54b07          UBFX     r11,r5,#16,#8
;;;278    	Temp_B_H = Data >> 24;
000232  162f              ASRS     r7,r5,#24
;;;279    	
;;;280    	ch_XOR ^= 0x09;
000234  f0840409          EOR      r4,r4,#9
;;;281    	ch_XOR ^= Line_ID;
000238  4074              EORS     r4,r4,r6
;;;282    	
;;;283    	ch_XOR ^= Temp_B_H;
00023a  ea840007          EOR      r0,r4,r7
00023e  b2c4              UXTB     r4,r0
;;;284    	ch_XOR ^= Temp_B_L;
000240  ea84040b          EOR      r4,r4,r11
;;;285    	ch_XOR ^= Temp_A_H;
000244  ea84040a          EOR      r4,r4,r10
;;;286    	ch_XOR ^= Temp_A_L;
000248  ea840409          EOR      r4,r4,r9
;;;287    	
;;;288    	USART_Transmit(0xaa);
00024c  20aa              MOVS     r0,#0xaa
00024e  f7fffffe          BL       USART1_Transmit
;;;289    	USART_Transmit(0x09);
000252  2009              MOVS     r0,#9
000254  f7fffffe          BL       USART1_Transmit
;;;290    	USART_Transmit(Line_ID);
000258  4630              MOV      r0,r6
00025a  f7fffffe          BL       USART1_Transmit
;;;291    	
;;;292    	if(Is_H)							//Ƿȷֽڣ					
00025e  f1b80f00          CMP      r8,#0
000262  d00c              BEQ      |L1.638|
;;;293    	{
;;;294    		USART_Transmit(Temp_B_H);		//									
000264  b2f8              UXTB     r0,r7
000266  f7fffffe          BL       USART1_Transmit
;;;295    		USART_Transmit(Temp_B_L);
00026a  4658              MOV      r0,r11
00026c  f7fffffe          BL       USART1_Transmit
;;;296    		USART_Transmit(Temp_A_H);
000270  4650              MOV      r0,r10
000272  f7fffffe          BL       USART1_Transmit
;;;297    		USART_Transmit(Temp_A_L);
000276  4648              MOV      r0,r9
000278  f7fffffe          BL       USART1_Transmit
00027c  e00b              B        |L1.662|
                  |L1.638|
;;;298    	}
;;;299    	else
;;;300    	{
;;;301    		USART_Transmit(Temp_A_L);		//									
00027e  4648              MOV      r0,r9
000280  f7fffffe          BL       USART1_Transmit
;;;302    		USART_Transmit(Temp_A_H);
000284  4650              MOV      r0,r10
000286  f7fffffe          BL       USART1_Transmit
;;;303    		USART_Transmit(Temp_B_L);
00028a  4658              MOV      r0,r11
00028c  f7fffffe          BL       USART1_Transmit
;;;304    		USART_Transmit(Temp_B_H);
000290  b2f8              UXTB     r0,r7
000292  f7fffffe          BL       USART1_Transmit
                  |L1.662|
;;;305    	}
;;;306    	
;;;307    	USART_Transmit(ch_XOR);
000296  4620              MOV      r0,r4
000298  f7fffffe          BL       USART1_Transmit
;;;308    	USART_Transmit(0x55);
00029c  2055              MOVS     r0,#0x55
00029e  f7fffffe          BL       USART1_Transmit
;;;309    }
0002a2  e8bd9ff0          POP      {r4-r12,pc}
;;;310    void USART_SendString(unsigned char *p_STR)
                          ENDP

                  USART_SendString PROC
0002a6  b510              PUSH     {r4,lr}
;;;311    {
0002a8  4604              MOV      r4,r0
;;;312    	while(*p_STR)
0002aa  e003              B        |L1.692|
                  |L1.684|
;;;313    	{
;;;314    		USART_Transmit(*p_STR ++);
0002ac  f8140b01          LDRB     r0,[r4],#1
0002b0  f7fffffe          BL       USART1_Transmit
                  |L1.692|
0002b4  7820              LDRB     r0,[r4,#0]            ;312
0002b6  2800              CMP      r0,#0                 ;312
0002b8  d1f8              BNE      |L1.684|
;;;315    	}
;;;316    }
0002ba  bd10              POP      {r4,pc}
;;;317    /////////////////////////////////
                          ENDP

                  USART_GetChar PROC
;;;318    u8 USART_GetChar(u8* p_array, u8 frame_len)
0002bc  b510              PUSH     {r4,lr}
;;;319    {
0002be  4603              MOV      r3,r0
0002c0  460a              MOV      r2,r1
;;;320    	u8 i = 0;
0002c2  2100              MOVS     r1,#0
;;;321    	if(Frame_Length != frame_len)
0002c4  4858              LDR      r0,|L1.1064|
0002c6  7800              LDRB     r0,[r0,#0]  ; Frame_Length
0002c8  4290              CMP      r0,r2
0002ca  d001              BEQ      |L1.720|
;;;322    	{
;;;323    		Frame_Length = frame_len;
0002cc  4856              LDR      r0,|L1.1064|
0002ce  7002              STRB     r2,[r0,#0]
                  |L1.720|
;;;324    	}
;;;325    	if(Index == Frame_Length)
0002d0  4854              LDR      r0,|L1.1060|
0002d2  7800              LDRB     r0,[r0,#0]  ; Index
0002d4  4c54              LDR      r4,|L1.1064|
0002d6  7824              LDRB     r4,[r4,#0]  ; Frame_Length
0002d8  42a0              CMP      r0,r4
0002da  d10f              BNE      |L1.764|
;;;326    	{
;;;327    		for(i=0; i< Frame_Length; i++)
0002dc  2100              MOVS     r1,#0
0002de  e004              B        |L1.746|
                  |L1.736|
;;;328    		{
;;;329    			p_array[i] = COM1_RxBuff[i];
0002e0  484f              LDR      r0,|L1.1056|
0002e2  5c40              LDRB     r0,[r0,r1]
0002e4  5458              STRB     r0,[r3,r1]
0002e6  1c48              ADDS     r0,r1,#1              ;327
0002e8  b2c1              UXTB     r1,r0                 ;327
                  |L1.746|
0002ea  484f              LDR      r0,|L1.1064|
0002ec  7800              LDRB     r0,[r0,#0]            ;327  ; Frame_Length
0002ee  4281              CMP      r1,r0                 ;327
0002f0  dbf6              BLT      |L1.736|
;;;330    		}
;;;331    		Index = 0;
0002f2  2000              MOVS     r0,#0
0002f4  4c4b              LDR      r4,|L1.1060|
0002f6  7020              STRB     r0,[r4,#0]
;;;332    		return 1;
0002f8  2001              MOVS     r0,#1
                  |L1.762|
;;;333    	}
;;;334    	return 0;
;;;335    }
0002fa  bd10              POP      {r4,pc}
                  |L1.764|
0002fc  2000              MOVS     r0,#0                 ;334
0002fe  e7fc              B        |L1.762|
;;;336    u8 USART_GetRate(s32* p_rate)
                          ENDP

                  USART_GetRate PROC
000300  b57e              PUSH     {r1-r6,lr}
;;;337    {
000302  4605              MOV      r5,r0
;;;338    	u8 temp_array[9] = {0};
000304  2000              MOVS     r0,#0
000306  9000              STR      r0,[sp,#0]
000308  9001              STR      r0,[sp,#4]
00030a  9002              STR      r0,[sp,#8]
;;;339    	u8 i =0;										
00030c  2400              MOVS     r4,#0
;;;340    	s32 temp_rate = 0;
00030e  2600              MOVS     r6,#0
;;;341    	static u8 ch_cmd = 0;					//λþ̬֤ܱ
;;;342    											//һνյֵʧ		
;;;343    	if(USART_GetChar(temp_array, 9))		//յݲŽУָ
000310  2109              MOVS     r1,#9
000312  4668              MOV      r0,sp
000314  f7fffffe          BL       USART_GetChar
000318  b1c0              CBZ      r0,|L1.844|
;;;344    	{										//˲ѯٶ				
;;;345    		if((temp_array[0] == 0xaa)&&(temp_array[8] == 0x55))
00031a  f89d0000          LDRB     r0,[sp,#0]
00031e  28aa              CMP      r0,#0xaa
000320  d114              BNE      |L1.844|
000322  f89d0008          LDRB     r0,[sp,#8]
000326  2855              CMP      r0,#0x55
000328  d110              BNE      |L1.844|
;;;346    		{
;;;347    			for(i = 3; i < 7; i ++)
00032a  2403              MOVS     r4,#3
00032c  e007              B        |L1.830|
                  |L1.814|
;;;348    			{
;;;349    				temp_rate |= temp_array[i]<<((i-3)<<3);//8*(i-3)				
00032e  f81d0004          LDRB     r0,[sp,r4]
000332  1ee1              SUBS     r1,r4,#3
000334  00c9              LSLS     r1,r1,#3
000336  4088              LSLS     r0,r0,r1
000338  4306              ORRS     r6,r6,r0
00033a  1c60              ADDS     r0,r4,#1              ;347
00033c  b2c4              UXTB     r4,r0                 ;347
                  |L1.830|
00033e  2c07              CMP      r4,#7                 ;347
000340  dbf5              BLT      |L1.814|
;;;350    			}
;;;351    			ch_cmd = temp_array[2];			//ȡλ						
000342  f89d0002          LDRB     r0,[sp,#2]
000346  493c              LDR      r1,|L1.1080|
000348  7008              STRB     r0,[r1,#0]
;;;352    			*p_rate = temp_rate;			//ȡλ						
00034a  602e              STR      r6,[r5,#0]
                  |L1.844|
;;;353    		}
;;;354    	}
;;;355    	return ch_cmd;
00034c  483a              LDR      r0,|L1.1080|
00034e  7800              LDRB     r0,[r0,#0]  ; ch_cmd
;;;356    }
000350  bd7e              POP      {r1-r6,pc}
;;;357    
                          ENDP

                  Prints PROC
;;;368    ********************************************************************/
;;;369    void Prints(const u8 * pd)
000352  b510              PUSH     {r4,lr}
;;;370    {
000354  4604              MOV      r4,r0
;;;371    	while((*pd)!='\0') //ֱַ0Ž
000356  e003              B        |L1.864|
                  |L1.856|
;;;372    	{
;;;373    		UartPutChar(*pd); //һַ
000358  7820              LDRB     r0,[r4,#0]
00035a  f7fffffe          BL       USART1_Transmit
;;;374    		pd++;  //ƶһַ
00035e  1c64              ADDS     r4,r4,#1
                  |L1.864|
000360  7820              LDRB     r0,[r4,#0]            ;371
000362  2800              CMP      r0,#0                 ;371
000364  d1f8              BNE      |L1.856|
;;;375    	}
;;;376    }
000366  bd10              POP      {r4,pc}
;;;377    ////////////////////////End of function//////////////////////////////
                          ENDP

                  PrintLongInt PROC
;;;383    ********************************************************************/
;;;384    void PrintLongInt(u32 x)
000368  b53e              PUSH     {r1-r5,lr}
;;;385    {
00036a  4605              MOV      r5,r0
;;;386     	s8 i;
;;;387     	u8 display_buffer[10];
;;;388    
;;;389    	for(i=9;i>=0;i--)
00036c  2409              MOVS     r4,#9
00036e  e00c              B        |L1.906|
                  |L1.880|
;;;390    	{
;;;391    		display_buffer[i]='0'+x%10;
000370  200a              MOVS     r0,#0xa
000372  fbb5f1f0          UDIV     r1,r5,r0
000376  fb005011          MLS      r0,r0,r1,r5
00037a  3030              ADDS     r0,r0,#0x30
00037c  f80d0004          STRB     r0,[sp,r4]
;;;392    		x/=10;
000380  200a              MOVS     r0,#0xa
000382  fbb5f5f0          UDIV     r5,r5,r0
000386  1e60              SUBS     r0,r4,#1              ;389
000388  b244              SXTB     r4,r0                 ;389
                  |L1.906|
00038a  2c00              CMP      r4,#0                 ;389
00038c  daf0              BGE      |L1.880|
;;;393    	}
;;;394    	for(i=0;i<9;i++)
00038e  2400              MOVS     r4,#0
000390  e006              B        |L1.928|
                  |L1.914|
;;;395    	{
;;;396    		if(display_buffer[i]!='0')
000392  f81d0004          LDRB     r0,[sp,r4]
000396  2830              CMP      r0,#0x30
000398  d000              BEQ      |L1.924|
;;;397    		{
;;;398    			break;	
00039a  e003              B        |L1.932|
                  |L1.924|
00039c  1c60              ADDS     r0,r4,#1              ;394
00039e  b244              SXTB     r4,r0                 ;394
                  |L1.928|
0003a0  2c09              CMP      r4,#9                 ;394
0003a2  dbf6              BLT      |L1.914|
                  |L1.932|
0003a4  bf00              NOP      
;;;399    		}
;;;400    	}
;;;401    	for(;i<10;i++)
0003a6  e005              B        |L1.948|
                  |L1.936|
;;;402    	{
;;;403    		UartPutChar(display_buffer[i]);	
0003a8  f81d0004          LDRB     r0,[sp,r4]
0003ac  f7fffffe          BL       USART1_Transmit
0003b0  1c60              ADDS     r0,r4,#1              ;401
0003b2  b244              SXTB     r4,r0                 ;401
                  |L1.948|
0003b4  2c0a              CMP      r4,#0xa               ;401
0003b6  dbf7              BLT      |L1.936|
;;;404    	}
;;;405    }
0003b8  bd3e              POP      {r1-r5,pc}
;;;406    ////////////////////////End of function//////////////////////////////
                          ENDP

                  PrintShortIntHex PROC
;;;413    ********************************************************************/
;;;414    void PrintShortIntHex(u16 x)
0003ba  b57c              PUSH     {r2-r6,lr}
;;;415    {
0003bc  4604              MOV      r4,r0
;;;416     	u8 i;
;;;417     	u8 display_buffer[7];
;;;418     	display_buffer[6]=0;
0003be  2000              MOVS     r0,#0
0003c0  f88d0006          STRB     r0,[sp,#6]
;;;419     	display_buffer[0]='0';
0003c4  2030              MOVS     r0,#0x30
0003c6  f88d0000          STRB     r0,[sp,#0]
;;;420     	display_buffer[1]='x';
0003ca  2078              MOVS     r0,#0x78
0003cc  f88d0001          STRB     r0,[sp,#1]
;;;421     	for(i=5;i>=2;i--) //תΪ4ֽڵHEXֵ
0003d0  2505              MOVS     r5,#5
0003d2  e008              B        |L1.998|
                  |L1.980|
;;;422     	{
;;;423    	  	display_buffer[i]=HexTable[(x&0xf)];
0003d4  f004000f          AND      r0,r4,#0xf
0003d8  4918              LDR      r1,|L1.1084|
0003da  5c08              LDRB     r0,[r1,r0]
0003dc  f80d0005          STRB     r0,[sp,r5]
;;;424    	  	x>>=4;
0003e0  1124              ASRS     r4,r4,#4
0003e2  1e68              SUBS     r0,r5,#1              ;421
0003e4  b2c5              UXTB     r5,r0                 ;421
                  |L1.998|
0003e6  2d02              CMP      r5,#2                 ;421
0003e8  daf4              BGE      |L1.980|
;;;425     	}
;;;426     	Prints(display_buffer);
0003ea  4668              MOV      r0,sp
0003ec  f7fffffe          BL       Prints
;;;427    }
0003f0  bd7c              POP      {r2-r6,pc}
0003f2  0000              DCW      0x0000
                  |L1.1012|
                          DCD      0x40013800
                  |L1.1016|
                          DCD      COM_Priority
                  |L1.1020|
                          DCD      COM_IRQn
                  |L1.1024|
                          DCD      COM_TX_PORT_CLK
                  |L1.1028|
                          DCD      COM_RX_PORT_CLK
                  |L1.1032|
                          DCD      COM_USART_CLK
                  |L1.1036|
                          DCD      COM_TX_PIN
                  |L1.1040|
                          DCD      COM_TX_PORT
                  |L1.1044|
                          DCD      COM_RX_PIN
                  |L1.1048|
                          DCD      COM_RX_PORT
                  |L1.1052|
                          DCD      COM_USART
                  |L1.1056|
                          DCD      COM1_RxBuff
                  |L1.1060|
                          DCD      Index
                  |L1.1064|
                          DCD      Frame_Length
                  |L1.1068|
                          DCD      0x40004400
                  |L1.1072|
                          DCD      RxCounter2
                  |L1.1076|
                          DCD      RxBuffer2
                  |L1.1080|
                          DCD      ch_cmd
                  |L1.1084|
                          DCD      HexTable
                          ENDP

                  PrintHex PROC
;;;434    ********************************************************************/
;;;435    void PrintHex(u8 x)
000440  b510              PUSH     {r4,lr}
;;;436    {
000442  4604              MOV      r4,r0
;;;437    	Printc('0');
000444  2030              MOVS     r0,#0x30
000446  f7fffffe          BL       USART1_Transmit
;;;438    	Printc('x');
00044a  2078              MOVS     r0,#0x78
00044c  f7fffffe          BL       USART1_Transmit
;;;439    	Printc(HexTable[x>>4]);
000450  4907              LDR      r1,|L1.1136|
000452  eb011124          ADD      r1,r1,r4,ASR #4
000456  7808              LDRB     r0,[r1,#0]
000458  f7fffffe          BL       USART1_Transmit
;;;440    	Printc(HexTable[x&0xf]);
00045c  f004010f          AND      r1,r4,#0xf
000460  4a03              LDR      r2,|L1.1136|
000462  5c50              LDRB     r0,[r2,r1]
000464  f7fffffe          BL       USART1_Transmit
;;;441    	Printc(' ');
000468  2020              MOVS     r0,#0x20
00046a  f7fffffe          BL       USART1_Transmit
;;;442    }
00046e  bd10              POP      {r4,pc}
;;;443    ////////////////////////End of function//////////////////////////////
                          ENDP

                  |L1.1136|
                          DCD      HexTable

                          AREA ||.bss||, DATA, NOINIT, ALIGN=0

                  COM1_RxBuff
                          %        30
                  RxBuffer2
                          %        10

                          AREA ||.constdata||, DATA, READONLY, ALIGN=2

                  COM_USART_CLK
                          DCD      0x00004000
                          DCD      0x00020000
                  COM_TX_PORT_CLK
                          DCD      0x00000004
                          DCD      0x00000004
                  COM_RX_PORT_CLK
                          DCD      0x00000004
                          DCD      0x00000004
                  COM_TX_PIN
000018  02000004          DCW      0x0200,0x0004
                  COM_RX_PIN
00001c  04000008          DCW      0x0400,0x0008
                  COM_IRQn
000020  00250026          DCW      0x0025,0x0026
                  COM_Priority
000024  0001              DCB      0x00,0x01
                  HexTable
000026  3031              DCB      0x30,0x31
000028  32333435          DCB      0x32,0x33,0x34,0x35
00002c  36373839          DCB      0x36,0x37,0x38,0x39
000030  41424344          DCB      0x41,0x42,0x43,0x44
000034  4546              DCB      0x45,0x46

                          AREA ||.data||, DATA, ALIGN=2

                  COM_USART
                          DCD      0x40013800
                          DCD      0x40004400
                  COM_TX_PORT
                          DCD      0x40010800
                          DCD      0x40010800
                  COM_RX_PORT
                          DCD      0x40010800
                          DCD      0x40010800
                  Index
000018  00                DCB      0x00
                  Frame_Length
000019  00                DCB      0x00
                  RxCounter2
00001a  00                DCB      0x00
                  ch_cmd
00001b  00                DCB      0x00
                  __stdout
                          DCD      0x00000000
