📄 hal_uart.lst
字号:
353 else if ( !(cfg->flag & UART_CFG_TXF) && !cfg->txTick )
354 {
355 if ( cfg->txTail != cfg->txHead )
356 {
357 if ( cfg->txTail < cfg->txHead )
358 {
359 cfg->txCnt = cfg->txHead - cfg->txTail;
360 }
361 else // Can only run DMA engine up to max, then restart at zero.
362 {
363 cfg->txCnt = cfg->txMax - cfg->txTail + 1;
364 }
365
366 cfg->flag |= UART_CFG_TXF;
367 DMA_TX( cfg );
368 }
369 }
370 }
371 #endif
372
373 #if HAL_UART_ISR
374 /******************************************************************************
375 * @fn pollISR
376 *
377 * @brief Poll a USART module implemented by ISR.
378 *
379 * @param cfg - USART configuration structure.
380 *
381 * @return none
382 *****************************************************************************/
\ In segment BANKED_CODE, align 1, keep-with-next
383 static void pollISR( uartCfg_t *cfg )
\ ??pollISR:
384 {
\ 000000 74F7 MOV A,#-0x9
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 9
\ 000005 ; Auto size: 0
385 uint8 cnt = UART_RX_AVAIL( cfg );
\ 000005 8A82 MOV DPL,R2
\ 000007 8B83 MOV DPH,R3
\ 000009 A3 INC DPTR
\ 00000A A3 INC DPTR
\ 00000B E0 MOVX A,@DPTR
\ 00000C C0E0 PUSH A
\ 00000E 8A82 MOV DPL,R2
\ 000010 8B83 MOV DPH,R3
\ 000012 A3 INC DPTR
\ 000013 A3 INC DPTR
\ 000014 A3 INC DPTR
\ 000015 E0 MOVX A,@DPTR
\ 000016 FC MOV R4,A
\ 000017 D0E0 POP A
\ 000019 C3 CLR C
\ 00001A 9C SUBB A,R4
\ 00001B 8A82 MOV DPL,R2
\ 00001D 8B83 MOV DPH,R3
\ 00001F A3 INC DPTR
\ 000020 A3 INC DPTR
\ 000021 4005 JC ??pollISR_1
\ 000023 E0 MOVX A,@DPTR
\ 000024 C3 CLR C
\ 000025 9C SUBB A,R4
\ 000026 8017 SJMP ??pollISR_2
\ ??pollISR_1:
\ 000028 C082 PUSH DPL
\ 00002A C083 PUSH DPH
\ 00002C 8A82 MOV DPL,R2
\ 00002E 8B83 MOV DPH,R3
\ 000030 A3 INC DPTR
\ 000031 A3 INC DPTR
\ 000032 A3 INC DPTR
\ 000033 A3 INC DPTR
\ 000034 E0 MOVX A,@DPTR
\ 000035 C3 CLR C
\ 000036 9C SUBB A,R4
\ 000037 D083 POP DPH
\ 000039 D082 POP DPL
\ 00003B FC MOV R4,A
\ 00003C E0 MOVX A,@DPTR
\ 00003D 2C ADD A,R4
\ 00003E 04 INC A
\ ??pollISR_2:
\ 00003F FC MOV R4,A
386
387 if ( !(cfg->flag & UART_CFG_RXF) )
\ 000040 12.... LCALL ?Subroutine6 & 0xFFFF
\ ??CrossCallReturnLabel_14:
\ 000043 A2E1 MOV C,0xE0 /* A */.1
\ 000045 4061 JC ??pollISR_3
388 {
389 // If anything received, reset the Rx idle timer.
390 if ( cfg->rxCnt != cnt )
\ 000047 8A82 MOV DPL,R2
\ 000049 8B83 MOV DPH,R3
\ 00004B A3 INC DPTR
\ 00004C A3 INC DPTR
\ 00004D A3 INC DPTR
\ 00004E A3 INC DPTR
\ 00004F A3 INC DPTR
\ 000050 E0 MOVX A,@DPTR
\ 000051 6C XRL A,R4
\ 000052 6018 JZ ??pollISR_4
391 {
392 cfg->rxTick = HAL_UART_RX_IDLE;
\ 000054 74C6 MOV A,#-0x3a
\ 000056 8A82 MOV DPL,R2
\ 000058 8B83 MOV DPH,R3
\ 00005A A3 INC DPTR
\ 00005B A3 INC DPTR
\ 00005C A3 INC DPTR
\ 00005D A3 INC DPTR
\ 00005E A3 INC DPTR
\ 00005F A3 INC DPTR
\ 000060 F0 MOVX @DPTR,A
393 cfg->rxCnt = cnt;
\ 000061 EC MOV A,R4
\ 000062 8A82 MOV DPL,R2
\ 000064 8B83 MOV DPH,R3
\ 000066 A3 INC DPTR
\ 000067 A3 INC DPTR
\ 000068 A3 INC DPTR
\ 000069 A3 INC DPTR
\ 00006A A3 INC DPTR
\ 00006B F0 MOVX @DPTR,A
394 }
395
396 /* It is necessary to stop Rx flow in advance of a full Rx buffer because
397 * bytes can keep coming while sending H/W fifo flushes.
398 */
399 if ( cfg->rxCnt >= (cfg->rxMax - SAFE_RX_MIN) )
\ ??pollISR_4:
\ 00006C 8A82 MOV DPL,R2
\ 00006E 8B83 MOV DPH,R3
\ 000070 A3 INC DPTR
\ 000071 A3 INC DPTR
\ 000072 A3 INC DPTR
\ 000073 A3 INC DPTR
\ 000074 A3 INC DPTR
\ 000075 E0 MOVX A,@DPTR
\ 000076 FC MOV R4,A
\ 000077 8A82 MOV DPL,R2
\ 000079 8B83 MOV DPH,R3
\ 00007B 12.... LCALL ?Subroutine1 & 0xFFFF
\ ??CrossCallReturnLabel_2:
\ 00007E EC MOV A,R4
\ 00007F 12.... LCALL ?Subroutine12 & 0xFFFF
\ ??CrossCallReturnLabel_35:
\ 000082 4024 JC ??pollISR_3
400 {
401 RX_STOP_FLOW( cfg );
\ 000084 12.... LCALL ?Subroutine6 & 0xFFFF
\ ??CrossCallReturnLabel_15:
\ 000087 A2E7 MOV C,0xE0 /* A */.7
\ 000089 4004 JC ??pollISR_5
\ 00008B D285 SETB 0x80.5
\ 00008D 8002 SJMP ??pollISR_6
\ ??pollISR_5:
\ 00008F D295 SETB 0x90.5
\ ??pollISR_6:
\ 000091 A2E6 MOV C,0xE0 /* A */.6
\ 000093 500D JNC ??pollISR_7
\ 000095 748C MOV A,#-0x74
\ 000097 8A82 MOV DPL,R2
\ 000099 8B83 MOV DPH,R3
\ 00009B A3 INC DPTR
\ 00009C A3 INC DPTR
\ 00009D A3 INC DPTR
\ 00009E A3 INC DPTR
\ 00009F A3 INC DPTR
\ 0000A0 A3 INC DPTR
\ 0000A1 F0 MOVX @DPTR,A
\ ??pollISR_7:
\ 0000A2 12.... LCALL ?Subroutine6 & 0xFFFF
\ ??CrossCallReturnLabel_16:
\ 0000A5 D2E1 SETB 0xE0 /* A */.1
\ 0000A7 F0 MOVX @DPTR,A
402 }
403 }
404 }
\ ??pollISR_3:
\ 0000A8 7F01 MOV R7,#0x1
\ 0000AA 02.... LJMP ?BANKED_LEAVE_XDATA
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine6:
\ 000000 EA MOV A,R2
\ 000001 240F ADD A,#0xf
\ 000003 F582 MOV DPL,A
\ 000005 EB MOV A,R3
\ 000006 12.... LCALL ?Subroutine15 & 0xFFFF
\ ??CrossCallReturnLabel_43:
\ 000009 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine12:
\ 000000 98 SUBB A,R0
\ 000001 E4 CLR A
\ 000002 99 SUBB A,R1
\ 000003 A2D2 MOV C,0xD0 /* PSW */.2
\ 000005 65D0 XRL A,PSW
\ 000007 33 RLC A
\ 000008 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine1:
\ 000000 A3 INC DPTR
\ 000001 A3 INC DPTR
\ 000002 A3 INC DPTR
\ 000003 A3 INC DPTR
\ 000004 E0 MOVX A,@DPTR
\ 000005 F8 MOV R0,A
\ 000006 74D0 MOV A,#-0x30
\ 000008 28 ADD A,R0
\ 000009 F8 MOV R0,A
\ 00000A 74FF MOV A,#-0x1
\ 00000C 3400 ADDC A,#0x0
\ 00000E F9 MOV R1,A
\ 00000F C3 CLR C
\ 000010 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine15:
\ 000000 12.... LCALL ??Subroutine16_0 & 0xFFFF
\ ??CrossCallReturnLabel_51:
\ 000003 E0 MOVX A,@DPTR
\ 000004 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine16:
\ 000000 F582 MOV DPL,A
\ 000002 EF MOV A,R7
\ ??Subroutine16_0:
\ 000003 3400 ADDC A,#0x0
\ 000005 F583 MOV DPH,A
\ 000007 22 RET
405 #endif
406
407 /******************************************************************************
408 * @fn HalUARTInit
409 *
410 * @brief Initialize the UART
411 *
412 * @param none
413 *
414 * @return none
415 *****************************************************************************/
\ In segment BANKED_CODE, align 1, keep-with-next
416 void HalUARTInit( void )
\ HalUARTInit:
417 {
\ 000000 ; Saved register size: 0
\ 000000 ; Auto size: 0
418 #if HAL_UART_DMA
419 halDMADesc_t *ch;
420 #endif
421
422 // Set P2 priority - USART0 over USART1 if both are defined.
423 P2DIR &= ~P2DIR_PRIPO;
\ 000000 53FF3F ANL 0xff,#0x3f
\ 000003 E5FF MOV A,0xff
424 P2DIR |= HAL_UART_PRIPO;
\ 000005 43FF40 ORL 0xff,#0x40
425
426 #if HAL_UART_0_ENABLE
427 // Set UART0 I/O location to P0.
428 PERCFG &= ~HAL_UART_0_PERCFG_BIT;
429
430 /* Enable Tx and Rx on P0 */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -