📄 bsp_ser.lst
字号:
\ 0000006A 2520 MOVS R0,#+37
\ 0000006C ........ BL BSP_PeriphEn
167 BSP_PeriphEn(BSP_PERIPH_ID_AFIO);
\ 00000070 2020 MOVS R0,#+32
\ 00000072 ........ BL BSP_PeriphEn
168 GPIO_PinRemapConfig(GPIO_Remap_USART2, ENABLE);
\ 00000076 0121 MOVS R1,#+1
\ 00000078 0820 MOVS R0,#+8
\ 0000007A ........ BL GPIO_PinRemapConfig
169 /* ----------------- SETUP USART2 GPIO ---------------- */
170 /* Configure GPIOD.5 as push-pull. */
171 gpio_init.GPIO_Pin = GPIO_Pin_5;
\ 0000007E 2020 MOVS R0,#+32
\ 00000080 ADF80000 STRH R0,[SP, #+0]
172 gpio_init.GPIO_Speed = GPIO_Speed_50MHz;
\ 00000084 0320 MOVS R0,#+3
\ 00000086 8DF80200 STRB R0,[SP, #+2]
173 gpio_init.GPIO_Mode = GPIO_Mode_AF_PP;
\ 0000008A 1820 MOVS R0,#+24
\ 0000008C 8DF80300 STRB R0,[SP, #+3]
174 GPIO_Init(GPIOD, &gpio_init);
\ 00000090 00A9 ADD R1,SP,#+0
\ 00000092 .... LDR.N R0,??DataTable10_3 ;; 0x40011400
\ 00000094 ........ BL GPIO_Init
175
176 /* Configure GPIOD.6 as input floating. */
177 gpio_init.GPIO_Pin = GPIO_Pin_6;
\ 00000098 4020 MOVS R0,#+64
\ 0000009A ADF80000 STRH R0,[SP, #+0]
178 gpio_init.GPIO_Mode = GPIO_Mode_IN_FLOATING;
\ 0000009E 0420 MOVS R0,#+4
\ 000000A0 8DF80300 STRB R0,[SP, #+3]
179 GPIO_Init(GPIOD, &gpio_init);
\ 000000A4 00A9 ADD R1,SP,#+0
\ 000000A6 .... LDR.N R0,??DataTable10_3 ;; 0x40011400
\ 000000A8 ........ BL GPIO_Init
180
181 /* ------------------ SETUP USART2 -------------------- */
182 USART_Init(USART2, &usart_init);
\ 000000AC 03A9 ADD R1,SP,#+12
\ 000000AE .... LDR.N R0,??DataTable10_4 ;; 0x40004400
\ 000000B0 ........ BL USART_Init
183 USART_ClockInit(USART2, &usart_clk_init);
\ 000000B4 01A9 ADD R1,SP,#+4
\ 000000B6 .... LDR.N R0,??DataTable10_4 ;; 0x40004400
\ 000000B8 ........ BL USART_ClockInit
184 USART_Cmd(USART2, ENABLE);
\ 000000BC 0121 MOVS R1,#+1
\ 000000BE .... LDR.N R0,??DataTable10_4 ;; 0x40004400
\ 000000C0 ........ BL USART_Cmd
185
186 USART_ITConfig(USART2, USART_IT_TC, DISABLE);
\ 000000C4 0022 MOVS R2,#+0
\ 000000C6 40F22661 MOVW R1,#+1574
\ 000000CA .... LDR.N R0,??DataTable10_4 ;; 0x40004400
\ 000000CC ........ BL USART_ITConfig
187 USART_ITConfig(USART2, USART_IT_TXE, DISABLE);
\ 000000D0 0022 MOVS R2,#+0
\ 000000D2 40F22771 MOVW R1,#+1831
\ 000000D6 .... LDR.N R0,??DataTable10_4 ;; 0x40004400
\ 000000D8 ........ BL USART_ITConfig
188 tc_status = USART_GetFlagStatus(USART2, USART_FLAG_TC);
\ 000000DC 4021 MOVS R1,#+64
\ 000000DE .... LDR.N R0,??DataTable10_4 ;; 0x40004400
\ 000000E0 ........ BL USART_GetFlagStatus
\ 000000E4 0500 MOVS R5,R0
189
190 while (tc_status == SET) {
\ ??BSP_Ser_Init_0:
\ 000000E6 EDB2 UXTB R5,R5 ;; ZeroExt R5,R5,#+24,#+24
\ 000000E8 012D CMP R5,#+1
\ 000000EA 12D1 BNE.N ??BSP_Ser_Init_1
191 USART_ClearITPendingBit(USART2, USART_IT_TC);
\ 000000EC 40F22661 MOVW R1,#+1574
\ 000000F0 .... LDR.N R0,??DataTable10_4 ;; 0x40004400
\ 000000F2 ........ BL USART_ClearITPendingBit
192 USART_ClearFlag(USART2, USART_IT_TC);
\ 000000F6 40F22661 MOVW R1,#+1574
\ 000000FA .... LDR.N R0,??DataTable10_4 ;; 0x40004400
\ 000000FC ........ BL USART_ClearFlag
193 BSP_OS_TimeDlyMs(10);
\ 00000100 0A20 MOVS R0,#+10
\ 00000102 ........ BL BSP_OS_TimeDlyMs
194 tc_status = USART_GetFlagStatus(USART2, USART_FLAG_TC);
\ 00000106 4021 MOVS R1,#+64
\ 00000108 .... LDR.N R0,??DataTable10_4 ;; 0x40004400
\ 0000010A ........ BL USART_GetFlagStatus
\ 0000010E 0500 MOVS R5,R0
\ 00000110 E9E7 B.N ??BSP_Ser_Init_0
195 }
196
197 BSP_IntVectSet(BSP_INT_ID_USART2, BSP_Ser_ISR_Handler);
\ ??BSP_Ser_Init_1:
\ 00000112 .... LDR.N R1,??DataTable10_5
\ 00000114 2620 MOVS R0,#+38
\ 00000116 ........ BL BSP_IntVectSet
198 BSP_IntEn(BSP_INT_ID_USART2);
\ 0000011A 2620 MOVS R0,#+38
\ 0000011C ........ BL BSP_IntEn
199 }
\ 00000120 07B0 ADD SP,SP,#+28
\ 00000122 30BD POP {R4,R5,PC} ;; return
200
201
202 /*
203 *********************************************************************************************************
204 * BSP_Ser_ISR_Handler()
205 *
206 * Description : Serial ISR.
207 *
208 * Argument(s) : none.
209 *
210 * Return(s) : none.
211 *
212 * Caller(s) : This is an ISR.
213 *
214 * Note(s) : none.
215 *********************************************************************************************************
216 */
217
\ In section .text, align 2, keep-with-next
218 void BSP_Ser_ISR_Handler (void)
219 {
\ BSP_Ser_ISR_Handler:
\ 00000000 38B5 PUSH {R3-R5,LR}
220 FlagStatus tc_status;
221 FlagStatus rxne_status;
222
223
224 rxne_status = USART_GetFlagStatus(USART2, USART_FLAG_RXNE);
\ 00000002 2021 MOVS R1,#+32
\ 00000004 .... LDR.N R0,??DataTable10_4 ;; 0x40004400
\ 00000006 ........ BL USART_GetFlagStatus
\ 0000000A 0500 MOVS R5,R0
225 if (rxne_status == SET) {
\ 0000000C EDB2 UXTB R5,R5 ;; ZeroExt R5,R5,#+24,#+24
\ 0000000E 012D CMP R5,#+1
\ 00000010 0CD1 BNE.N ??BSP_Ser_ISR_Handler_0
226 BSP_SerRxData = USART_ReceiveData(USART2) & 0xFF; /* Read one byte from the receive data register. */
\ 00000012 .... LDR.N R0,??DataTable10_4 ;; 0x40004400
\ 00000014 ........ BL USART_ReceiveData
\ 00000018 .... LDR.N R1,??DataTable10_6
\ 0000001A 0870 STRB R0,[R1, #+0]
227 USART_ClearITPendingBit(USART2, USART_IT_RXNE); /* Clear the USART2 receive interrupt. */
\ 0000001C 40F22551 MOVW R1,#+1317
\ 00000020 .... LDR.N R0,??DataTable10_4 ;; 0x40004400
\ 00000022 ........ BL USART_ClearITPendingBit
228 BSP_OS_SemPost(&BSP_SerRxWait); /* Post to the sempahore */
\ 00000026 .... LDR.N R0,??DataTable10_1
\ 00000028 ........ BL BSP_OS_SemPost
229 }
230
231 tc_status = USART_GetFlagStatus(USART2, USART_FLAG_TC);
\ ??BSP_Ser_ISR_Handler_0:
\ 0000002C 4021 MOVS R1,#+64
\ 0000002E .... LDR.N R0,??DataTable10_4 ;; 0x40004400
\ 00000030 ........ BL USART_GetFlagStatus
\ 00000034 0400 MOVS R4,R0
232 if (tc_status == SET) {
\ 00000036 E4B2 UXTB R4,R4 ;; ZeroExt R4,R4,#+24,#+24
\ 00000038 012C CMP R4,#+1
\ 0000003A 0DD1 BNE.N ??BSP_Ser_ISR_Handler_1
233 USART_ITConfig(USART2, USART_IT_TC, DISABLE);
\ 0000003C 0022 MOVS R2,#+0
\ 0000003E 40F22661 MOVW R1,#+1574
\ 00000042 .... LDR.N R0,??DataTable10_4 ;; 0x40004400
\ 00000044 ........ BL USART_ITConfig
234 USART_ClearITPendingBit(USART2, USART_IT_TC); /* Clear the USART2 receive interrupt. */
\ 00000048 40F22661 MOVW R1,#+1574
\ 0000004C .... LDR.N R0,??DataTable10_4 ;; 0x40004400
\ 0000004E ........ BL USART_ClearITPendingBit
235 BSP_OS_SemPost(&BSP_SerTxWait); /* Post to the semaphore */
\ 00000052 .... LDR.N R0,??DataTable10
\ 00000054 ........ BL BSP_OS_SemPost
236 }
237 }
\ ??BSP_Ser_ISR_Handler_1:
\ 00000058 31BD POP {R0,R4,R5,PC} ;; return
238
239
240 /*
241 *********************************************************************************************************
242 * BSP_Ser_Printf()
243 *
244 * Description : Print formatted data to the output serial port.
245 *
246 * Argument(s) : format String that contains the text to be written.
247 *
248 * Return(s) : none.
249 *
250 * Caller(s) : Application.
251 *
252 * Note(s) : (1) This function output a maximum of BSP_SER_PRINTF_STR_BUF_SIZE number of bytes to the
253 * serial port. The calling function hence has to make sure the formatted string will
254 * be able fit into this string buffer or hence the output string will be truncated.
255 *********************************************************************************************************
256 */
257
\ In section .text, align 2, keep-with-next
258 void BSP_Ser_Printf (CPU_CHAR *format, ...)
259 {
\ BSP_Ser_Printf:
\ 00000000 0EB4 PUSH {R1-R3}
\ 00000002 70B5 PUSH {R4-R6,LR}
\ 00000004 95B0 SUB SP,SP,#+84
\ 00000006 0400 MOVS R4,R0
260 CPU_CHAR buf_str[BSP_SER_PRINTF_STR_BUF_SIZE + 1u];
261 va_list v_args;
262
263
264 va_start(v_args, format);
\ 00000008 19A8 ADD R0,SP,#+100
\ 0000000A 0500 MOVS R5,R0
265 (void)vsnprintf((char *)&buf_str[0],
266 (size_t ) sizeof(buf_str),
267 (char const *) format,
268 v_args);
\ 0000000C 2B00 MOVS R3,R5
\ 0000000E 2200 MOVS R2,R4
\ 00000010 5121 MOVS R1,#+81
\ 00000012 00A8 ADD R0,SP,#+0
\ 00000014 ........ BL vsnprintf
\ 00000018 0600 MOVS R6,R0
269 va_end(v_args);
270
271 BSP_Ser_WrStr(buf_str);
\ 0000001A 00A8 ADD R0,SP,#+0
\ 0000001C ........ BL BSP_Ser_WrStr
272 }
\ 00000020 15B0 ADD SP,SP,#+84
\ 00000022 70BC POP {R4-R6}
\ 00000024 5DF810FB LDR PC,[SP], #+16 ;; return
273
274
275 /*
276 *********************************************************************************************************
277 * BSP_Ser_RdByte()
278 *
279 * Description : Receive a single byte.
280 *
281 * Argument(s) : none.
282 *
283 * Return(s) : The received byte.
284 *
285 * Caller(s) : Application.
286 *
287 * Note(s) : (1) This functions blocks until a data is received.
288 *
289 * (2) It can not be called from an ISR.
290 *********************************************************************************************************
291 */
292
\ In section .text, align 2, keep-with-next
293 CPU_INT08U BSP_Ser_RdByte (void)
294 {
\ BSP_Ser_RdByte:
\ 00000000 10B5 PUSH {R4,LR}
295 CPU_INT08U rx_byte;
296
297
298 BSP_OS_SemWait(&BSP_SerLock, 0); /* Obtain access to the serial interface. */
\ 00000002 0021 MOVS R1,#+0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -