⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uart.lst

📁 Cortex-M4+example
💻 LST
📖 第 1 页 / 共 3 页
字号:
   \   000000E6   ....               LDR.N    R3,??DataTable0_19  ;; 0x40048028
   \   000000E8   1B68               LDR      R3,[R3, #+0]
   \   000000EA   53F48063           ORRS     R3,R3,#0x400
   \   000000EE   ....               LDR.N    R4,??DataTable0_19  ;; 0x40048028
   \   000000F0   2360               STR      R3,[R4, #+0]
   \   000000F2   05E0               B.N      ??uart_init_7
     77          					else
     78          						SIM_SCGC1 |= SIM_SCGC1_UART5_MASK;
   \                     ??uart_init_11:
   \   000000F4   ....               LDR.N    R3,??DataTable0_19  ;; 0x40048028
   \   000000F6   1B68               LDR      R3,[R3, #+0]
   \   000000F8   53F40063           ORRS     R3,R3,#0x800
   \   000000FC   ....               LDR.N    R4,??DataTable0_19  ;; 0x40048028
   \   000000FE   2360               STR      R3,[R4, #+0]
     79          								
     80          	//禁止发送接受
     81          	UART_C2_REG(uartch) &= ~(UART_C2_TE_MASK
     82          				| UART_C2_RE_MASK );
   \                     ??uart_init_7:
   \   00000100   C378               LDRB     R3,[R0, #+3]
   \   00000102   13F0F303           ANDS     R3,R3,#0xF3
   \   00000106   C370               STRB     R3,[R0, #+3]
     83          	
     84          	//配置成8位无校验模式
     85          	UART_C1_REG(uartch) = 0;
   \   00000108   0023               MOVS     R3,#+0
   \   0000010A   8370               STRB     R3,[R0, #+2]
     86          	
     87          	//计算波特率,串口0、1使用内核时钟,其它串口使用外设时钟,系统时钟为
     88          	//外设时钟的2倍
     89          	if ((uartch == UART0_BASE_PTR) | (uartch == UART1_BASE_PTR))//
   \   0000010C   ....               LDR.N    R3,??DataTable0  ;; 0x4006a000
   \   0000010E   9842               CMP      R0,R3
   \   00000110   08D0               BEQ.N    ??uart_init_12
   \   00000112   0023               MOVS     R3,#+0
   \   00000114   ....               LDR.N    R4,??DataTable0_3  ;; 0x4006b000
   \   00000116   A042               CMP      R0,R4
   \   00000118   04D0               BEQ.N    ??uart_init_12
   \   0000011A   53F00003           ORRS     R3,R3,#0x0
   \   0000011E   DBB2               UXTB     R3,R3            ;; ZeroExt  R3,R3,#+24,#+24
   \   00000120   002B               CMP      R3,#+0
   \   00000122   00D0               BEQ.N    ??uart_init_13
     90          		sysclk+=sysclk;
   \                     ??uart_init_12:
   \   00000124   4918               ADDS     R1,R1,R1
     91          	
     92          	sbr = (uint16)((sysclk*1000)/(baud * 16));
   \                     ??uart_init_13:
   \   00000126   4FF47A73           MOV      R3,#+1000
   \   0000012A   03FB01F3           MUL      R3,R3,R1
   \   0000012E   1401               LSLS     R4,R2,#+4
   \   00000130   B3FBF4F3           UDIV     R3,R3,R4
     93          	temp = UART_BDH_REG(uartch) & ~(UART_BDH_SBR(0x1F));
   \   00000134   0478               LDRB     R4,[R0, #+0]
   \   00000136   14F0E004           ANDS     R4,R4,#0xE0
     94          	UART_BDH_REG(uartch) = temp |  UART_BDH_SBR(((sbr & 0x1F00) >> 8));
   \   0000013A   9BB2               UXTH     R3,R3            ;; ZeroExt  R3,R3,#+16,#+16
   \   0000013C   1D0A               LSRS     R5,R3,#+8
   \   0000013E   15F01F05           ANDS     R5,R5,#0x1F
   \   00000142   2C43               ORRS     R4,R5,R4
   \   00000144   0470               STRB     R4,[R0, #+0]
     95          	UART_BDL_REG(uartch) = (uint8)(sbr & UART_BDL_SBR_MASK);
   \   00000146   4370               STRB     R3,[R0, #+1]
     96          	brfa = (((sysclk*32000)/(baud * 16)) - (sbr * 32));
   \   00000148   4FF4FA44           MOV      R4,#+32000
   \   0000014C   6143               MULS     R1,R4,R1
   \   0000014E   1201               LSLS     R2,R2,#+4
   \   00000150   B1FBF2F1           UDIV     R1,R1,R2
   \   00000154   9BB2               UXTH     R3,R3            ;; ZeroExt  R3,R3,#+16,#+16
   \   00000156   B1EB4311           SUBS     R1,R1,R3, LSL #+5
     97          	temp = UART_C4_REG(uartch) & ~(UART_C4_BRFA(0x1F));
   \   0000015A   827A               LDRB     R2,[R0, #+10]
   \   0000015C   12F0E004           ANDS     R4,R2,#0xE0
     98          	UART_C4_REG(uartch) = temp |  UART_C4_BRFA(brfa);    
   \   00000160   11F01F01           ANDS     R1,R1,#0x1F
   \   00000164   2143               ORRS     R1,R1,R4
   \   00000166   8172               STRB     R1,[R0, #+10]
     99          	
    100          	//使能发送接受
    101          	UART_C2_REG(uartch) |= (UART_C2_TE_MASK
    102          				| UART_C2_RE_MASK );
   \   00000168   C178               LDRB     R1,[R0, #+3]
   \   0000016A   51F00C01           ORRS     R1,R1,#0xC
   \   0000016E   C170               STRB     R1,[R0, #+3]
    103          }
   \   00000170   30BC               POP      {R4,R5}
   \   00000172   7047               BX       LR               ;; return
    104          
    105          //-------------------------------------------------------------------------*
    106          //函数名: uart_re1                                                         *
    107          //功  能: 串行接受1个字节                                                  *
    108          //参  数: uartch: 串口号                                                   *
    109          //         ch:    接收到的字节                                             *
    110          //返  回: 成功:1;失败:0                                                    *
    111          //说  明:                                                                  *
    112          //-------------------------------------------------------------------------*

   \                                 In section .text, align 2, keep-with-next
    113          uint8 uart_re1 (UART_MemMapPtr uartch,uint8 *ch)
    114          {
    115              uint32 k;
    116              
    117              for (k = 0; k < 0xfbbb; k++)//有时间限制
   \                     uart_re1:
   \   00000000   0022               MOVS     R2,#+0
   \   00000002   00E0               B.N      ??uart_re1_0
   \                     ??uart_re1_1:
   \   00000004   521C               ADDS     R2,R2,#+1
   \                     ??uart_re1_0:
   \   00000006   4FF6BB33           MOVW     R3,#+64443
   \   0000000A   9A42               CMP      R2,R3
   \   0000000C   06D2               BCS.N    ??uart_re1_2
    118          		if((UART_S1_REG(uartch) & UART_S1_RDRF_MASK)!= 0)//判断接收缓冲区是否满
   \   0000000E   0379               LDRB     R3,[R0, #+4]
   \   00000010   9B06               LSLS     R3,R3,#+26
   \   00000012   F7D5               BPL.N    ??uart_re1_1
    119          		{
    120          			*ch = UART_D_REG(uartch);
   \   00000014   C079               LDRB     R0,[R0, #+7]
   \   00000016   0870               STRB     R0,[R1, #+0]
    121          			return 1; 			//接受成功
   \   00000018   0120               MOVS     R0,#+1
   \   0000001A   06E0               B.N      ??uart_re1_3
    122          		} 
    123          	if(k>=0xfbbb) 
   \                     ??uart_re1_2:
   \   0000001C   4FF6BB30           MOVW     R0,#+64443
   \   00000020   8242               CMP      R2,R0
   \   00000022   01D3               BCC.N    ??uart_re1_4
    124          	{
    125          		return 0;			//接受失败
   \   00000024   0020               MOVS     R0,#+0
   \   00000026   00E0               B.N      ??uart_re1_3
    126          	} 
    127              return 0;
   \                     ??uart_re1_4:
   \   00000028   0020               MOVS     R0,#+0
   \                     ??uart_re1_3:
   \   0000002A   7047               BX       LR               ;; return
    128          }
    129          
    130          //-------------------------------------------------------------------------*
    131          //函数名: uart_send1                                                       *
    132          //功  能: 串行发送1个字节                                                  *
    133          //参  数: uartch: 串口号                                                   *
    134          //         ch:    要发送的字节                                             *
    135          //返  回: 无                                                               *
    136          //说  明:                                                                  *
    137          //-------------------------------------------------------------------------*

   \                                 In section .text, align 2, keep-with-next
    138          void uart_send1 (UART_MemMapPtr uartch, uint8 ch)
    139          {
    140              //等待发送缓冲区空
    141              while(!(UART_S1_REG(uartch) & UART_S1_TDRE_MASK));
   \                     uart_send1:
   \                     ??uart_send1_0:
   \   00000000   0279               LDRB     R2,[R0, #+4]
   \   00000002   1206               LSLS     R2,R2,#+24
   \   00000004   FCD5               BPL.N    ??uart_send1_0
    142              //发送数据
    143              UART_D_REG(uartch) = (uint8)ch;
   \   00000006   C171               STRB     R1,[R0, #+7]
    144           }
   \   00000008   7047               BX       LR               ;; return
    145          
    146          //-------------------------------------------------------------------------*
    147          //函数名: uart_reN                                                         *
    148          //功  能: 串行 接收n个字节                                                 *
    149          //参  数: uartch: 串口号                                                   *
    150          //        buff: 接收缓冲区                                                 *
    151          //		  len:接收长度                                             *
    152          //返  回: 1:成功;0:失败                                                    *
    153          //说  明:                                                                  *
    154          //-------------------------------------------------------------------------*

   \                                 In section .text, align 2, keep-with-next
    155          uint8 uart_reN (UART_MemMapPtr uartch ,uint8* buff,uint16 len)
    156          {
   \                     uart_reN:
   \   00000000   F8B5               PUSH     {R3-R7,LR}
   \   00000002   0400               MOVS     R4,R0
   \   00000004   0D00               MOVS     R5,R1
   \   00000006   1600               MOVS     R6,R2
    157              uint16 m=0; 
   \   00000008   0027               MOVS     R7,#+0
   \   0000000A   00E0               B.N      ??uart_reN_0
    158              while (m < len)
    159              { 	          
    160            	    if(0==uart_re1(uartch,&buff[m]))
    161            	    	return 0;  //接收失败
    162            	    else m++;
   \                     ??uart_reN_1:
   \   0000000C   7F1C               ADDS     R7,R7,#+1
   \                     ??uart_reN_0:
   \   0000000E   BFB2               UXTH     R7,R7            ;; ZeroExt  R7,R7,#+16,#+16
   \   00000010   B6B2               UXTH     R6,R6            ;; ZeroExt  R6,R6,#+16,#+16
   \   00000012   B742               CMP      R7,R6
   \   00000014   08D2               BCS.N    ??uart_reN_2
   \   00000016   BFB2               UXTH     R7,R7            ;; ZeroExt  R7,R7,#+16,#+16
   \   00000018   7919               ADDS     R1,R7,R5
   \   0000001A   2000               MOVS     R0,R4
   \   0000001C   ........           BL       uart_re1
   \   00000020   0028               CMP      R0,#+0
   \   00000022   F3D1               BNE.N    ??uart_reN_1
   \   00000024   0020               MOVS     R0,#+0
   \   00000026   00E0               B.N      ??uart_reN_3
    163              } 
    164              
    165              return 1;          //接收成功
   \                     ??uart_reN_2:
   \   00000028   0120               MOVS     R0,#+1
   \                     ??uart_reN_3:
   \   0000002A   F2BD               POP      {R1,R4-R7,PC}    ;; return
    166              
    167          }
    168          
    169          //-------------------------------------------------------------------------*
    170          //函数名: uart_sendN                                                       *
    171          //功  能: 串行 接收n个字节                                                 *
    172          //参  数: uartch: 串口号                                                   *
    173          //        buff: 发送缓冲区                                                 *
    174          //		  len:发送长度                                             *
    175          //返  回: 无                                                               *
    176          //说  明:                                                                  *
    177          //-------------------------------------------------------------------------*

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -