; generated by Component: ARM Compiler 5.06 update 7 (build 960) Tool: ArmCC [4d365d]
; commandline ArmCC [--list --split_sections --debug -c --asm --interleave -o.\flash\obj\bsp_uart_fifo.o --asm_dir=.\Flash\List\ --list_dir=.\Flash\List\ --depend=.\flash\obj\bsp_uart_fifo.d --cpu=Cortex-M3 --apcs=interwork -O1 --diag_suppress=9931,870 -I..\..\Libraries\CMSIS\Device\ST\STM32F10x\Include -I..\..\Libraries\STM32F10x_StdPeriph_Driver\inc -I..\..\Libraries\STM32_USB-FS-Device_Driver\inc -I..\..\Libraries\CMSIS\Include -I..\..\User\bsp -I..\..\User\bsp\inc -I..\..\User\app\inc -I..\..\User -ID:\Arm\Packs\Keil\STM32F1xx_DFP\2.4.1\Device\Include -D__MICROLIB -D__UVISION_VERSION=536 -DSTM32F10X_HD -DUSE_STDPERIPH_DRIVER -DSTM32F10X_HD --omf_browse=.\flash\obj\bsp_uart_fifo.crf ..\..\User\bsp\src\bsp_uart_fifo.c]
                          THUMB

                          AREA ||i.ComToUart||, CODE, READONLY, ALIGN=2

                  ComToUart PROC
;;;92     */
;;;93     UART_T *ComToUart(COM_PORT_E _ucPort)
000000  2800              CMP      r0,#0
;;;94     {
000002  d009              BEQ      |L1.24|
;;;95     	if (_ucPort == COM1)
;;;96     	{
;;;97     		#if UART1_FIFO_EN == 1
;;;98     			return &g_tUart1;
;;;99     		#else
;;;100    			return 0;
;;;101    		#endif
;;;102    	}
;;;103    	else if (_ucPort == COM2)
000004  2801              CMP      r0,#1
000006  d009              BEQ      |L1.28|
;;;104    	{
;;;105    		#if UART2_FIFO_EN == 1
;;;106    			return &g_tUart2;
;;;107    		#else
;;;108    			return 0;
;;;109    		#endif
;;;110    	}
;;;111    	else if (_ucPort == COM3)
000008  2802              CMP      r0,#2
00000a  d009              BEQ      |L1.32|
;;;112    	{
;;;113    		#if UART3_FIFO_EN == 1
;;;114    			return &g_tUart3;
;;;115    		#else
;;;116    			return 0;
;;;117    		#endif
;;;118    	}
;;;119    	else if (_ucPort == COM4)
00000c  2803              CMP      r0,#3
00000e  d009              BEQ      |L1.36|
;;;120    	{
;;;121    		#if UART4_FIFO_EN == 1
;;;122    			return &g_tUart4;
;;;123    		#else
;;;124    			return 0;
;;;125    		#endif
;;;126    	}
;;;127    	else if (_ucPort == COM5)
000010  2804              CMP      r0,#4
000012  d009              BEQ      |L1.40|
;;;128    	{
;;;129    		#if UART5_FIFO_EN == 1
;;;130    			return &g_tUart5;
;;;131    		#else
;;;132    			return 0;
;;;133    		#endif
;;;134    	}
;;;135    	else
;;;136    	{
;;;137    		/* 不做任何处理 */
;;;138    		return 0;
000014  2000              MOVS     r0,#0
;;;139    	}
;;;140    }
000016  4770              BX       lr
                  |L1.24|
000018  4804              LDR      r0,|L1.44|
00001a  4770              BX       lr
                  |L1.28|
00001c  2000              MOVS     r0,#0                 ;108
00001e  4770              BX       lr
                  |L1.32|
000020  2000              MOVS     r0,#0                 ;116
000022  4770              BX       lr
                  |L1.36|
000024  2000              MOVS     r0,#0                 ;124
000026  4770              BX       lr
                  |L1.40|
000028  2000              MOVS     r0,#0                 ;132
00002a  4770              BX       lr
;;;141    
                          ENDP

                  |L1.44|
                          DCD      ||.bss||+0x20

                          AREA ||i.ConfigUartNVIC||, CODE, READONLY, ALIGN=1

                  ConfigUartNVIC PROC
;;;774    */
;;;775    static void ConfigUartNVIC(void)
000000  b508              PUSH     {r3,lr}
;;;776    {
;;;777    	NVIC_InitTypeDef NVIC_InitStructure;
;;;778    
;;;779    	/* Configure the NVIC Preemption Priority Bits */
;;;780    	/*	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);  --- 在 bsp.c 中 bsp_Init() 中配置中断优先级组 */
;;;781    
;;;782    #if UART1_FIFO_EN == 1
;;;783    	/* 使能串口1中断 */
;;;784    	NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
000002  2025              MOVS     r0,#0x25
000004  f88d0000          STRB     r0,[sp,#0]
;;;785    	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
000008  2000              MOVS     r0,#0
00000a  f88d0002          STRB     r0,[sp,#2]
;;;786    	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
00000e  2001              MOVS     r0,#1
000010  f88d0003          STRB     r0,[sp,#3]
;;;787    	NVIC_Init(&NVIC_InitStructure);
000014  4668              MOV      r0,sp
000016  f7fffffe          BL       NVIC_Init
;;;788    #endif
;;;789    
;;;790    #if UART2_FIFO_EN == 1
;;;791    	/* 使能串口2中断 */
;;;792    	NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
;;;793    	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
;;;794    	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
;;;795    	NVIC_Init(&NVIC_InitStructure);
;;;796    #endif
;;;797    
;;;798    #if UART3_FIFO_EN == 1
;;;799    	/* 使能串口3中断t */
;;;800    	NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;
;;;801    	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
;;;802    	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
;;;803    	NVIC_Init(&NVIC_InitStructure);
;;;804    #endif
;;;805    
;;;806    #if UART4_FIFO_EN == 1
;;;807    	/* 使能串口4中断t */
;;;808    	NVIC_InitStructure.NVIC_IRQChannel = UART4_IRQn;
;;;809    	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;
;;;810    	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
;;;811    	NVIC_Init(&NVIC_InitStructure);
;;;812    #endif
;;;813    
;;;814    #if UART5_FIFO_EN == 1
;;;815    	/* 使能串口5中断t */
;;;816    	NVIC_InitStructure.NVIC_IRQChannel = UART5_IRQn;
;;;817    	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 4;
;;;818    	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
;;;819    	NVIC_Init(&NVIC_InitStructure);
;;;820    #endif
;;;821    
;;;822    #if UART6_FIFO_EN == 1
;;;823    	/* 使能串口6中断t */
;;;824    	NVIC_InitStructure.NVIC_IRQChannel = USART6_IRQn;
;;;825    	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 5;
;;;826    	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
;;;827    	NVIC_Init(&NVIC_InitStructure);
;;;828    #endif
;;;829    }
00001a  bd08              POP      {r3,pc}
;;;830    
                          ENDP


                          AREA ||i.InitHardUart||, CODE, READONLY, ALIGN=2

                  InitHardUart PROC
;;;534    */
;;;535    static void InitHardUart(void)
000000  b510              PUSH     {r4,lr}
;;;536    {
000002  b086              SUB      sp,sp,#0x18
;;;537    	GPIO_InitTypeDef GPIO_InitStructure;
;;;538    	USART_InitTypeDef USART_InitStructure;
;;;539    
;;;540    #if UART1_FIFO_EN == 1		/* 串口1 TX = PA9   RX = PA10 或 TX = PB6   RX = PB7*/
;;;541    
;;;542    	/* 第1步：打开GPIO和USART部件的时钟 */
;;;543    	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);
000004  2101              MOVS     r1,#1
000006  2005              MOVS     r0,#5
000008  f7fffffe          BL       RCC_APB2PeriphClockCmd
;;;544    	RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
00000c  2101              MOVS     r1,#1
00000e  0388              LSLS     r0,r1,#14
000010  f7fffffe          BL       RCC_APB2PeriphClockCmd
;;;545    
;;;546    	/* 第2步：将USART Tx的GPIO配置为推挽复用模式 */
;;;547    	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
000014  f44f7000          MOV      r0,#0x200
000018  f8ad0014          STRH     r0,[sp,#0x14]
;;;548    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
00001c  2018              MOVS     r0,#0x18
00001e  f88d0017          STRB     r0,[sp,#0x17]
;;;549    	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
000022  2003              MOVS     r0,#3
000024  f88d0016          STRB     r0,[sp,#0x16]
;;;550    	GPIO_Init(GPIOA, &GPIO_InitStructure);
000028  4c19              LDR      r4,|L3.144|
00002a  a905              ADD      r1,sp,#0x14
00002c  4620              MOV      r0,r4
00002e  f7fffffe          BL       GPIO_Init
;;;551    
;;;552    	/* 第3步：将USART Rx的GPIO配置为浮空输入模式
;;;553    		由于CPU复位后，GPIO缺省都是浮空输入模式，因此下面这个步骤不是必须的
;;;554    		但是，我还是建议加上便于阅读，并且防止其它地方修改了这个口线的设置参数
;;;555    	*/
;;;556    	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
000032  1521              ASRS     r1,r4,#20
000034  f8ad1014          STRH     r1,[sp,#0x14]
;;;557    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
000038  2104              MOVS     r1,#4
00003a  f88d1017          STRB     r1,[sp,#0x17]
;;;558    	GPIO_Init(GPIOA, &GPIO_InitStructure);
00003e  a905              ADD      r1,sp,#0x14
000040  4620              MOV      r0,r4
000042  f7fffffe          BL       GPIO_Init
;;;559    	
;;;560    	/* 第4步： 配置串口硬件参数 */
;;;561    	USART_InitStructure.USART_BaudRate = UART1_BAUD;	/* 波特率 */
000046  f44f30e1          MOV      r0,#0x1c200
00004a  9001              STR      r0,[sp,#4]
;;;562    	USART_InitStructure.USART_WordLength = USART_WordLength_8b;
00004c  2000              MOVS     r0,#0
00004e  f8ad0008          STRH     r0,[sp,#8]
;;;563    	USART_InitStructure.USART_StopBits = USART_StopBits_1;
000052  f8ad000a          STRH     r0,[sp,#0xa]
;;;564    	USART_InitStructure.USART_Parity = USART_Parity_No ;
000056  f8ad000c          STRH     r0,[sp,#0xc]
;;;565    	USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
00005a  f8ad0010          STRH     r0,[sp,#0x10]
;;;566    	USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
00005e  200c              MOVS     r0,#0xc
000060  f8ad000e          STRH     r0,[sp,#0xe]
;;;567    	USART_Init(USART1, &USART_InitStructure);
000064  4c0b              LDR      r4,|L3.148|
000066  a901              ADD      r1,sp,#4
000068  4620              MOV      r0,r4
00006a  f7fffffe          BL       USART_Init
;;;568    
;;;569    	USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);	/* 使能接收中断 */
00006e  2201              MOVS     r2,#1
000070  f2405125          MOV      r1,#0x525
000074  4620              MOV      r0,r4
000076  f7fffffe          BL       USART_ITConfig
;;;570    	/*
;;;571    		USART_ITConfig(USART1, USART_IT_TXE, ENABLE);
;;;572    		注意: 不要在此处打开发送中断
;;;573    		发送中断使能在SendUart()函数打开
;;;574    	*/
;;;575    	USART_Cmd(USART1, ENABLE);		/* 使能串口 */
00007a  2101              MOVS     r1,#1
00007c  4620              MOV      r0,r4
00007e  f7fffffe          BL       USART_Cmd
;;;576    
;;;577    	/* CPU的小缺陷：串口配置好，如果直接Send，则第1个字节发送不出去
;;;578    		如下语句解决第1个字节无法正确发送出去的问题 */
;;;579    	USART_ClearFlag(USART1, USART_FLAG_TC);     /* 清发送完成标志，Transmission Complete flag */
000082  2140              MOVS     r1,#0x40
000084  4620              MOV      r0,r4
000086  f7fffffe          BL       USART_ClearFlag
;;;580    #endif
;;;581    
;;;582    #if UART2_FIFO_EN == 1		/* 串口2 TX = PA2， RX = PA3  */
;;;583    	/* 第1步：打开GPIO和USART部件的时钟 */
;;;584    	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);
;;;585    	RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
;;;586    
;;;587    	/* 第2步：将USART Tx的GPIO配置为推挽复用模式 */
;;;588    	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
;;;589    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
;;;590    	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
;;;591    	GPIO_Init(GPIOA, &GPIO_InitStructure);
;;;592    
;;;593    	/* 第3步：将USART Rx的GPIO配置为浮空输入模式
;;;594    		由于CPU复位后，GPIO缺省都是浮空输入模式，因此下面这个步骤不是必须的
;;;595    		但是，我还是建议加上便于阅读，并且防止其它地方修改了这个口线的设置参数
;;;596    	*/
;;;597    	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
;;;598    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
;;;599    	GPIO_Init(GPIOA, &GPIO_InitStructure);
;;;600    	/*  第3步已经做了，因此这步可以不做
;;;601    		GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
;;;602    	*/
;;;603    	GPIO_Init(GPIOA, &GPIO_InitStructure);
;;;604    
;;;605    	/* 第4步： 配置串口硬件参数 */
;;;606    	USART_InitStructure.USART_BaudRate = UART2_BAUD;	/* 波特率 */
;;;607    	USART_InitStructure.USART_WordLength = USART_WordLength_8b;
;;;608    	USART_InitStructure.USART_StopBits = USART_StopBits_1;
;;;609    	USART_InitStructure.USART_Parity = USART_Parity_No ;
;;;610    	USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
;;;611    	USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;		/* 仅选择接收模式 */
;;;612    	USART_Init(USART2, &USART_InitStructure);
;;;613    
;;;614    	USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);	/* 使能接收中断 */
;;;615    	/*
;;;616    		USART_ITConfig(USART1, USART_IT_TXE, ENABLE);
;;;617    		注意: 不要在此处打开发送中断
;;;618    		发送中断使能在SendUart()函数打开
;;;619    	*/
;;;620    	USART_Cmd(USART2, ENABLE);		/* 使能串口 */
;;;621    
;;;622    	/* CPU的小缺陷：串口配置好，如果直接Send，则第1个字节发送不出去
;;;623    		如下语句解决第1个字节无法正确发送出去的问题 */
;;;624    	USART_ClearFlag(USART2, USART_FLAG_TC);     /* 清发送完成标志，Transmission Complete flag */
;;;625    #endif
;;;626    
;;;627    #if UART3_FIFO_EN == 1			/* 串口3 TX = PB10   RX = PB11 */
;;;628    
;;;629    	/* 配置 PB2为推挽输出，用于切换 RS485芯片的收发状态 */
;;;630    	{
;;;631    		RCC_APB2PeriphClockCmd(RCC_RS485_TXEN, ENABLE);
;;;632    
;;;633    		GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
;;;634    		GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
;;;635    		GPIO_InitStructure.GPIO_Pin = PIN_RS485_TXEN;
;;;636    		GPIO_Init(PORT_RS485_TXEN, &GPIO_InitStructure);
;;;637    	}
;;;638    
;;;639    	/* 第1步： 开启GPIO和UART时钟 */
;;;640    	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);
;;;641    	RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);
;;;642    
;;;643    	/* 第2步：将USART Tx的GPIO配置为推挽复用模式 */
;;;644    	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
;;;645    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
;;;646    	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
;;;647    	GPIO_Init(GPIOB, &GPIO_InitStructure);
;;;648    
;;;649    	/* 第3步：将USART Rx的GPIO配置为浮空输入模式
;;;650    		由于CPU复位后，GPIO缺省都是浮空输入模式，因此下面这个步骤不是必须的
;;;651    		但是，我还是建议加上便于阅读，并且防止其它地方修改了这个口线的设置参数
;;;652    	*/
;;;653    	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
;;;654    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
;;;655    	GPIO_Init(GPIOB, &GPIO_InitStructure);
;;;656    	/*  第3步已经做了，因此这步可以不做
;;;657    		GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
;;;658    	*/
;;;659    	GPIO_Init(GPIOB, &GPIO_InitStructure);
;;;660    
;;;661    	/* 第4步： 配置串口硬件参数 */
;;;662    	USART_InitStructure.USART_BaudRate = UART3_BAUD;	/* 波特率 */
;;;663    	USART_InitStructure.USART_WordLength = USART_WordLength_8b;
;;;664    	USART_InitStructure.USART_StopBits = USART_StopBits_1;
;;;665    	USART_InitStructure.USART_Parity = USART_Parity_No ;
;;;666    	USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
;;;667    	USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
;;;668    	USART_Init(USART3, &USART_InitStructure);
;;;669    
;;;670    	USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);	/* 使能接收中断 */
;;;671    	/*
;;;672    		USART_ITConfig(USART1, USART_IT_TXE, ENABLE);
;;;673    		注意: 不要在此处打开发送中断
;;;674    		发送中断使能在SendUart()函数打开
;;;675    	*/
;;;676    	USART_Cmd(USART3, ENABLE);		/* 使能串口 */
;;;677    
;;;678    	/* CPU的小缺陷：串口配置好，如果直接Send，则第1个字节发送不出去
;;;679    		如下语句解决第1个字节无法正确发送出去的问题 */
;;;680    	USART_ClearFlag(USART3, USART_FLAG_TC);     /* 清发送完成标志，Transmission Complete flag */
;;;681    #endif
;;;682    
;;;683    #if UART4_FIFO_EN == 1			/* 串口4 TX = PC10   RX = PC11 */
;;;684    	/* 第1步： 开启GPIO和UART时钟 */
;;;685    	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO, ENABLE);
;;;686    	RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART4, ENABLE);
;;;687    
;;;688    	/* 第2步：将USART Tx的GPIO配置为推挽复用模式 */
;;;689    	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
;;;690    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
;;;691    	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
;;;692    	GPIO_Init(GPIOC, &GPIO_InitStructure);
;;;693    
;;;694    	/* 第3步：将USART Rx的GPIO配置为浮空输入模式
;;;695    		由于CPU复位后，GPIO缺省都是浮空输入模式，因此下面这个步骤不是必须的
;;;696    		但是，我还是建议加上便于阅读，并且防止其它地方修改了这个口线的设置参数
;;;697    	*/
;;;698    	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
;;;699    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
;;;700    	GPIO_Init(GPIOC, &GPIO_InitStructure);
;;;701    
;;;702    	/* 第4步： 配置串口硬件参数 */
;;;703    	USART_InitStructure.USART_BaudRate = UART4_BAUD;	/* 波特率 */
;;;704    	USART_InitStructure.USART_WordLength = USART_WordLength_8b;
;;;705    	USART_InitStructure.USART_StopBits = USART_StopBits_1;
;;;706    	USART_InitStructure.USART_Parity = USART_Parity_No ;
;;;707    	USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
;;;708    	USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
;;;709    	USART_Init(UART4, &USART_InitStructure);
;;;710    
;;;711    	USART_ITConfig(UART4, USART_IT_RXNE, ENABLE);	/* 使能接收中断 */
;;;712    	/*
;;;713    		USART_ITConfig(USART1, USART_IT_TXE, ENABLE);
;;;714    		注意: 不要在此处打开发送中断
;;;715    		发送中断使能在SendUart()函数打开
;;;716    	*/
;;;717    	USART_Cmd(UART4, ENABLE);		/* 使能串口 */
;;;718    
;;;719    	/* CPU的小缺陷：串口配置好，如果直接Send，则第1个字节发送不出去
;;;720    		如下语句解决第1个字节无法正确发送出去的问题 */
;;;721    	USART_ClearFlag(UART4, USART_FLAG_TC);     /* 清发送完成标志，Transmission Complete flag */
;;;722    #endif
;;;723    
;;;724    #if UART5_FIFO_EN == 1			/* 串口5 TX = PC12   RX = PD2 */
;;;725    	/* 第1步： 开启GPIO和UART时钟 */
;;;726    	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD | RCC_APB2Periph_AFIO, ENABLE);
;;;727    	RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART5, ENABLE);
;;;728    
;;;729    	/* 第2步：将USART Tx的GPIO配置为推挽复用模式 */
;;;730    	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
;;;731    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
;;;732    	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
;;;733    	GPIO_Init(GPIOC, &GPIO_InitStructure);
;;;734    
;;;735    	/* 第3步：将USART Rx的GPIO配置为浮空输入模式
;;;736    		由于CPU复位后，GPIO缺省都是浮空输入模式，因此下面这个步骤不是必须的
;;;737    		但是，我还是建议加上便于阅读，并且防止其它地方修改了这个口线的设置参数
;;;738    	*/
;;;739    	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
;;;740    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
;;;741    	GPIO_Init(GPIOD, &GPIO_InitStructure);
;;;742    
;;;743    
;;;744    	/* 第4步： 配置串口硬件参数 */
;;;745    	USART_InitStructure.USART_BaudRate = UART5_BAUD;	/* 波特率 */
;;;746    	USART_InitStructure.USART_WordLength = USART_WordLength_8b;
;;;747    	USART_InitStructure.USART_StopBits = USART_StopBits_1;
;;;748    	USART_InitStructure.USART_Parity = USART_Parity_No ;
;;;749    	USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
;;;750    	USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
;;;751    	USART_Init(UART5, &USART_InitStructure);
;;;752    
;;;753    	USART_ITConfig(UART5, USART_IT_RXNE, ENABLE);	/* 使能接收中断 */
;;;754    	/*
;;;755    		USART_ITConfig(USART1, USART_IT_TXE, ENABLE);
;;;756    		注意: 不要在此处打开发送中断
;;;757    		发送中断使能在SendUart()函数打开
;;;758    	*/
;;;759    	USART_Cmd(UART5, ENABLE);		/* 使能串口 */
;;;760    
;;;761    	/* CPU的小缺陷：串口配置好，如果直接Send，则第1个字节发送不出去
;;;762    		如下语句解决第1个字节无法正确发送出去的问题 */
;;;763    	USART_ClearFlag(UART5, USART_FLAG_TC);     /* 清发送完成标志，Transmission Complete flag */
;;;764    #endif
;;;765    }
00008a  b006              ADD      sp,sp,#0x18
00008c  bd10              POP      {r4,pc}
;;;766    
                          ENDP

00008e  0000              DCW      0x0000
                  |L3.144|
                          DCD      0x40010800
                  |L3.148|
                          DCD      0x40013800

                          AREA ||i.RS485_InitTXE||, CODE, READONLY, ALIGN=2

                  RS485_InitTXE PROC
;;;307    */
;;;308    void RS485_InitTXE(void)
000000  b508              PUSH     {r3,lr}
;;;309    {
;;;310    	GPIO_InitTypeDef GPIO_InitStructure;
;;;311    
;;;312    	RCC_APB2PeriphClockCmd(RCC_RS485_TXEN, ENABLE);	/* 打开GPIO时钟 */
000002  2101              MOVS     r1,#1
000004  2008              MOVS     r0,#8
000006  f7fffffe          BL       RCC_APB2PeriphClockCmd
;;;313    
;;;314    	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
00000a  2003              MOVS     r0,#3
00000c  f88d0002          STRB     r0,[sp,#2]
;;;315    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;	/* 推挽输出模式 */
000010  2010              MOVS     r0,#0x10
000012  f88d0003          STRB     r0,[sp,#3]
;;;316    	GPIO_InitStructure.GPIO_Pin = PIN_RS485_TXEN;
000016  2004              MOVS     r0,#4
000018  f8ad0000          STRH     r0,[sp,#0]
;;;317    	GPIO_Init(PORT_RS485_TXEN, &GPIO_InitStructure);
00001c  4669              MOV      r1,sp
00001e  4802              LDR      r0,|L4.40|
000020  f7fffffe          BL       GPIO_Init
;;;318    }
000024  bd08              POP      {r3,pc}
;;;319    
                          ENDP

000026  0000              DCW      0x0000
                  |L4.40|
                          DCD      0x40010c00

                          AREA ||i.RS485_ReciveNew||, CODE, READONLY, ALIGN=1

                  RS485_ReciveNew PROC
;;;407    extern void MODBUS_ReciveNew(uint8_t _byte);
;;;408    void RS485_ReciveNew(uint8_t _byte)
000000  4770              BX       lr
;;;409    {
;;;410    	//MODBUS_ReciveNew(_byte);
;;;411    }
;;;412    
                          ENDP


                          AREA ||i.RS485_SendBefor||, CODE, READONLY, ALIGN=2

                  RS485_SendBefor PROC
;;;350    */
;;;351    void RS485_SendBefor(void)
000000  4901              LDR      r1,|L6.8|
;;;352    {
;;;353    	RS485_TX_EN();	/* 切换RS485收发芯片为发送模式 */
000002  2004              MOVS     r0,#4
000004  6008              STR      r0,[r1,#0]
;;;354    }
000006  4770              BX       lr
;;;355    
                          ENDP

                  |L6.8|
                          DCD      0x40010c10

                          AREA ||i.RS485_SendBuf||, CODE, READONLY, ALIGN=1

                  RS485_SendBuf PROC
;;;378    */
;;;379    void RS485_SendBuf(uint8_t *_ucaBuf, uint16_t _usLen)
000000  460a              MOV      r2,r1
;;;380    {
;;;381    	comSendBuf(COM3, _ucaBuf, _usLen);
000002  4601              MOV      r1,r0
000004  2002              MOVS     r0,#2
000006  f7ffbffe          B.W      comSendBuf
;;;382    }
;;;383    
                          ENDP


                          AREA ||i.RS485_SendOver||, CODE, READONLY, ALIGN=2

                  RS485_SendOver PROC
;;;364    */
;;;365    void RS485_SendOver(void)
000000  4901              LDR      r1,|L8.8|
;;;366    {
;;;367    	RS485_RX_EN();	/* 切换RS485收发芯片为接收模式 */
000002  2004              MOVS     r0,#4
000004  6008              STR      r0,[r1,#0]
;;;368    }
000006  4770              BX       lr
;;;369    
                          ENDP

                  |L8.8|
                          DCD      0x40010c14

                          AREA ||i.RS485_SendStr||, CODE, READONLY, ALIGN=1

                  RS485_SendStr PROC
;;;393    */
;;;394    void RS485_SendStr(char *_pBuf)
000000  b510              PUSH     {r4,lr}
;;;395    {
000002  4604              MOV      r4,r0
;;;396    	RS485_SendBuf((uint8_t *)_pBuf, strlen(_pBuf));
000004  4620              MOV      r0,r4
000006  f7fffffe          BL       strlen
00000a  b281              UXTH     r1,r0
00000c  4620              MOV      r0,r4
00000e  e8bd4010          POP      {r4,lr}
000012  f7ffbffe          B.W      RS485_SendBuf
;;;397    }
;;;398    
                          ENDP


                          AREA ||i.USART1_IRQHandler||, CODE, READONLY, ALIGN=2

                  USART1_IRQHandler PROC
;;;1096   #if UART1_FIFO_EN == 1
;;;1097   void USART1_IRQHandler(void)
000000  4801              LDR      r0,|L10.8|
;;;1098   {
;;;1099   	UartIRQ(&g_tUart1);
000002  f7ffbffe          B.W      UartIRQ
;;;1100   }
;;;1101   #endif
                          ENDP

000006  0000              DCW      0x0000
                  |L10.8|
                          DCD      ||.bss||+0x20

                          AREA ||i.UartGetChar||, CODE, READONLY, ALIGN=1

                  UartGetChar PROC
;;;910    */
;;;911    static uint8_t UartGetChar(UART_T *_pUart, uint8_t *_pByte)
000000  2201              MOVS     r2,#1
000002  f3828810          MSR      PRIMASK,r2
;;;912    {
;;;913    	uint16_t usCount;
;;;914    
;;;915    	/* usRxWrite 变量在中断函数中被改写，主程序读取该变量时，必须进行临界区保护 */
;;;916    	DISABLE_INT();
;;;917    	usCount = _pUart->usRxCount;
000006  8b42              LDRH     r2,[r0,#0x1a]
;;;918    	ENABLE_INT();
000008  2300              MOVS     r3,#0
00000a  f3838810          MSR      PRIMASK,r3
;;;919    
;;;920    	/* 如果读和写索引相同，则返回0 */
;;;921    	//if (_pUart->usRxRead == usRxWrite)
;;;922    	if (usCount == 0)	/* 已经没有数据 */
00000e  2a00              CMP      r2,#0
000010  d017              BEQ      |L11.66|
;;;923    	{
;;;924    		return 0;
;;;925    	}
;;;926    	else
;;;927    	{
;;;928    		*_pByte = _pUart->pRxBuf[_pUart->usRxRead];		/* 从串口接收FIFO取1个数据 */
000012  8b03              LDRH     r3,[r0,#0x18]
000014  6882              LDR      r2,[r0,#8]
000016  5cd2              LDRB     r2,[r2,r3]
000018  700a              STRB     r2,[r1,#0]
;;;929    
;;;930    		/* 改写FIFO读索引 */
;;;931    		DISABLE_INT();
00001a  2101              MOVS     r1,#1
00001c  f3818810          MSR      PRIMASK,r1
;;;932    		if (++_pUart->usRxRead >= _pUart->usRxBufSize)
000020  8b01              LDRH     r1,[r0,#0x18]
000022  1c49              ADDS     r1,r1,#1
000024  b289              UXTH     r1,r1
000026  8301              STRH     r1,[r0,#0x18]
000028  89c2              LDRH     r2,[r0,#0xe]
00002a  4291              CMP      r1,r2
00002c  d301              BCC      |L11.50|
;;;933    		{
;;;934    			_pUart->usRxRead = 0;
00002e  2100              MOVS     r1,#0
000030  8301              STRH     r1,[r0,#0x18]
                  |L11.50|
;;;935    		}
;;;936    		_pUart->usRxCount--;
000032  8b41              LDRH     r1,[r0,#0x1a]
000034  1e49              SUBS     r1,r1,#1
000036  8341              STRH     r1,[r0,#0x1a]
;;;937    		ENABLE_INT();
000038  2000              MOVS     r0,#0
00003a  f3808810          MSR      PRIMASK,r0
;;;938    		return 1;
00003e  2001              MOVS     r0,#1
;;;939    	}
;;;940    }
000040  4770              BX       lr
                  |L11.66|
000042  2000              MOVS     r0,#0                 ;924
000044  4770              BX       lr
;;;941    
                          ENDP


                          AREA ||i.UartIRQ||, CODE, READONLY, ALIGN=2

                  UartIRQ PROC
;;;956    */
;;;957    static void UartIRQ(UART_T *_pUart)
000000  e92d41f0          PUSH     {r4-r8,lr}
;;;958    {
000004  4604              MOV      r4,r0
;;;959      static UART_RX_STATE_E rx_state=RX_IDEL;
;;;960      
;;;961    	/* 处理接收中断  */
;;;962    	if (USART_GetITStatus(_pUart->uart, USART_IT_RXNE) != RESET)
000006  f2405125          MOV      r1,#0x525
00000a  6820              LDR      r0,[r4,#0]
00000c  f7fffffe          BL       USART_GetITStatus
000010  2500              MOVS     r5,#0
000012  b300              CBZ      r0,|L12.86|
;;;963    	{
;;;964    		/* 从串口接收数据寄存器读取数据存放到接收FIFO */
;;;965    		uint8_t ch;
;;;966    
;;;967    		ch = USART_ReceiveData(_pUart->uart);
000014  6820              LDR      r0,[r4,#0]
000016  f7fffffe          BL       USART_ReceiveData
00001a  b2c0              UXTB     r0,r0
;;;968        
;;;969        //-------add by J.C----------------
;;;970        switch(rx_state)
00001c  4b3a              LDR      r3,|L12.264|
;;;971        {
;;;972          case RX_IDEL: 
;;;973          {
;;;974            if(ch=='[')
;;;975            {
;;;976              rx_state = RX_WORK;
;;;977              pt = 0;
;;;978              g_RxBuf[pt] = ch;
00001e  4e3b              LDR      r6,|L12.268|
000020  2701              MOVS     r7,#1                 ;970
000022  7899              LDRB     r1,[r3,#2]            ;970  ; rx_state
000024  b111              CBZ      r1,|L12.44|
000026  2901              CMP      r1,#1                 ;970
000028  d115              BNE      |L12.86|
00002a  e005              B        |L12.56|
                  |L12.44|
00002c  285b              CMP      r0,#0x5b              ;974
00002e  d112              BNE      |L12.86|
000030  709f              STRB     r7,[r3,#2]            ;976
000032  7030              STRB     r0,[r6,#0]
;;;979              pt++;
000034  701f              STRB     r7,[r3,#0]
000036  e00e              B        |L12.86|
                  |L12.56|
;;;980            }
;;;981            break;
;;;982          }
;;;983          case RX_WORK:
;;;984          {
;;;985            if(ch=='[')
000038  285b              CMP      r0,#0x5b
00003a  d004              BEQ      |L12.70|
;;;986            {
;;;987              pt = 0;
;;;988              g_RxBuf[pt++] = ch;
;;;989            }
;;;990            else
;;;991            {
;;;992              if(pt >= 25)
00003c  7819              LDRB     r1,[r3,#0]  ; pt
00003e  2919              CMP      r1,#0x19
000040  d304              BCC      |L12.76|
;;;993              {
;;;994                rx_state = RX_IDEL;
000042  709d              STRB     r5,[r3,#2]
000044  e007              B        |L12.86|
                  |L12.70|
000046  701f              STRB     r7,[r3,#0]            ;988
000048  7030              STRB     r0,[r6,#0]            ;988
00004a  e004              B        |L12.86|
                  |L12.76|
;;;995              }
;;;996              else if(ch==']')
00004c  285d              CMP      r0,#0x5d
00004e  d020              BEQ      |L12.146|
;;;997              {
;;;998                rx_state = RX_IDEL;
;;;999                g_RxBuf[pt++] = ch;
;;;1000               g_RxBuf[pt++] = 0;
;;;1001               g_ucRxRcvNewFlag = 1;
;;;1002               /* 回调函数,通知应用程序收到新数据,一般是发送1个消息或者设置一个标记 */
;;;1003               //if (_pUart->usRxWrite == _pUart->usRxRead)
;;;1004               //if (_pUart->usRxCount == 1)
;;;1005               //{
;;;1006               //  if (_pUart->ReciveNew)
;;;1007               //  {
;;;1008               //    _pUart->ReciveNew(ch);
;;;1009               //  }
;;;1010               //}
;;;1011             }
;;;1012             else
;;;1013             {
;;;1014               g_RxBuf[pt++] = ch;
000050  1c4a              ADDS     r2,r1,#1
000052  701a              STRB     r2,[r3,#0]
000054  5470              STRB     r0,[r6,r1]
                  |L12.86|
;;;1015             }
;;;1016           }
;;;1017           break;
;;;1018         }
;;;1019         default: break;
;;;1020       }
;;;1021       
;;;1022       //-------add by J.C----------end---
;;;1023   		// if (++_pUart->usRxWrite >= _pUart->usRxBufSize)
;;;1024   		// {
;;;1025   			// _pUart->usRxWrite = 0;
;;;1026   		// }
;;;1027   		// if (_pUart->usRxCount < _pUart->usRxBufSize)
;;;1028   		// {
;;;1029   			// _pUart->usRxCount++;
;;;1030   		// }
;;;1031   
;;;1032   	}
;;;1033   
;;;1034   	/* 处理发送缓冲区空中断 */
;;;1035   	if (USART_GetITStatus(_pUart->uart, USART_IT_TXE) != RESET)
000056  f2407727          MOV      r7,#0x727
00005a  4639              MOV      r1,r7
00005c  6820              LDR      r0,[r4,#0]
00005e  f7fffffe          BL       USART_GetITStatus
;;;1036   	{
;;;1037   		//if (_pUart->usTxRead == _pUart->usTxWrite)
;;;1038   		if (_pUart->usTxCount == 0)
;;;1039   		{
;;;1040   			/* 发送缓冲区的数据已取完时， 禁止发送缓冲区空中断 （注意：此时最后1个数据还未真正发送完毕）*/
;;;1041   			USART_ITConfig(_pUart->uart, USART_IT_TXE, DISABLE);
;;;1042   
;;;1043   			/* 使能数据发送完毕中断 */
;;;1044   			USART_ITConfig(_pUart->uart, USART_IT_TC, ENABLE);
000062  f2406626          MOV      r6,#0x626
000066  b348              CBZ      r0,|L12.188|
000068  8aa0              LDRH     r0,[r4,#0x14]         ;1038
00006a  b1d8              CBZ      r0,|L12.164|
;;;1045   		}
;;;1046   		else
;;;1047   		{
;;;1048   			/* 从发送FIFO取1个字节写入串口发送数据寄存器 */
;;;1049   			USART_SendData(_pUart->uart, _pUart->pTxBuf[_pUart->usTxRead]);
00006c  8a61              LDRH     r1,[r4,#0x12]
00006e  6860              LDR      r0,[r4,#4]
000070  5c41              LDRB     r1,[r0,r1]
000072  6820              LDR      r0,[r4,#0]
000074  f7fffffe          BL       USART_SendData
;;;1050   			if (++_pUart->usTxRead >= _pUart->usTxBufSize)
000078  8a60              LDRH     r0,[r4,#0x12]
00007a  1c40              ADDS     r0,r0,#1
00007c  b280              UXTH     r0,r0
00007e  8260              STRH     r0,[r4,#0x12]
000080  89a1              LDRH     r1,[r4,#0xc]
000082  4288              CMP      r0,r1
000084  d300              BCC      |L12.136|
;;;1051   			{
;;;1052   				_pUart->usTxRead = 0;
000086  8265              STRH     r5,[r4,#0x12]
                  |L12.136|
;;;1053   			}
;;;1054   			_pUart->usTxCount--;
000088  8aa0              LDRH     r0,[r4,#0x14]
00008a  1e40              SUBS     r0,r0,#1
00008c  82a0              STRH     r0,[r4,#0x14]
                  |L12.142|
;;;1055   		}
;;;1056   
;;;1057   	}
;;;1058   	/* 数据bit位全部发送完毕的中断 */
;;;1059   	else if (USART_GetITStatus(_pUart->uart, USART_IT_TC) != RESET)
;;;1060   	{
;;;1061   		//if (_pUart->usTxRead == _pUart->usTxWrite)
;;;1062   		if (_pUart->usTxCount == 0)
;;;1063   		{
;;;1064   			/* 如果发送FIFO的数据全部发送完毕，禁止数据发送完毕中断 */
;;;1065   			USART_ITConfig(_pUart->uart, USART_IT_TC, DISABLE);
;;;1066   
;;;1067   			/* 回调函数, 一般用来处理RS485通信，将RS485芯片设置为接收模式，避免抢占总线 */
;;;1068   			if (_pUart->SendOver)
;;;1069   			{
;;;1070   				_pUart->SendOver();
;;;1071   			}
;;;1072   		}
;;;1073   		else
;;;1074   		{
;;;1075   			/* 正常情况下，不会进入此分支 */
;;;1076   
;;;1077   			/* 如果发送FIFO的数据还未完毕，则从发送FIFO取1个数据写入发送数据寄存器 */
;;;1078   			USART_SendData(_pUart->uart, _pUart->pTxBuf[_pUart->usTxRead]);
;;;1079   			if (++_pUart->usTxRead >= _pUart->usTxBufSize)
;;;1080   			{
;;;1081   				_pUart->usTxRead = 0;
;;;1082   			}
;;;1083   			_pUart->usTxCount--;
;;;1084   		}
;;;1085   	}
;;;1086   }
00008e  e8bd81f0          POP      {r4-r8,pc}
                  |L12.146|
000092  709d              STRB     r5,[r3,#2]            ;998
000094  1c4a              ADDS     r2,r1,#1              ;999
000096  b2d2              UXTB     r2,r2                 ;999
000098  5470              STRB     r0,[r6,r1]            ;999
00009a  1c50              ADDS     r0,r2,#1              ;1000
00009c  7018              STRB     r0,[r3,#0]            ;1000
00009e  54b5              STRB     r5,[r6,r2]            ;1000
0000a0  705f              STRB     r7,[r3,#1]            ;1001
0000a2  e7d8              B        |L12.86|
                  |L12.164|
0000a4  2200              MOVS     r2,#0                 ;1041
0000a6  4639              MOV      r1,r7                 ;1041
0000a8  6820              LDR      r0,[r4,#0]            ;1041
0000aa  f7fffffe          BL       USART_ITConfig
0000ae  4631              MOV      r1,r6                 ;1044
0000b0  6820              LDR      r0,[r4,#0]            ;1044
0000b2  e8bd41f0          POP      {r4-r8,lr}            ;1044
0000b6  2201              MOVS     r2,#1                 ;1044
0000b8  f7ffbffe          B.W      USART_ITConfig
                  |L12.188|
0000bc  4631              MOV      r1,r6                 ;1059
0000be  6820              LDR      r0,[r4,#0]            ;1059
0000c0  f7fffffe          BL       USART_GetITStatus
0000c4  2800              CMP      r0,#0                 ;1059
0000c6  d0e2              BEQ      |L12.142|
0000c8  8aa0              LDRH     r0,[r4,#0x14]         ;1062
0000ca  b188              CBZ      r0,|L12.240|
0000cc  8a61              LDRH     r1,[r4,#0x12]         ;1078
0000ce  6860              LDR      r0,[r4,#4]            ;1078
0000d0  5c41              LDRB     r1,[r0,r1]            ;1078
0000d2  6820              LDR      r0,[r4,#0]            ;1078
0000d4  f7fffffe          BL       USART_SendData
0000d8  8a60              LDRH     r0,[r4,#0x12]         ;1079
0000da  1c40              ADDS     r0,r0,#1              ;1079
0000dc  b280              UXTH     r0,r0                 ;1079
0000de  8260              STRH     r0,[r4,#0x12]         ;1079
0000e0  89a1              LDRH     r1,[r4,#0xc]          ;1079
0000e2  4288              CMP      r0,r1                 ;1079
0000e4  d300              BCC      |L12.232|
0000e6  8265              STRH     r5,[r4,#0x12]         ;1081
                  |L12.232|
0000e8  8aa0              LDRH     r0,[r4,#0x14]         ;1083
0000ea  1e40              SUBS     r0,r0,#1              ;1083
0000ec  82a0              STRH     r0,[r4,#0x14]         ;1083
0000ee  e7ce              B        |L12.142|
                  |L12.240|
0000f0  2200              MOVS     r2,#0                 ;1065
0000f2  4631              MOV      r1,r6                 ;1065
0000f4  6820              LDR      r0,[r4,#0]            ;1065
0000f6  f7fffffe          BL       USART_ITConfig
0000fa  6a20              LDR      r0,[r4,#0x20]         ;1068
0000fc  2800              CMP      r0,#0                 ;1068
0000fe  d0c6              BEQ      |L12.142|
000100  e8bd41f0          POP      {r4-r8,lr}            ;1070
000104  4700              BX       r0                    ;1070
;;;1087   
                          ENDP

000106  0000              DCW      0x0000
                  |L12.264|
                          DCD      ||.data||
                  |L12.268|
                          DCD      ||.bss||

                          AREA ||i.UartSend||, CODE, READONLY, ALIGN=1

                  UartSend PROC
;;;838    */
;;;839    static void UartSend(UART_T *_pUart, uint8_t *_ucaBuf, uint16_t _usLen)
000000  b478              PUSH     {r3-r6}
;;;840    {
;;;841    	uint16_t i;
;;;842    
;;;843    	for (i = 0; i < _usLen; i++)
000002  2300              MOVS     r3,#0
000004  e024              B        |L13.80|
                  |L13.6|
;;;844    	{
;;;845    		/* 如果发送缓冲区已经满了，则等待缓冲区空 */
;;;846    	#if 0
;;;847    		/*
;;;848    			在调试GPRS例程时，下面的代码出现死机，while 死循环
;;;849    			原因： 发送第1个字节时 _pUart->usTxWrite = 1；_pUart->usTxRead = 0;
;;;850    			将导致while(1) 无法退出
;;;851    		*/
;;;852    		while (1)
;;;853    		{
;;;854    			uint16_t usRead;
;;;855    
;;;856    			DISABLE_INT();
;;;857    			usRead = _pUart->usTxRead;
;;;858    			ENABLE_INT();
;;;859    
;;;860    			if (++usRead >= _pUart->usTxBufSize)
;;;861    			{
;;;862    				usRead = 0;
;;;863    			}
;;;864    
;;;865    			if (usRead != _pUart->usTxWrite)
;;;866    			{
;;;867    				break;
;;;868    			}
;;;869    		}
;;;870    	#else
;;;871    		/* 当 _pUart->usTxBufSize == 1 时, 下面的函数会死掉(待完善) */
;;;872    		while (1)
;;;873    		{
;;;874    			__IO uint16_t usCount;
;;;875    
;;;876    			DISABLE_INT();
;;;877    			usCount = _pUart->usTxCount;
;;;878    			ENABLE_INT();
;;;879    
;;;880    			if (usCount < _pUart->usTxBufSize)
;;;881    			{
;;;882    				break;
;;;883    			}
;;;884    		}
;;;885    	#endif
;;;886    
;;;887    		/* 将新数据填入发送缓冲区 */
;;;888    		_pUart->pTxBuf[_pUart->usTxWrite] = _ucaBuf[i];
;;;889    
;;;890    		DISABLE_INT();
;;;891    		if (++_pUart->usTxWrite >= _pUart->usTxBufSize)
000006  8985              LDRH     r5,[r0,#0xc]
                  |L13.8|
000008  2401              MOVS     r4,#1                 ;876
00000a  f3848810          MSR      PRIMASK,r4            ;876
00000e  8a84              LDRH     r4,[r0,#0x14]         ;877
000010  9400              STR      r4,[sp,#0]            ;877
000012  2400              MOVS     r4,#0                 ;878
000014  f3848810          MSR      PRIMASK,r4            ;878
000018  f8bd4000          LDRH     r4,[sp,#0]            ;880
00001c  42a5              CMP      r5,r4                 ;880
00001e  d9f3              BLS      |L13.8|
000020  5ccc              LDRB     r4,[r1,r3]            ;888
000022  8a06              LDRH     r6,[r0,#0x10]         ;888
000024  6845              LDR      r5,[r0,#4]            ;888
000026  55ac              STRB     r4,[r5,r6]            ;888
000028  2401              MOVS     r4,#1                 ;890
00002a  f3848810          MSR      PRIMASK,r4            ;890
00002e  8a04              LDRH     r4,[r0,#0x10]
000030  1c64              ADDS     r4,r4,#1
000032  b2a4              UXTH     r4,r4
000034  8204              STRH     r4,[r0,#0x10]
000036  8985              LDRH     r5,[r0,#0xc]
000038  42ac              CMP      r4,r5
00003a  d301              BCC      |L13.64|
;;;892    		{
;;;893    			_pUart->usTxWrite = 0;
00003c  2400              MOVS     r4,#0
00003e  8204              STRH     r4,[r0,#0x10]
                  |L13.64|
;;;894    		}
;;;895    		_pUart->usTxCount++;
000040  8a84              LDRH     r4,[r0,#0x14]
000042  1c64              ADDS     r4,r4,#1
000044  8284              STRH     r4,[r0,#0x14]
;;;896    		ENABLE_INT();
000046  2400              MOVS     r4,#0
000048  f3848810          MSR      PRIMASK,r4
00004c  1c5b              ADDS     r3,r3,#1              ;843
00004e  b29b              UXTH     r3,r3                 ;843
                  |L13.80|
000050  4293              CMP      r3,r2                 ;843
000052  d3d8              BCC      |L13.6|
;;;897    	}
;;;898    
;;;899    	USART_ITConfig(_pUart->uart, USART_IT_TXE, ENABLE);
000054  6800              LDR      r0,[r0,#0]
000056  bc78              POP      {r3-r6}
000058  2201              MOVS     r2,#1
00005a  f2407127          MOV      r1,#0x727
00005e  f7ffbffe          B.W      USART_ITConfig
;;;900    }
;;;901    
                          ENDP


                          AREA ||i.UartVarInit||, CODE, READONLY, ALIGN=2

                  UartVarInit PROC
;;;420    */
;;;421    static void UartVarInit(void)
000000  480c              LDR      r0,|L14.52|
;;;422    {
;;;423    #if UART1_FIFO_EN == 1
;;;424    	g_tUart1.uart = USART1;						/* STM32 串口设备 */
000002  490b              LDR      r1,|L14.48|
000004  6001              STR      r1,[r0,#0]  ; g_tUart1
;;;425    	g_tUart1.pTxBuf = g_TxBuf1;					/* 发送缓冲区指针 */
000006  f1000128          ADD      r1,r0,#0x28
00000a  6041              STR      r1,[r0,#4]  ; g_tUart1
;;;426    	g_tUart1.pRxBuf = g_RxBuf1;					/* 接收缓冲区指针 */
00000c  f5006185          ADD      r1,r0,#0x428
000010  6081              STR      r1,[r0,#8]  ; g_tUart1
;;;427    	g_tUart1.usTxBufSize = UART1_TX_BUF_SIZE;	/* 发送缓冲区大小 */
000012  f44f6180          MOV      r1,#0x400
000016  8181              STRH     r1,[r0,#0xc]
;;;428    	g_tUart1.usRxBufSize = UART1_RX_BUF_SIZE;	/* 接收缓冲区大小 */
000018  81c1              STRH     r1,[r0,#0xe]
;;;429    	g_tUart1.usTxWrite = 0;						/* 发送FIFO写索引 */
00001a  2100              MOVS     r1,#0
00001c  8201              STRH     r1,[r0,#0x10]
;;;430    	g_tUart1.usTxRead = 0;						/* 发送FIFO读索引 */
00001e  8241              STRH     r1,[r0,#0x12]
;;;431    	g_tUart1.usRxWrite = 0;						/* 接收FIFO写索引 */
000020  82c1              STRH     r1,[r0,#0x16]
;;;432    	g_tUart1.usRxRead = 0;						/* 接收FIFO读索引 */
000022  8301              STRH     r1,[r0,#0x18]
;;;433    	g_tUart1.usRxCount = 0;						/* 接收到的新数据个数 */
000024  8341              STRH     r1,[r0,#0x1a]
;;;434    	g_tUart1.usTxCount = 0;						/* 待发送的数据个数 */
000026  8281              STRH     r1,[r0,#0x14]
;;;435    	g_tUart1.SendBefor = 0;						/* 发送数据前的回调函数 */
000028  61c1              STR      r1,[r0,#0x1c]  ; g_tUart1
;;;436    	g_tUart1.SendOver = 0;						/* 发送完毕后的回调函数 */
00002a  6201              STR      r1,[r0,#0x20]  ; g_tUart1
;;;437    	g_tUart1.ReciveNew = 0;						/* 接收到新数据后的回调函数 */
00002c  6241              STR      r1,[r0,#0x24]  ; g_tUart1
;;;438    #endif
;;;439    
;;;440    #if UART2_FIFO_EN == 1
;;;441    	g_tUart2.uart = USART2;						/* STM32 串口设备 */
;;;442    	g_tUart2.pTxBuf = g_TxBuf2;					/* 发送缓冲区指针 */
;;;443    	g_tUart2.pRxBuf = g_RxBuf2;					/* 接收缓冲区指针 */
;;;444    	g_tUart2.usTxBufSize = UART2_TX_BUF_SIZE;	/* 发送缓冲区大小 */
;;;445    	g_tUart2.usRxBufSize = UART2_RX_BUF_SIZE;	/* 接收缓冲区大小 */
;;;446    	g_tUart2.usTxWrite = 0;						/* 发送FIFO写索引 */
;;;447    	g_tUart2.usTxRead = 0;						/* 发送FIFO读索引 */
;;;448    	g_tUart2.usRxWrite = 0;						/* 接收FIFO写索引 */
;;;449    	g_tUart2.usRxRead = 0;						/* 接收FIFO读索引 */
;;;450    	g_tUart2.usRxCount = 0;						/* 接收到的新数据个数 */
;;;451    	g_tUart2.usTxCount = 0;						/* 待发送的数据个数 */
;;;452    	g_tUart2.SendBefor = 0;						/* 发送数据前的回调函数 */
;;;453    	g_tUart2.SendOver = 0;						/* 发送完毕后的回调函数 */
;;;454    	g_tUart2.ReciveNew = 0;						/* 接收到新数据后的回调函数 */
;;;455    #endif
;;;456    
;;;457    #if UART3_FIFO_EN == 1
;;;458    	g_tUart3.uart = USART3;						/* STM32 串口设备 */
;;;459    	g_tUart3.pTxBuf = g_TxBuf3;					/* 发送缓冲区指针 */
;;;460    	g_tUart3.pRxBuf = g_RxBuf3;					/* 接收缓冲区指针 */
;;;461    	g_tUart3.usTxBufSize = UART3_TX_BUF_SIZE;	/* 发送缓冲区大小 */
;;;462    	g_tUart3.usRxBufSize = UART3_RX_BUF_SIZE;	/* 接收缓冲区大小 */
;;;463    	g_tUart3.usTxWrite = 0;						/* 发送FIFO写索引 */
;;;464    	g_tUart3.usTxRead = 0;						/* 发送FIFO读索引 */
;;;465    	g_tUart3.usRxWrite = 0;						/* 接收FIFO写索引 */
;;;466    	g_tUart3.usRxRead = 0;						/* 接收FIFO读索引 */
;;;467    	g_tUart3.usRxCount = 0;						/* 接收到的新数据个数 */
;;;468    	g_tUart3.usTxCount = 0;						/* 待发送的数据个数 */
;;;469    	g_tUart3.SendBefor = RS485_SendBefor;		/* 发送数据前的回调函数 */
;;;470    	g_tUart3.SendOver = RS485_SendOver;			/* 发送完毕后的回调函数 */
;;;471    	g_tUart3.ReciveNew = RS485_ReciveNew;		/* 接收到新数据后的回调函数 */
;;;472    #endif
;;;473    
;;;474    #if UART4_FIFO_EN == 1
;;;475    	g_tUart4.uart = UART4;						/* STM32 串口设备 */
;;;476    	g_tUart4.pTxBuf = g_TxBuf4;					/* 发送缓冲区指针 */
;;;477    	g_tUart4.pRxBuf = g_RxBuf4;					/* 接收缓冲区指针 */
;;;478    	g_tUart4.usTxBufSize = UART4_TX_BUF_SIZE;	/* 发送缓冲区大小 */
;;;479    	g_tUart4.usRxBufSize = UART4_RX_BUF_SIZE;	/* 接收缓冲区大小 */
;;;480    	g_tUart4.usTxWrite = 0;						/* 发送FIFO写索引 */
;;;481    	g_tUart4.usTxRead = 0;						/* 发送FIFO读索引 */
;;;482    	g_tUart4.usRxWrite = 0;						/* 接收FIFO写索引 */
;;;483    	g_tUart4.usRxRead = 0;						/* 接收FIFO读索引 */
;;;484    	g_tUart4.usRxCount = 0;						/* 接收到的新数据个数 */
;;;485    	g_tUart4.usTxCount = 0;						/* 待发送的数据个数 */
;;;486    	g_tUart4.SendBefor = 0;						/* 发送数据前的回调函数 */
;;;487    	g_tUart4.SendOver = 0;						/* 发送完毕后的回调函数 */
;;;488    	g_tUart4.ReciveNew = 0;						/* 接收到新数据后的回调函数 */
;;;489    #endif
;;;490    
;;;491    #if UART5_FIFO_EN == 1
;;;492    	g_tUart5.uart = UART5;						/* STM32 串口设备 */
;;;493    	g_tUart5.pTxBuf = g_TxBuf5;					/* 发送缓冲区指针 */
;;;494    	g_tUart5.pRxBuf = g_RxBuf5;					/* 接收缓冲区指针 */
;;;495    	g_tUart5.usTxBufSize = UART5_TX_BUF_SIZE;	/* 发送缓冲区大小 */
;;;496    	g_tUart5.usRxBufSize = UART5_RX_BUF_SIZE;	/* 接收缓冲区大小 */
;;;497    	g_tUart5.usTxWrite = 0;						/* 发送FIFO写索引 */
;;;498    	g_tUart5.usTxRead = 0;						/* 发送FIFO读索引 */
;;;499    	g_tUart5.usRxWrite = 0;						/* 接收FIFO写索引 */
;;;500    	g_tUart5.usRxRead = 0;						/* 接收FIFO读索引 */
;;;501    	g_tUart5.usRxCount = 0;						/* 接收到的新数据个数 */
;;;502    	g_tUart5.usTxCount = 0;						/* 待发送的数据个数 */
;;;503    	g_tUart5.SendBefor = 0;						/* 发送数据前的回调函数 */
;;;504    	g_tUart5.SendOver = 0;						/* 发送完毕后的回调函数 */
;;;505    	g_tUart5.ReciveNew = 0;						/* 接收到新数据后的回调函数 */
;;;506    #endif
;;;507    
;;;508    
;;;509    #if UART6_FIFO_EN == 1
;;;510    	g_tUart6.uart = USART6;						/* STM32 串口设备 */
;;;511    	g_tUart6.pTxBuf = g_TxBuf6;					/* 发送缓冲区指针 */
;;;512    	g_tUart6.pRxBuf = g_RxBuf6;					/* 接收缓冲区指针 */
;;;513    	g_tUart6.usTxBufSize = UART6_TX_BUF_SIZE;	/* 发送缓冲区大小 */
;;;514    	g_tUart6.usRxBufSize = UART6_RX_BUF_SIZE;	/* 接收缓冲区大小 */
;;;515    	g_tUart6.usTxWrite = 0;						/* 发送FIFO写索引 */
;;;516    	g_tUart6.usTxRead = 0;						/* 发送FIFO读索引 */
;;;517    	g_tUart6.usRxWrite = 0;						/* 接收FIFO写索引 */
;;;518    	g_tUart6.usRxRead = 0;						/* 接收FIFO读索引 */
;;;519    	g_tUart6.usRxCount = 0;						/* 接收到的新数据个数 */
;;;520    	g_tUart6.usTxCount = 0;						/* 待发送的数据个数 */
;;;521    	g_tUart6.SendBefor = 0;						/* 发送数据前的回调函数 */
;;;522    	g_tUart6.SendOver = 0;						/* 发送完毕后的回调函数 */
;;;523    	g_tUart6.ReciveNew = 0;						/* 接收到新数据后的回调函数 */
;;;524    #endif
;;;525    }
00002e  4770              BX       lr
;;;526    
                          ENDP

                  |L14.48|
                          DCD      0x40013800
                  |L14.52|
                          DCD      ||.bss||+0x20

                          AREA ||i.bsp_InitUart||, CODE, READONLY, ALIGN=1

                  bsp_InitUart PROC
;;;73     */
;;;74     void bsp_InitUart(void)
000000  b510              PUSH     {r4,lr}
;;;75     {
;;;76     	UartVarInit();		/* 必须先初始化全局变量,再配置硬件 */
000002  f7fffffe          BL       UartVarInit
;;;77     
;;;78     	InitHardUart();		/* 配置串口的硬件参数(波特率等) */
000006  f7fffffe          BL       InitHardUart
;;;79     
;;;80     	RS485_InitTXE();	/* 配置RS485芯片的发送使能硬件，配置为推挽输出 */
00000a  f7fffffe          BL       RS485_InitTXE
;;;81     
;;;82     	ConfigUartNVIC();	/* 配置串口中断 */
00000e  e8bd4010          POP      {r4,lr}
000012  f7ffbffe          B.W      ConfigUartNVIC
;;;83     }
;;;84     
                          ENDP


                          AREA ||i.bsp_Set485Baud||, CODE, READONLY, ALIGN=2

                  bsp_Set485Baud PROC
;;;327    */
;;;328    void bsp_Set485Baud(uint32_t _baud)
000000  b51f              PUSH     {r0-r4,lr}
;;;329    {
;;;330    	USART_InitTypeDef USART_InitStructure;
;;;331    
;;;332    	/* 第2步： 配置串口硬件参数 */
;;;333    	USART_InitStructure.USART_BaudRate = _baud;	/* 波特率 */
000002  9000              STR      r0,[sp,#0]
;;;334    	USART_InitStructure.USART_WordLength = USART_WordLength_8b;
000004  2000              MOVS     r0,#0
000006  f8ad0004          STRH     r0,[sp,#4]
;;;335    	USART_InitStructure.USART_StopBits = USART_StopBits_1;
00000a  f8ad0006          STRH     r0,[sp,#6]
;;;336    	USART_InitStructure.USART_Parity = USART_Parity_No ;
00000e  f8ad0008          STRH     r0,[sp,#8]
;;;337    	USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
000012  f8ad000c          STRH     r0,[sp,#0xc]
;;;338    	USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
000016  200c              MOVS     r0,#0xc
000018  f8ad000a          STRH     r0,[sp,#0xa]
;;;339    	USART_Init(USART3, &USART_InitStructure);
00001c  4669              MOV      r1,sp
00001e  4802              LDR      r0,|L16.40|
000020  f7fffffe          BL       USART_Init
;;;340    }
000024  bd1f              POP      {r0-r4,pc}
;;;341    
                          ENDP

000026  0000              DCW      0x0000
                  |L16.40|
                          DCD      0x40004800

                          AREA ||i.bsp_SetUart1Baud||, CODE, READONLY, ALIGN=2

                  bsp_SetUart1Baud PROC
;;;259    */
;;;260    void bsp_SetUart1Baud(uint32_t _baud)
000000  b51f              PUSH     {r0-r4,lr}
;;;261    {
;;;262    	USART_InitTypeDef USART_InitStructure;
;;;263    
;;;264    	/* 第2步： 配置串口硬件参数 */
;;;265    	USART_InitStructure.USART_BaudRate = _baud;	/* 波特率 */
000002  9000              STR      r0,[sp,#0]
;;;266    	USART_InitStructure.USART_WordLength = USART_WordLength_8b;
000004  2000              MOVS     r0,#0
000006  f8ad0004          STRH     r0,[sp,#4]
;;;267    	USART_InitStructure.USART_StopBits = USART_StopBits_1;
00000a  f8ad0006          STRH     r0,[sp,#6]
;;;268    	USART_InitStructure.USART_Parity = USART_Parity_No ;
00000e  f8ad0008          STRH     r0,[sp,#8]
;;;269    	USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
000012  f8ad000c          STRH     r0,[sp,#0xc]
;;;270    	USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
000016  200c              MOVS     r0,#0xc
000018  f8ad000a          STRH     r0,[sp,#0xa]
;;;271    	//USART_Init(USART2, &USART_InitStructure);
;;;272    	USART_Init(USART1, &USART_InitStructure);  // 2018.08.25 13:28 修改 by J.C
00001c  4669              MOV      r1,sp
00001e  4802              LDR      r0,|L17.40|
000020  f7fffffe          BL       USART_Init
;;;273    }
000024  bd1f              POP      {r0-r4,pc}
;;;274    
                          ENDP

000026  0000              DCW      0x0000
                  |L17.40|
                          DCD      0x40013800

                          AREA ||i.bsp_SetUart2Baud||, CODE, READONLY, ALIGN=2

                  bsp_SetUart2Baud PROC
;;;282    */
;;;283    void bsp_SetUart2Baud(uint32_t _baud)
000000  b51f              PUSH     {r0-r4,lr}
;;;284    {
;;;285    	USART_InitTypeDef USART_InitStructure;
;;;286    
;;;287    	/* 第2步： 配置串口硬件参数 */
;;;288    	USART_InitStructure.USART_BaudRate = _baud;	/* 波特率 */
000002  9000              STR      r0,[sp,#0]
;;;289    	USART_InitStructure.USART_WordLength = USART_WordLength_8b;
000004  2000              MOVS     r0,#0
000006  f8ad0004          STRH     r0,[sp,#4]
;;;290    	USART_InitStructure.USART_StopBits = USART_StopBits_1;
00000a  f8ad0006          STRH     r0,[sp,#6]
;;;291    	USART_InitStructure.USART_Parity = USART_Parity_No ;
00000e  f8ad0008          STRH     r0,[sp,#8]
;;;292    	USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
000012  f8ad000c          STRH     r0,[sp,#0xc]
;;;293    	USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
000016  200c              MOVS     r0,#0xc
000018  f8ad000a          STRH     r0,[sp,#0xa]
;;;294    	USART_Init(USART2, &USART_InitStructure);
00001c  4669              MOV      r1,sp
00001e  4802              LDR      r0,|L18.40|
000020  f7fffffe          BL       USART_Init
;;;295    }
000024  bd1f              POP      {r0-r4,pc}
;;;296    
                          ENDP

000026  0000              DCW      0x0000
                  |L18.40|
                          DCD      0x40004400

                          AREA ||i.comClearRxFifo||, CODE, READONLY, ALIGN=1

                  comClearRxFifo PROC
;;;236    */
;;;237    void comClearRxFifo(COM_PORT_E _ucPort)
000000  b500              PUSH     {lr}
;;;238    {
;;;239    	UART_T *pUart;
;;;240    
;;;241    	pUart = ComToUart(_ucPort);
000002  f7fffffe          BL       ComToUart
;;;242    	if (pUart == 0)
000006  2800              CMP      r0,#0
000008  d003              BEQ      |L19.18|
;;;243    	{
;;;244    		return;
;;;245    	}
;;;246    
;;;247    	pUart->usRxWrite = 0;
00000a  2100              MOVS     r1,#0
00000c  82c1              STRH     r1,[r0,#0x16]
;;;248    	pUart->usRxRead = 0;
00000e  8301              STRH     r1,[r0,#0x18]
;;;249    	pUart->usRxCount = 0;
000010  8341              STRH     r1,[r0,#0x1a]
                  |L19.18|
;;;250    }
000012  bd00              POP      {pc}
;;;251    
                          ENDP


                          AREA ||i.comClearTxFifo||, CODE, READONLY, ALIGN=1

                  comClearTxFifo PROC
;;;213    */
;;;214    void comClearTxFifo(COM_PORT_E _ucPort)
000000  b500              PUSH     {lr}
;;;215    {
;;;216    	UART_T *pUart;
;;;217    
;;;218    	pUart = ComToUart(_ucPort);
000002  f7fffffe          BL       ComToUart
;;;219    	if (pUart == 0)
000006  2800              CMP      r0,#0
000008  d003              BEQ      |L20.18|
;;;220    	{
;;;221    		return;
;;;222    	}
;;;223    
;;;224    	pUart->usTxWrite = 0;
00000a  2100              MOVS     r1,#0
00000c  8201              STRH     r1,[r0,#0x10]
;;;225    	pUart->usTxRead = 0;
00000e  8241              STRH     r1,[r0,#0x12]
;;;226    	pUart->usTxCount = 0;
000010  8281              STRH     r1,[r0,#0x14]
                  |L20.18|
;;;227    }
000012  bd00              POP      {pc}
;;;228    
                          ENDP


                          AREA ||i.comGetChar||, CODE, READONLY, ALIGN=1

                  comGetChar PROC
;;;192    */
;;;193    uint8_t comGetChar(COM_PORT_E _ucPort, uint8_t *_pByte)
000000  b510              PUSH     {r4,lr}
;;;194    {
;;;195    	UART_T *pUart;
;;;196    
;;;197    	pUart = ComToUart(_ucPort);
000002  f7fffffe          BL       ComToUart
;;;198    	if (pUart == 0)
000006  b118              CBZ      r0,|L21.16|
;;;199    	{
;;;200    		return 0;
;;;201    	}
;;;202    
;;;203    	return UartGetChar(pUart, _pByte);
000008  e8bd4010          POP      {r4,lr}
00000c  f7ffbffe          B.W      UartGetChar
                  |L21.16|
000010  2000              MOVS     r0,#0                 ;200
;;;204    }
000012  bd10              POP      {r4,pc}
;;;205    
                          ENDP


                          AREA ||i.comSendBuf||, CODE, READONLY, ALIGN=1

                  comSendBuf PROC
;;;151    */
;;;152    void comSendBuf(COM_PORT_E _ucPort, uint8_t *_ucaBuf, uint16_t _usLen)
000000  b570              PUSH     {r4-r6,lr}
;;;153    {
000002  460d              MOV      r5,r1
000004  4616              MOV      r6,r2
;;;154    	UART_T *pUart;
;;;155    
;;;156    	pUart = ComToUart(_ucPort);
000006  f7fffffe          BL       ComToUart
00000a  4604              MOV      r4,r0
;;;157    	if (pUart == 0)
00000c  2c00              CMP      r4,#0
00000e  d009              BEQ      |L22.36|
;;;158    	{
;;;159    		return;
;;;160    	}
;;;161    
;;;162    	if (pUart->SendBefor != 0)
000010  69e0              LDR      r0,[r4,#0x1c]
000012  b100              CBZ      r0,|L22.22|
;;;163    	{
;;;164    		pUart->SendBefor();		/* 如果是RS485通信，可以在这个函数中将RS485设置为发送模式 */
000014  4780              BLX      r0
                  |L22.22|
;;;165    	}
;;;166    
;;;167    	UartSend(pUart, _ucaBuf, _usLen);
000016  4632              MOV      r2,r6
000018  4629              MOV      r1,r5
00001a  4620              MOV      r0,r4
00001c  e8bd4070          POP      {r4-r6,lr}
000020  f7ffbffe          B.W      UartSend
                  |L22.36|
;;;168    }
000024  bd70              POP      {r4-r6,pc}
;;;169    
                          ENDP


                          AREA ||i.comSendChar||, CODE, READONLY, ALIGN=1

                  comSendChar PROC
;;;178    */
;;;179    void comSendChar(COM_PORT_E _ucPort, uint8_t _ucByte)
000000  b513              PUSH     {r0,r1,r4,lr}
;;;180    {
;;;181    	comSendBuf(_ucPort, &_ucByte, 1);
000002  2201              MOVS     r2,#1
000004  a901              ADD      r1,sp,#4
000006  f7fffffe          BL       comSendBuf
;;;182    }
00000a  bd1c              POP      {r2-r4,pc}
;;;183    
                          ENDP


                          AREA ||i.fgetc||, CODE, READONLY, ALIGN=1

                  fgetc PROC
;;;1171   */
;;;1172   int fgetc(FILE *f)
000000  b508              PUSH     {r3,lr}
                  |L24.2|
;;;1173   {
;;;1174   
;;;1175   #if 1	/* 从串口接收FIFO中取1个数据, 只有取到数据才返回 */
;;;1176   	uint8_t ucData;
;;;1177   
;;;1178   	while(comGetChar(COM1, &ucData) == 0);
000002  4669              MOV      r1,sp
000004  2000              MOVS     r0,#0
000006  f7fffffe          BL       comGetChar
00000a  2800              CMP      r0,#0
00000c  d0f9              BEQ      |L24.2|
;;;1179   
;;;1180   	return ucData;
00000e  f89d0000          LDRB     r0,[sp,#0]
;;;1181   #else
;;;1182   	/* 等待串口1输入数据 */
;;;1183   	while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);
;;;1184   
;;;1185   	return (int)USART_ReceiveData(USART1);
;;;1186   #endif
;;;1187   }
000012  bd08              POP      {r3,pc}
;;;1188   
                          ENDP


                          AREA ||i.fputc||, CODE, READONLY, ALIGN=1

                  fputc PROC
;;;1145   */
;;;1146   int fputc(int ch, FILE *f)
000000  b510              PUSH     {r4,lr}
;;;1147   {
000002  4604              MOV      r4,r0
;;;1148   #if 1	/* 将需要printf的字符通过串口中断FIFO发送出去，printf函数会立即返回 */
;;;1149   	comSendChar(COM1, ch);
000004  b2e1              UXTB     r1,r4
000006  2000              MOVS     r0,#0
000008  f7fffffe          BL       comSendChar
;;;1150   
;;;1151   	return ch;
00000c  4620              MOV      r0,r4
;;;1152   #else	/* 采用阻塞方式发送每个字符,等待数据发送完毕 */
;;;1153   	/* 写一个字节到USART1 */
;;;1154   	USART_SendData(USART1, (uint8_t) ch);
;;;1155   
;;;1156   	/* 等待发送结束 */
;;;1157   	while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET)
;;;1158   	{}
;;;1159   
;;;1160   	return ch;
;;;1161   #endif
;;;1162   }
00000e  bd10              POP      {r4,pc}
;;;1163   
                          ENDP


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

                  g_RxBuf
                          %        32
                  g_tUart1
                          %        40
                  g_TxBuf1
                          %        1024
                  g_RxBuf1
                          %        1024

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

                  ||pt||
000000  00                DCB      0x00
                  g_ucRxRcvNewFlag
000001  00                DCB      0x00
                  rx_state
000002  00                DCB      0x00

;*** Start embedded assembler ***

#line 1 "..\\..\\User\\bsp\\src\\bsp_uart_fifo.c"
	AREA ||.rev16_text||, CODE
	THUMB
	EXPORT |__asm___15_bsp_uart_fifo_c_pt____REV16|
#line 114 "..\\..\\Libraries\\CMSIS\\Include\\core_cmInstr.h"
|__asm___15_bsp_uart_fifo_c_pt____REV16| PROC
#line 115

 rev16 r0, r0
 bx lr
	ENDP
	AREA ||.revsh_text||, CODE
	THUMB
	EXPORT |__asm___15_bsp_uart_fifo_c_pt____REVSH|
#line 128
|__asm___15_bsp_uart_fifo_c_pt____REVSH| PROC
#line 129

 revsh r0, r0
 bx lr
	ENDP

;*** End   embedded assembler ***
