📄 hal_uart.lst
字号:
307 {
308 cfg->rxBuf[cfg->rxHead++] = *(pad+1);
\ ??pollDMA_2:
\ 000028 EE MOV A,R6
\ 000029 2402 ADD A,#0x2
\ 00002B FA MOV R2,A
\ 00002C 8882 MOV DPL,R0
\ 00002E 8983 MOV DPH,R1
\ 000030 A3 INC DPTR
\ 000031 E0 MOVX A,@DPTR
\ 000032 C0E0 PUSH A
\ 000034 8A82 MOV DPL,R2
\ 000036 8B83 MOV DPH,R3
\ 000038 E0 MOVX A,@DPTR
\ 000039 F5.. MOV ?V0 + 0,A
\ 00003B 8E82 MOV DPL,R6
\ 00003D 8F83 MOV DPH,R7
\ 00003F E0 MOVX A,@DPTR
\ 000040 25.. ADD A,?V0 + 0
\ 000042 FD MOV R5,A
\ 000043 A3 INC DPTR
\ 000044 E0 MOVX A,@DPTR
\ 000045 3400 ADDC A,#0x0
\ 000047 8D82 MOV DPL,R5
\ 000049 F583 MOV DPH,A
\ 00004B D0E0 POP A
\ 00004D F0 MOVX @DPTR,A
\ 00004E 8A82 MOV DPL,R2
\ 000050 8B83 MOV DPH,R3
\ 000052 E0 MOVX A,@DPTR
\ 000053 04 INC A
\ 000054 F0 MOVX @DPTR,A
309 pad += 2;
\ 000055 E8 MOV A,R0
\ 000056 2402 ADD A,#0x2
\ 000058 08 INC R0
\ 000059 08 INC R0
\ 00005A E9 MOV A,R1
\ 00005B 3400 ADDC A,#0x0
\ ??pollDMA_1:
\ 00005D F9 MOV R1,A
310 }
\ 00005E 8882 MOV DPL,R0
\ 000060 8983 MOV DPH,R1
\ 000062 E0 MOVX A,@DPTR
\ 000063 65C2 XRL A,0xc2
\ 000065 7019 JNZ ??pollDMA_3
\ 000067 8E82 MOV DPL,R6
\ 000069 8F83 MOV DPH,R7
\ 00006B A3 INC DPTR
\ 00006C A3 INC DPTR
\ 00006D E0 MOVX A,@DPTR
\ 00006E C0E0 PUSH A
\ 000070 8E82 MOV DPL,R6
\ 000072 8F83 MOV DPH,R7
\ 000074 A3 INC DPTR
\ 000075 A3 INC DPTR
\ 000076 A3 INC DPTR
\ 000077 A3 INC DPTR
\ 000078 E0 MOVX A,@DPTR
\ 000079 FA MOV R2,A
\ 00007A D0E0 POP A
\ 00007C C3 CLR C
\ 00007D 9A SUBB A,R2
\ 00007E 40A8 JC ??pollDMA_2
311
312 if ( !(cfg->flag & UART_CFG_RXF) )
\ ??pollDMA_3:
\ 000080 12.... LCALL ?Subroutine5 & 0xFFFF
\ ??CrossCallReturnLabel_13:
\ 000083 A2E1 MOV C,0xE0 /* A */.1
\ 000085 8E82 MOV DPL,R6
\ 000087 8F83 MOV DPH,R7
\ 000089 A3 INC DPTR
\ 00008A A3 INC DPTR
\ 00008B 4046 JC ??pollDMA_4
313 {
314 /* It is necessary to stop Rx flow and wait for H/W-enqueued bytes still
315 * incoming to stop before resetting the DMA Rx engine. If DMA Rx is
316 * aborted during incoming data, a byte may be lost inside the engine
317 * during the 2-step transfer process of read/write.
318 */
319 if ( cfg->rxHead >= (cfg->rxMax - SAFE_RX_MIN) )
\ 00008D E0 MOVX A,@DPTR
\ 00008E FA MOV R2,A
\ 00008F 8E82 MOV DPL,R6
\ 000091 8F83 MOV DPH,R7
\ 000093 12.... LCALL ?Subroutine1 & 0xFFFF
\ ??CrossCallReturnLabel_0:
\ 000096 4023 JC ??pollDMA_5
320 {
321 RX_STOP_FLOW( cfg );
\ 000098 12.... LCALL ?Subroutine4 & 0xFFFF
\ ??CrossCallReturnLabel_10:
\ 00009B 4004 JC ??pollDMA_6
\ 00009D D285 SETB 0x80.5
\ 00009F 8002 SJMP ??pollDMA_7
\ ??pollDMA_6:
\ 0000A1 D295 SETB 0x90.5
\ ??pollDMA_7:
\ 0000A3 A2E6 MOV C,0xE0 /* A */.6
\ 0000A5 500D JNC ??pollDMA_8
\ 0000A7 748C MOV A,#-0x74
\ 0000A9 8E82 MOV DPL,R6
\ 0000AB 8F83 MOV DPH,R7
\ 0000AD A3 INC DPTR
\ 0000AE A3 INC DPTR
\ 0000AF A3 INC DPTR
\ 0000B0 A3 INC DPTR
\ 0000B1 A3 INC DPTR
\ 0000B2 A3 INC DPTR
\ 0000B3 F0 MOVX @DPTR,A
\ ??pollDMA_8:
\ 0000B4 12.... LCALL ?Subroutine5 & 0xFFFF
\ ??CrossCallReturnLabel_14:
\ 0000B7 D2E1 SETB 0xE0 /* A */.1
\ 0000B9 806D SJMP ??pollDMA_9
322 }
323 // If anything received, reset the Rx idle timer.
324 else if ( cfg->rxHead != cnt )
\ ??pollDMA_5:
\ 0000BB 8E82 MOV DPL,R6
\ 0000BD 8F83 MOV DPH,R7
\ 0000BF A3 INC DPTR
\ 0000C0 A3 INC DPTR
\ 0000C1 E0 MOVX A,@DPTR
\ 0000C2 6C XRL A,R4
\ 0000C3 6064 JZ ??pollDMA_10
325 {
326 cfg->rxTick = HAL_UART_RX_IDLE;
\ 0000C5 74C6 MOV A,#-0x3a
\ 0000C7 8E82 MOV DPL,R6
\ 0000C9 8F83 MOV DPH,R7
\ 0000CB A3 INC DPTR
\ 0000CC A3 INC DPTR
\ 0000CD A3 INC DPTR
\ 0000CE A3 INC DPTR
\ 0000CF A3 INC DPTR
\ 0000D0 A3 INC DPTR
\ 0000D1 8055 SJMP ??pollDMA_9
327 }
328 }
329 else if ( !cfg->rxTick && (cfg->rxHead == cfg->rxTail) )
\ ??pollDMA_4:
\ 0000D3 A3 INC DPTR
\ 0000D4 A3 INC DPTR
\ 0000D5 A3 INC DPTR
\ 0000D6 A3 INC DPTR
\ 0000D7 E0 MOVX A,@DPTR
\ 0000D8 704F JNZ ??pollDMA_10
\ 0000DA 8E82 MOV DPL,R6
\ 0000DC 8F83 MOV DPH,R7
\ 0000DE A3 INC DPTR
\ 0000DF A3 INC DPTR
\ 0000E0 12.... LCALL ?Subroutine16 & 0xFFFF
\ ??CrossCallReturnLabel_54:
\ 0000E3 E0 MOVX A,@DPTR
\ 0000E4 6A XRL A,R2
\ 0000E5 7042 JNZ ??pollDMA_10
330 {
331 HAL_DMA_ABORT_CH( HAL_DMA_CH_RX );
\ 0000E7 75D690 MOV 0xd6,#-0x70
332 cfg->rxHead = cfg->rxTail = 0;
\ 0000EA 12.... LCALL ?Subroutine15 & 0xFFFF
333 osal_memset( cfg->rxBuf, ~DMA_PAD, cfg->rxMax*2 );
\ ??CrossCallReturnLabel_52:
\ 0000ED 2404 ADD A,#0x4
\ 0000EF F5.. MOV ?V0 + 0,A
\ 0000F1 EF MOV A,R7
\ 0000F2 3400 ADDC A,#0x0
\ 0000F4 F5.. MOV ?V0 + 1,A
\ 0000F6 ; Setup parameters for call to function osal_memset
\ 0000F6 85..82 MOV DPL,?V0 + 0
\ 0000F9 F583 MOV DPH,A
\ 0000FB 12.... LCALL ?Subroutine11 & 0xFFFF
\ ??CrossCallReturnLabel_46:
\ 0000FE 8E82 MOV DPL,R6
\ 000100 8F83 MOV DPH,R7
\ 000102 E0 MOVX A,@DPTR
\ 000103 FA MOV R2,A
\ 000104 A3 INC DPTR
\ 000105 E0 MOVX A,@DPTR
\ 000106 FB MOV R3,A
\ 000107 90.... MOV DPTR,#(osal_memset & 0xffff)
\ 00010A 74.. MOV A,#((osal_memset >> 16) & 0xff)
\ 00010C 12.... LCALL ?BCALL ; Banked call to: DPTR()
334 DMA_RX( cfg );
\ 00010F 12.... LCALL ?Subroutine9 & 0xFFFF
\ ??CrossCallReturnLabel_42:
\ 000112 85..82 MOV DPL,?V0 + 0
\ 000115 85..83 MOV DPH,?V0 + 1
\ 000118 12.... LCALL ?Subroutine8 & 0xFFFF
335 RX_STRT_FLOW( cfg );
\ ??CrossCallReturnLabel_40:
\ 00011B 12.... LCALL ?Subroutine4 & 0xFFFF
\ ??CrossCallReturnLabel_11:
\ 00011E 4004 JC ??pollDMA_11
\ 000120 C285 CLR 0x80.5
\ 000122 8002 SJMP ??pollDMA_12
\ ??pollDMA_11:
\ 000124 C295 CLR 0x90.5
\ ??pollDMA_12:
\ 000126 C2E1 CLR 0xE0 /* A */.1
\ ??pollDMA_9:
\ 000128 F0 MOVX @DPTR,A
336 }
337
338 if ( HAL_DMA_CHECK_IRQ( HAL_DMA_CH_TX ) )
\ ??pollDMA_10:
\ 000129 E5D1 MOV A,0xd1
\ 00012B A2E3 MOV C,0xE0 /* A */.3
\ 00012D 5048 JNC ??pollDMA_13
339 {
340 HAL_DMA_CLEAR_IRQ( HAL_DMA_CH_TX );
\ 00012F 53D1F7 ANL 0xd1,#0xf7
341 cfg->flag &= ~UART_CFG_TXF;
\ 000132 12.... LCALL ?Subroutine5 & 0xFFFF
\ ??CrossCallReturnLabel_15:
\ 000135 C2E0 CLR 0xE0 /* A */.0
\ 000137 F0 MOVX @DPTR,A
342 cfg->txTick = DMA_TX_DLY;
\ 000138 EE MOV A,R6
\ 000139 240E ADD A,#0xe
\ 00013B 12.... LCALL ?Subroutine7 & 0xFFFF
\ ??CrossCallReturnLabel_34:
\ 00013E 7414 MOV A,#0x14
\ 000140 F0 MOVX @DPTR,A
343
344 if ( (cfg->txMax - cfg->txCnt) < cfg->txTail )
\ 000141 EE MOV A,R6
\ 000142 240C ADD A,#0xc
\ 000144 12.... LCALL ??Subroutine5_0 & 0xFFFF
\ ??CrossCallReturnLabel_16:
\ 000147 F8 MOV R0,A
\ 000148 12.... LCALL ?Subroutine2 & 0xFFFF
\ ??CrossCallReturnLabel_2:
\ 00014B E8 MOV A,R0
\ 00014C C3 CLR C
\ 00014D 9A SUBB A,R2
\ 00014E F8 MOV R0,A
\ 00014F E4 CLR A
\ 000150 9400 SUBB A,#0x0
\ 000152 F9 MOV R1,A
\ 000153 EE MOV A,R6
\ 000154 240B ADD A,#0xb
\ 000156 12.... LCALL ??Subroutine2_0 & 0xFFFF
\ ??CrossCallReturnLabel_3:
\ 000159 C3 CLR C
\ 00015A E8 MOV A,R0
\ 00015B 9A SUBB A,R2
\ 00015C E9 MOV A,R1
\ 00015D 9400 SUBB A,#0x0
\ 00015F A2D2 MOV C,0xD0 /* PSW */.2
\ 000161 65D0 XRL A,PSW
\ 000163 33 RLC A
\ 000164 5005 JNC ??pollDMA_14
345 {
346 cfg->txTail = 0; // DMA can only run to the end of the Tx buffer.
\ 000166 E4 CLR A
\ ??pollDMA_15:
\ 000167 F0 MOVX @DPTR,A
\ 000168 02.... LJMP ??pollDMA_16 & 0xFFFF
347 }
348 else
349 {
350 cfg->txTail += cfg->txCnt;
\ ??pollDMA_14:
\ 00016B 12.... LCALL ?Subroutine2 & 0xFFFF
\ ??CrossCallReturnLabel_4:
\ 00016E EE MOV A,R6
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -