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

📄 hal_uart.lst

📁 用IAR开发的ZIGBEE网络路由例子
💻 LST
📖 第 1 页 / 共 5 页
字号:
    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 + -