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

📄 hal_uart.lst

📁 cc2430应用实例
💻 LST
📖 第 1 页 / 共 5 页
字号:
    785              else
    786              {
    787                cfg->rxTick = 0;
    788              }
    789          
    790          #if HAL_UART_ISR
    791          #if HAL_UART_DMA
    792              if ( cfg->flag & UART_CFG_DMA )
    793              {
    794                pollDMA( cfg );
    795              }
    796              else
    797          #endif
    798                {
    799                pollISR( cfg );
    800                }
    801          #elif HAL_UART_DMA
    802              pollDMA( cfg );
    803          #endif
    804          
    805              /* The following logic makes continuous callbacks on any eligible flag
    806               * until the condition corresponding to the flag is rectified.
    807               * So even if new data is not received, continuous callbacks are made.
    808               */
    809                if ( cfg->rxHead != cfg->rxTail )
    810                {
    811                uint8 evt;
    812          
    813                if ( cfg->rxHead >= (cfg->rxMax - SAFE_RX_MIN) )
    814                {
    815                  evt = HAL_UART_RX_FULL;
    816                }
    817                else if ( cfg->rxHigh && (cfg->rxHead >= cfg->rxHigh) )
    818                {
    819                  evt = HAL_UART_RX_ABOUT_FULL;
    820              }
    821                else if ( cfg->rxTick == 0 )
    822              {
    823                  evt = HAL_UART_RX_TIMEOUT;
    824              }
    825              else
    826              {
    827                  evt = 0;
    828              }
    829          
    830              if ( evt && cfg->rxCB )
    831              {
    832                  cfg->rxCB( ((cfg->flag & UART_CFG_U1F)!=0), evt );
    833              }
    834              }
    835          
    836          #if HAL_UART_0_ENABLE
    837              if ( cfg == cfg0 )
    838              {
    839          #if HAL_UART_1_ENABLE
    840                if ( cfg1 )
    841                {
    842                  cfg = cfg1;
    843                }
    844                else
    845          #endif
    846                  break;
    847              }
    848              else
    849          #endif
    850                break;
    851          
    852            } while ( TRUE );
    853          #else
    854            return;
   \   000000   02....       LJMP    ?BRET
    855          #endif
    856          }
    857          
    858          /**************************************************************************************************
    859           * @fn      Hal_UART_RxBufLen()
    860           *
    861           * @brief   Calculate Rx Buffer length - the number of bytes in the buffer.
    862           *
    863           * @param   port - UART port
    864           *
    865           * @return  length of current Rx Buffer
    866           **************************************************************************************************/

   \                                 In segment BANKED_CODE, align 1, keep-with-next
    867          uint16 Hal_UART_RxBufLen( uint8 port )
   \                     Hal_UART_RxBufLen:
    868          {
   \   000000   C082         PUSH    DPL
   \   000002   C083         PUSH    DPH
   \   000004                ; Saved register size: 2
   \   000004                ; Auto size: 0
    869            uartCfg_t *cfg = NULL;
    870          
    871          #if HAL_UART_0_ENABLE
    872            if ( port == HAL_UART_PORT_0 )
    873            {
    874              cfg = cfg0;
    875            }
    876          #endif
    877          #if HAL_UART_1_ENABLE
    878            if ( port == HAL_UART_PORT_1 )
    879            {
    880              cfg = cfg1;
    881            }
    882          #endif
    883          
    884            HAL_UART_ASSERT( cfg );
    885          
    886            return UART_RX_AVAIL( cfg );
   \   000004   900002       MOV     DPTR,#0x2
   \   000007   E0           MOVX    A,@DPTR
   \   000008   C0E0         PUSH    A
   \   00000A   900003       MOV     DPTR,#0x3
   \   00000D   E0           MOVX    A,@DPTR
   \   00000E   FA           MOV     R2,A
   \   00000F   D0E0         POP     A
   \   000011   C3           CLR     C
   \   000012   9A           SUBB    A,R2
   \   000013   400C         JC      ??Hal_UART_RxBufLen_0
   \   000015   900002       MOV     DPTR,#0x2
   \   000018   E0           MOVX    A,@DPTR
   \   000019   C3           CLR     C
   \   00001A   9A           SUBB    A,R2
   \   00001B   FA           MOV     R2,A
   \   00001C   E4           CLR     A
   \   00001D   9400         SUBB    A,#0x0
   \   00001F   801A         SJMP    ??Hal_UART_RxBufLen_1
   \                     ??Hal_UART_RxBufLen_0:
   \   000021   900004       MOV     DPTR,#0x4
   \   000024   E0           MOVX    A,@DPTR
   \   000025   C3           CLR     C
   \   000026   9A           SUBB    A,R2
   \   000027   F8           MOV     R0,A
   \   000028   E4           CLR     A
   \   000029   9400         SUBB    A,#0x0
   \   00002B   F9           MOV     R1,A
   \   00002C   900002       MOV     DPTR,#0x2
   \   00002F   E0           MOVX    A,@DPTR
   \   000030   28           ADD     A,R0
   \   000031   F8           MOV     R0,A
   \   000032   E4           CLR     A
   \   000033   39           ADDC    A,R1
   \   000034   F9           MOV     R1,A
   \   000035   7401         MOV     A,#0x1
   \   000037   28           ADD     A,R0
   \   000038   FA           MOV     R2,A
   \   000039   E4           CLR     A
   \   00003A   39           ADDC    A,R1
   \                     ??Hal_UART_RxBufLen_1:
   \   00003B   FB           MOV     R3,A
   \   00003C   D083         POP     DPH
   \   00003E   D082         POP     DPL
   \   000040   02....       LJMP    ?BRET
    887          }
    888          
    889          /*****************************************************************************
    890           * @fn      HalUARTRead
    891           *
    892           * @brief   Read a buffer from the UART
    893           *
    894           * @param   port - USART module designation
    895           *          buf  - valid data buffer at least 'len' bytes in size
    896           *          len  - max length number of bytes to copy to 'buf'
    897           *
    898           * @return  length of buffer that was read
    899           *****************************************************************************/

   \                                 In segment BANKED_CODE, align 1, keep-with-next
    900          uint16 HalUARTRead( uint8 port, uint8 *buf, uint16 len )
   \                     HalUARTRead:
    901          {
   \   000000   74F6         MOV     A,#-0xa
   \   000002   12....       LCALL   ?BANKED_ENTER_XDATA
   \   000005                ; Saved register size: 10
   \   000005                ; Auto size: 0
    902            uartCfg_t *cfg = NULL;
    903            uint8 cnt = 0;
   \   000005   7F00         MOV     R7,#0x0
   \   000007   8007         SJMP    ??HalUARTRead_0
    904          
    905          #if HAL_UART_0_ENABLE
    906            if ( port == HAL_UART_PORT_0 )
    907            {
    908              cfg = cfg0;
    909            }
    910          #endif
    911          #if HAL_UART_1_ENABLE
    912            if ( port == HAL_UART_PORT_1 )
    913            {
    914              cfg = cfg1;
    915            }
    916          #endif
    917          
    918            HAL_UART_ASSERT( cfg );
    919          
    920            while ( (cfg->rxTail != cfg->rxHead) && (cnt < len) )
    921            {
    922              *buf++ = cfg->rxBuf[cfg->rxTail];
    923              if ( cfg->rxTail == cfg->rxMax )
    924              {
    925                cfg->rxTail = 0;
    926              }
    927              else
    928              {
    929                cfg->rxTail++;
   \                     ??HalUARTRead_1:
   \   000009   900003       MOV     DPTR,#0x3
   \   00000C   E0           MOVX    A,@DPTR
   \   00000D   04           INC     A
   \                     ??HalUARTRead_2:
   \   00000E   F0           MOVX    @DPTR,A
    930              }
    931              cnt++;
   \   00000F   0F           INC     R7
   \                     ??HalUARTRead_0:
   \   000010   900003       MOV     DPTR,#0x3
   \   000013   E0           MOVX    A,@DPTR
   \   000014   FE           MOV     R6,A
   \   000015   900002       MOV     DPTR,#0x2
   \   000018   E0           MOVX    A,@DPTR
   \   000019   6E           XRL     A,R6
   \   00001A   6032         JZ      ??HalUARTRead_3
   \   00001C   8F..         MOV     ?V0 + 0,R7
   \   00001E   C3           CLR     C
   \   00001F   E5..         MOV     A,?V0 + 0
   \   000021   9C           SUBB    A,R4
   \   000022   E4           CLR     A
   \   000023   9D           SUBB    A,R5
   \   000024   5028         JNC     ??HalUARTRead_3
   \   000026   900003       MOV     DPTR,#0x3
   \   000029   E0           MOVX    A,@DPTR
   \   00002A   F8           MOV     R0,A
   \   00002B   900000       MOV     DPTR,#0x0
   \   00002E   12....       LCALL   ?Subroutine1 & 0xFFFF
   \                     ??CrossCallReturnLabel_2:
   \   000031   E0           MOVX    A,@DPTR
   \   000032   8A82         MOV     DPL,R2
   \   000034   8B83         MOV     DPH,R3
   \   000036   F0           MOVX    @DPTR,A
   \   000037   A3           INC     DPTR
   \   000038   AA82         MOV     R2,DPL
   \   00003A   AB83         MOV     R3,DPH
   \   00003C   900003       MOV     DPTR,#0x3
   \   00003F   E0           MOVX    A,@DPTR
   \   000040   FE           MOV     R6,A
   \   000041   900004       MOV     DPTR,#0x4
   \   000044   E0           MOVX    A,@DPTR
   \   000045   6E           XRL     A,R6
   \   000046   70C1         JNZ     ??HalUARTRead_1
   \   000048   E4           CLR     A
   \   000049   900003       MOV     DPTR,#0x3
   \   00004C   80C0         SJMP    ??HalUARTRead_2
    932            }
    933          
    934          #if HAL_UART_DMA
    935            #if HAL_UART_ISR
    936            if ( cfg->flag & UART_CFG_DMA )
    937            #endif
    938            {
    939              /* If there is no flow control on a DMA-driven UART, the Rx Head & Tail
    940               * pointers must be reset to zero after every read in order to preserve the
    941               * full length of the Rx buffer. This implies that every Read must read all
    942               * of the Rx bytes available, or the pointers will not be reset and the
    943               * next incoming packet may not fit in the Rx buffer space remaining - thus
    944               * the end portion of the incoming packet that does not fit would be lost.
    945               */
    946              if ( !(cfg->flag & UART_CFG_FLW) )
    947              {
    948                // This is a trick to trigger the DMA abort and restart logic in pollDMA.
    949                cfg->flag |= UART_CFG_RXF;
    950              }
    951            }
    952          #endi

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -