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

📄 uart.lst

📁 Cortex-M4+example
💻 LST
📖 第 1 页 / 共 3 页
字号:
   \   000000F0   0x6023             STR      R3,[R4, #+0]
   \   000000F2   0xE005             B.N      ??uart_init_7
     77          					else
     78          						SIM_SCGC1 |= SIM_SCGC1_UART5_MASK;
   \                     ??uart_init_11:
   \   000000F4   0x....             LDR.N    R3,??DataTable0_19  ;; 0x40048028
   \   000000F6   0x681B             LDR      R3,[R3, #+0]
   \   000000F8   0xF453 0x6300      ORRS     R3,R3,#0x800
   \   000000FC   0x....             LDR.N    R4,??DataTable0_19  ;; 0x40048028
   \   000000FE   0x6023             STR      R3,[R4, #+0]
     79          								
     80          	//禁止发送接受
     81          	UART_C2_REG(uartch) &= ~(UART_C2_TE_MASK
     82          				| UART_C2_RE_MASK );
   \                     ??uart_init_7:
   \   00000100   0x78C3             LDRB     R3,[R0, #+3]
   \   00000102   0xF013 0x03F3      ANDS     R3,R3,#0xF3
   \   00000106   0x70C3             STRB     R3,[R0, #+3]
     83          	
     84          	//配置成8位无校验模式
     85          	UART_C1_REG(uartch) = 0;
   \   00000108   0x2300             MOVS     R3,#+0
   \   0000010A   0x7083             STRB     R3,[R0, #+2]
     86          	
     87          	//计算波特率,串口0、1使用内核时钟,其它串口使用外设时钟,系统时钟为
     88          	//外设时钟的2倍
     89          	if ((uartch == UART0_BASE_PTR) | (uartch == UART1_BASE_PTR))//
   \   0000010C   0x....             LDR.N    R3,??DataTable0  ;; 0x4006a000
   \   0000010E   0x4298             CMP      R0,R3
   \   00000110   0xD101             BNE.N    ??uart_init_12
   \   00000112   0x2301             MOVS     R3,#+1
   \   00000114   0xE000             B.N      ??uart_init_13
   \                     ??uart_init_12:
   \   00000116   0x2300             MOVS     R3,#+0
   \                     ??uart_init_13:
   \   00000118   0x....             LDR.N    R4,??DataTable0_3  ;; 0x4006b000
   \   0000011A   0x42A0             CMP      R0,R4
   \   0000011C   0xD101             BNE.N    ??uart_init_14
   \   0000011E   0x2401             MOVS     R4,#+1
   \   00000120   0xE000             B.N      ??uart_init_15
   \                     ??uart_init_14:
   \   00000122   0x2400             MOVS     R4,#+0
   \                     ??uart_init_15:
   \   00000124   0xB2DB             UXTB     R3,R3            ;; ZeroExt  R3,R3,#+24,#+24
   \   00000126   0xB2E4             UXTB     R4,R4            ;; ZeroExt  R4,R4,#+24,#+24
   \   00000128   0x4323             ORRS     R3,R4,R3
   \   0000012A   0x2B00             CMP      R3,#+0
   \   0000012C   0xD000             BEQ.N    ??uart_init_16
     90          		sysclk+=sysclk;
   \   0000012E   0x1849             ADDS     R1,R1,R1
     91          	
     92          	sbr = (uint16)((sysclk*1000)/(baud * 16));
   \                     ??uart_init_16:
   \   00000130   0xF44F 0x737A      MOV      R3,#+1000
   \   00000134   0xFB03 0xF301      MUL      R3,R3,R1
   \   00000138   0x0114             LSLS     R4,R2,#+4
   \   0000013A   0xFBB3 0xF3F4      UDIV     R3,R3,R4
     93          	temp = UART_BDH_REG(uartch) & ~(UART_BDH_SBR(0x1F));
   \   0000013E   0x7804             LDRB     R4,[R0, #+0]
   \   00000140   0xF014 0x04E0      ANDS     R4,R4,#0xE0
     94          	UART_BDH_REG(uartch) = temp |  UART_BDH_SBR(((sbr & 0x1F00) >> 8));
   \   00000144   0xB29B             UXTH     R3,R3            ;; ZeroExt  R3,R3,#+16,#+16
   \   00000146   0x0A1D             LSRS     R5,R3,#+8
   \   00000148   0xF015 0x051F      ANDS     R5,R5,#0x1F
   \   0000014C   0x432C             ORRS     R4,R5,R4
   \   0000014E   0x7004             STRB     R4,[R0, #+0]
     95          	UART_BDL_REG(uartch) = (uint8)(sbr & UART_BDL_SBR_MASK);
   \   00000150   0x7043             STRB     R3,[R0, #+1]
     96          	brfa = (((sysclk*32000)/(baud * 16)) - (sbr * 32));
   \   00000152   0xF44F 0x44FA      MOV      R4,#+32000
   \   00000156   0x4361             MULS     R1,R4,R1
   \   00000158   0x0112             LSLS     R2,R2,#+4
   \   0000015A   0xFBB1 0xF1F2      UDIV     R1,R1,R2
   \   0000015E   0xB29B             UXTH     R3,R3            ;; ZeroExt  R3,R3,#+16,#+16
   \   00000160   0xEBB1 0x1143      SUBS     R1,R1,R3, LSL #+5
     97          	temp = UART_C4_REG(uartch) & ~(UART_C4_BRFA(0x1F));
   \   00000164   0x7A82             LDRB     R2,[R0, #+10]
   \   00000166   0xF012 0x04E0      ANDS     R4,R2,#0xE0
     98          	UART_C4_REG(uartch) = temp |  UART_C4_BRFA(brfa);    
   \   0000016A   0xF011 0x011F      ANDS     R1,R1,#0x1F
   \   0000016E   0x4321             ORRS     R1,R1,R4
   \   00000170   0x7281             STRB     R1,[R0, #+10]
     99          	
    100          	//使能发送接受
    101          	UART_C2_REG(uartch) |= (UART_C2_TE_MASK
    102          				| UART_C2_RE_MASK );
   \   00000172   0x78C1             LDRB     R1,[R0, #+3]
   \   00000174   0xF051 0x010C      ORRS     R1,R1,#0xC
   \   00000178   0x70C1             STRB     R1,[R0, #+3]
    103          }
   \   0000017A   0xBC30             POP      {R4,R5}
   \   0000017C   0x4770             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   0x2200             MOVS     R2,#+0
   \   00000002   0xE000             B.N      ??uart_re1_0
   \                     ??uart_re1_1:
   \   00000004   0x1C52             ADDS     R2,R2,#+1
   \                     ??uart_re1_0:
   \   00000006   0xF64F 0x33BB      MOVW     R3,#+64443
   \   0000000A   0x429A             CMP      R2,R3
   \   0000000C   0xD206             BCS.N    ??uart_re1_2
    118          		if((UART_S1_REG(uartch) & UART_S1_RDRF_MASK)!= 0)//判断接收缓冲区是否满
   \   0000000E   0x7903             LDRB     R3,[R0, #+4]
   \   00000010   0x069B             LSLS     R3,R3,#+26
   \   00000012   0xD5F7             BPL.N    ??uart_re1_1
    119          		{
    120          			*ch = UART_D_REG(uartch);
   \   00000014   0x79C0             LDRB     R0,[R0, #+7]
   \   00000016   0x7008             STRB     R0,[R1, #+0]
    121          			return 1; 			//接受成功
   \   00000018   0x2001             MOVS     R0,#+1
   \   0000001A   0xE006             B.N      ??uart_re1_3
    122          		} 
    123          	if(k>=0xfbbb) 
   \                     ??uart_re1_2:
   \   0000001C   0xF64F 0x30BB      MOVW     R0,#+64443
   \   00000020   0x4282             CMP      R2,R0
   \   00000022   0xD301             BCC.N    ??uart_re1_4
    124          	{
    125          		return 0;			//接受失败
   \   00000024   0x2000             MOVS     R0,#+0
   \   00000026   0xE000             B.N      ??uart_re1_3
    126          	} 
    127              return 0;
   \                     ??uart_re1_4:
   \   00000028   0x2000             MOVS     R0,#+0
   \                     ??uart_re1_3:
   \   0000002A   0x4770             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   0x7902             LDRB     R2,[R0, #+4]
   \   00000002   0x0612             LSLS     R2,R2,#+24
   \   00000004   0xD5FC             BPL.N    ??uart_send1_0
    142              //发送数据
    143              UART_D_REG(uartch) = (uint8)ch;
   \   00000006   0x71C1             STRB     R1,[R0, #+7]
    144           }
   \   00000008   0x4770             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   0xB5F8             PUSH     {R3-R7,LR}
   \   00000002   0x0004             MOVS     R4,R0
   \   00000004   0x000D             MOVS     R5,R1
   \   00000006   0x0016             MOVS     R6,R2
    157              uint16 m=0; 
   \   00000008   0x2700             MOVS     R7,#+0
   \   0000000A   0xE000             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   0x1C7F             ADDS     R7,R7,#+1
   \                     ??uart_reN_0:
   \   0000000E   0xB2BF             UXTH     R7,R7            ;; ZeroExt  R7,R7,#+16,#+16
   \   00000010   0xB2B6             UXTH     R6,R6            ;; ZeroExt  R6,R6,#+16,#+16
   \   00000012   0x42B7             CMP      R7,R6
   \   00000014   0xD208             BCS.N    ??uart_reN_2
   \   00000016   0xB2BF             UXTH     R7,R7            ;; ZeroExt  R7,R7,#+16,#+16
   \   00000018   0x1979             ADDS     R1,R7,R5
   \   0000001A   0x0020             MOVS     R0,R4
   \   0000001C   0x.... 0x....      BL       uart_re1
   \   00000020   0x2800             CMP      R0,#+0
   \   00000022   0xD1F3             BNE.N    ??uart_reN_1
   \   00000024   0x2000             MOVS     R0,#+0
   \   00000026   0xE000             B.N      ??uart_reN_3
    163              } 
    164              
    165              return 1;          //接收成功
   \                     ??uart_reN_2:
   \   00000028   0x2001             MOVS     R0,#+1
   \                     ??uart_reN_3:
   \   0000002A   0xBDF2             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 + -