📄 uart.lst
字号:
\ 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 + -