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

📄 hal_uart.s51

📁 用IAR开发的ZIGBEE网络路由例子
💻 S51
📖 第 1 页 / 共 5 页
字号:
        ADD	A,#0x1b
        LCALL	?Subroutine8 & 0xFFFF
??CrossCallReturnLabel_22:
        MOV	R1,A
        INC	DPTR
        MOVX	A,@DPTR
        MOV	R2,A
        INC	DPTR
        MOVX	A,@DPTR
        MOV	R3,A
        MOV	A,R6
        ADD	A,#0x10
        LCALL	?Subroutine16 & 0xFFFF
??CrossCallReturnLabel_47:
        MOV	A,R1
        MOVX	@DPTR,A
        INC	DPTR
        MOV	A,R2
        MOVX	@DPTR,A
        INC	DPTR
        MOV	A,R3
        MOVX	@DPTR,A
//  591 
//  592 #if HAL_UART_0_ENABLE
//  593   if ( port == HAL_UART_PORT_0 )
//  594   {
//  595     // Only supporting 38400 or 115200 for code size - other is possible.
//  596     U0BAUD = (config->baudRate == HAL_UART_BR_38400) ? 59 : 216;
//  597     U0GCR = (config->baudRate == HAL_UART_BR_38400) ? 10 : 11;
//  598 
//  599     U0CSR |= CSR_RE;
//  600 
//  601 #if HAL_UART_DMA == 1
//  602     cfg->flag = UART_CFG_DMA;
//  603     HAL_UART_ASSERT( (config->rx.maxBufSize <= 128) );
//  604     HAL_UART_ASSERT( (config->rx.maxBufSize > SAFE_RX_MIN) );
//  605     cfg->rxBuf = osal_mem_alloc( cfg->rxMax*2 );
//  606     osal_memset( cfg->rxBuf, ~DMA_PAD, cfg->rxMax*2 );
//  607     DMA_RX( cfg );
//  608 #else
//  609     cfg->flag = 0;
//  610     HAL_UART_ASSERT( (config->rx.maxBufSize < 256) );
//  611     cfg->rxBuf = osal_mem_alloc( cfg->rxMax+1 );
//  612     URX0IE = 1;
//  613     IEN2 |= UTX0IE;
//  614 #endif
//  615 
//  616     // 8 bits/char; no parity; 1 stop bit; stop bit hi.
//  617     if ( config->flowControl )
//  618     {
//  619       cfg->flag |= UART_CFG_FLW;
//  620       U0UCR = UCR_FLOW | UCR_STOP;
//  621       // Must rely on H/W for RTS (i.e. Tx stops when receiver negates CTS.)
//  622       P0SEL |= HAL_UART_0_P0_RTS;
//  623       // Cannot use H/W for CTS as DMA does not clear the Rx bytes properly.
//  624       P0DIR |= HAL_UART_0_P0_CTS;
//  625       RX0_FLOW_ON;
//  626     }
//  627     else
//  628     {
//  629       U0UCR = UCR_STOP;
//  630     }
//  631     }
//  632 #endif
//  633 
//  634 #if HAL_UART_1_ENABLE
//  635   if ( port == HAL_UART_PORT_1 )
        MOV	A,#0x1
        XRL	A,?V0 + 2
        JNZ	??HalUARTOpen_1
//  636   {
//  637     // Only supporting 38400 or 115200 for code size - other is possible.
//  638     U1BAUD = (config->baudRate == HAL_UART_BR_38400) ? 59 : 216;
        MOV	DPL,?V0 + 0
        MOV	DPH,?V0 + 1
        INC	DPTR
        MOVX	A,@DPTR
        XRL	A,#0x6
        JNZ	??HalUARTOpen_2
        MOV	R2,#0x3b
        SJMP	??HalUARTOpen_3
??HalUARTOpen_2:
        MOV	R2,#-0x28
??HalUARTOpen_3:
        MOV	0xfa,R2
//  639     U1GCR = (config->baudRate == HAL_UART_BR_38400) ? 10 : 11;
        MOV	DPL,?V0 + 0
        MOV	DPH,?V0 + 1
        INC	DPTR
        MOVX	A,@DPTR
        XRL	A,#0x6
        JNZ	??HalUARTOpen_4
        MOV	R2,#0xa
        SJMP	??HalUARTOpen_5
??HalUARTOpen_4:
        MOV	R2,#0xb
??HalUARTOpen_5:
        MOV	0xfc,R2
//  640 
//  641     U1CSR |= CSR_RE;
        SETB	0xf8.6
//  642 
//  643 #if HAL_UART_DMA == 2
//  644     cfg->flag = (UART_CFG_U1F | UART_CFG_DMA);
//  645     HAL_UART_ASSERT( (config->rx.maxBufSize <= 128) );
//  646     HAL_UART_ASSERT( (config->rx.maxBufSize > SAFE_RX_MIN) );
//  647     cfg->rxBuf = osal_mem_alloc( cfg->rxMax*2 );
//  648     osal_memset( cfg->rxBuf, ~DMA_PAD, cfg->rxMax*2 );
//  649     DMA_RX( cfg );
//  650 #else
//  651     cfg->flag = UART_CFG_U1F;
        MOV	A,R6
        ADD	A,#0xf
        LCALL	?Subroutine16 & 0xFFFF
??CrossCallReturnLabel_48:
        MOV	A,#-0x80
        LCALL	?Subroutine10 & 0xFFFF
//  652     HAL_UART_ASSERT( (config->rx.maxBufSize < 256) );
//  653     cfg->rxBuf = osal_mem_alloc( cfg->rxMax+1 );
??CrossCallReturnLabel_31:
        MOVX	A,@DPTR
        LCALL	?Subroutine11 & 0xFFFF
??CrossCallReturnLabel_34:
        LCALL	?BCALL               ; Banked call to: DPTR()
        MOV	DPL,R6
        MOV	DPH,R7
        MOV	A,R2
        MOVX	@DPTR,A
        INC	DPTR
        MOV	A,R3
        MOVX	@DPTR,A
//  654     URX1IE = 1;
        SETB	0xa8.3
//  655     IEN2 |= UTX1IE;
        ORL	0x9a,#0x8
//  656 #endif
//  657 
//  658     // 8 bits/char; no parity; 1 stop bit; stop bit hi.
//  659     if ( config->flowControl )
        MOV	DPL,?V0 + 0
        MOV	DPH,?V0 + 1
        INC	DPTR
        INC	DPTR
        MOVX	A,@DPTR
        JZ	??HalUARTOpen_6
//  660     {
//  661       cfg->flag |= UART_CFG_FLW;
        MOV	A,R6
        ADD	A,#0xf
        MOV	DPL,A
        MOV	A,R7
        LCALL	??Subroutine8_0 & 0xFFFF
??CrossCallReturnLabel_23:
        SETB	0xE0 /* A   */.5
        MOVX	@DPTR,A
//  662       U1UCR = UCR_FLOW | UCR_STOP;
        MOV	0xfb,#0x42
//  663       // Must rely on H/W for RTS (i.e. Tx stops when receiver negates CTS.)
//  664       P1SEL |= HAL_UART_1_P1_RTS;
        ORL	0xf4,#0x10
//  665       // Cannot use H/W for CTS as DMA does not clear the Rx bytes properly.
//  666       P1DIR |= HAL_UART_1_P1_CTS;
        ORL	0xfe,#0x20
//  667       RX1_FLOW_ON;
        CLR	0x90.5
        SJMP	??HalUARTOpen_1
//  668     }
//  669     else
//  670     {
//  671       U1UCR = UCR_STOP;
??HalUARTOpen_6:
        MOV	0xfb,#0x2
//  672     }
//  673   }
//  674 #endif
//  675 
//  676   return HAL_UART_SUCCESS;
??HalUARTOpen_1:
        MOV	R1,#0x0
        MOV	R7,#0x6
        LJMP	?BANKED_LEAVE_XDATA
        CFI EndBlock cfiBlock6
//  677 }

        RSEG BANKED_CODE:CODE:NOROOT(0)
?Subroutine11:
        CFI Block cfiCond7 Using cfiCommon0
        CFI NoFunction
        CFI Conditional ??CrossCallReturnLabel_34
        CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-14)))
        CFI VB load(1, XDATA, add(CFA_XSP16, literal(-13)))
        CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-12)))
        CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-11)))
        CFI V2 load(1, XDATA, add(CFA_XSP16, literal(-10)))
        CFI V3 load(1, XDATA, add(CFA_XSP16, literal(-9)))
        CFI V4 load(1, XDATA, add(CFA_XSP16, literal(-8)))
        CFI V5 load(1, XDATA, add(CFA_XSP16, literal(-7)))
        CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
        CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-5)))
        CFI ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-4)))
        CFI ?BRET_EXT load(1, XDATA, add(CFA_XSP16, literal(-3)))
        CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
        CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
        CFI CFA_SP SP+0
        CFI CFA_XSP16 add(XSP16, 14)
        CFI Block cfiCond8 Using cfiCommon0
        CFI (cfiCond8) NoFunction
        CFI (cfiCond8) Conditional ??CrossCallReturnLabel_33
        CFI (cfiCond8) R6 load(1, XDATA, add(CFA_XSP16, literal(-14)))
        CFI (cfiCond8) VB load(1, XDATA, add(CFA_XSP16, literal(-13)))
        CFI (cfiCond8) V0 load(1, XDATA, add(CFA_XSP16, literal(-12)))
        CFI (cfiCond8) V1 load(1, XDATA, add(CFA_XSP16, literal(-11)))
        CFI (cfiCond8) V2 load(1, XDATA, add(CFA_XSP16, literal(-10)))
        CFI (cfiCond8) V3 load(1, XDATA, add(CFA_XSP16, literal(-9)))
        CFI (cfiCond8) V4 load(1, XDATA, add(CFA_XSP16, literal(-8)))
        CFI (cfiCond8) V5 load(1, XDATA, add(CFA_XSP16, literal(-7)))
        CFI (cfiCond8) R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
        CFI (cfiCond8) ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-5)))
        CFI (cfiCond8) ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-4)))
        CFI (cfiCond8) ?BRET_EXT load(1, XDATA, add(CFA_XSP16, literal(-3)))
        CFI (cfiCond8) DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
        CFI (cfiCond8) DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
        CFI (cfiCond8) CFA_SP SP+0
        CFI (cfiCond8) CFA_XSP16 add(XSP16, 14)
        CFI Block cfiPicker9 Using cfiCommon1
        CFI (cfiPicker9) NoFunction
        CFI (cfiPicker9) Picker
        MOV	R0,A
        MOV	A,#0x1
        ADD	A,R0
        MOV	R2,A
        CLR	A
        ADDC	A,#0x0
        MOV	R3,A
        MOV	DPTR,#(osal_mem_alloc & 0xffff)
        MOV	A,#((osal_mem_alloc >> 16) & 0xff)
        RET
        CFI EndBlock cfiCond7
        CFI EndBlock cfiCond8
        CFI EndBlock cfiPicker9

        RSEG BANKED_CODE:CODE:NOROOT(0)
?Subroutine10:
        CFI Block cfiCond10 Using cfiCommon0
        CFI NoFunction
        CFI Conditional ??CrossCallReturnLabel_32
        CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-14)))
        CFI VB load(1, XDATA, add(CFA_XSP16, literal(-13)))
        CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-12)))
        CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-11)))
        CFI V2 load(1, XDATA, add(CFA_XSP16, literal(-10)))
        CFI V3 load(1, XDATA, add(CFA_XSP16, literal(-9)))
        CFI V4 load(1, XDATA, add(CFA_XSP16, literal(-8)))
        CFI V5 load(1, XDATA, add(CFA_XSP16, literal(-7)))
        CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
        CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-5)))
        CFI ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-4)))
        CFI ?BRET_EXT load(1, XDATA, add(CFA_XSP16, literal(-3)))
        CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
        CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
        CFI CFA_SP SP+0
        CFI CFA_XSP16 add(XSP16, 14)
        CFI Block cfiCond11 Using cfiCommon0
        CFI (cfiCond11) NoFunction
        CFI (cfiCond11) Conditional ??CrossCallReturnLabel_31
        CFI (cfiCond11) R6 load(1, XDATA, add(CFA_XSP16, literal(-14)))
        CFI (cfiCond11) VB load(1, XDATA, add(CFA_XSP16, literal(-13)))
        CFI (cfiCond11) V0 load(1, XDATA, add(CFA_XSP16, literal(-12)))
        CFI (cfiCond11) V1 load(1, XDATA, add(CFA_XSP16, literal(-11)))
        CFI (cfiCond11) V2 load(1, XDATA, add(CFA_XSP16, literal(-10)))
        CFI (cfiCond11) V3 load(1, XDATA, add(CFA_XSP16, literal(-9)))
        CFI (cfiCond11) V4 load(1, XDATA, add(CFA_XSP16, literal(-8)))
        CFI (cfiCond11) V5 load(1, XDATA, add(CFA_XSP16, literal(-7)))
        CFI (cfiCond11) R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
        CFI (cfiCond11) ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-5)))
        CFI (cfiCond11) ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-4)))
        CFI (cfiCond11) ?BRET_EXT load(1, XDATA, add(CFA_XSP16, literal(-3)))
        CFI (cfiCond11) DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
        CFI (cfiCond11) DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
        CFI (cfiCond11) CFA_SP SP+0
        CFI (cfiCond11) CFA_XSP16 add(XSP16, 14)
        CFI Block cfiPicker12 Using cfiCommon1
        CFI (cfiPicker12) NoFunction
        CFI (cfiPicker12) Picker
        LCALL	?Subroutine14 & 0xFFFF
??CrossCallReturnLabel_39:
        INC	DPTR
        INC	DPTR
        INC	DPTR
        RET
        CFI EndBlock cfiCond10
        CFI EndBlock cfiCond11
        CFI EndBlock cfiPicker12

        RSEG BANKED_CODE:CODE:NOROOT(0)
?Subroutine14:
        CFI Block cfiCond13 Using cfiCommon0
        CFI NoFunction
        CFI Conditional ??CrossCallReturnLabel_39, ??CrossCallReturnLabel_32
        CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-14)))
        CFI VB load(1, XDATA, add(CFA_XSP16, literal(-13)))
        CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-12)))
        CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-11)))
        CFI V2 load(1, XDATA, add(CFA_XSP16, literal(-10)))
        CFI V3 load(1, XDATA, add(CFA_XSP16, literal(-9)))
        CFI V4 load(1, XDATA, add(CFA_XSP16, literal(-8)))
        CFI V5 load(1, XDATA, add(CFA_XSP16, literal(-7)))
        CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
        CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-5)))
        CFI ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-4)))
        CFI ?BRET_EXT load(1, XDATA, add(CFA_XSP16, literal(-3)))
        CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
        CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
        CFI CFA_SP SP+0
        CFI CFA_XSP16 add(XSP16, 14)
        CFI Block cfiCond14 Using cfiCommon0
        CFI (cfiCond14) NoFunction
        CFI (cfiCond14) Conditional ??CrossCallReturnLabel_40
        CFI (cfiCond14) R6 load(1, XDATA, add(CFA_XSP16, literal(-14)))
        CFI (cfiCond14) VB load(1, XDATA, add(CFA_XSP16, literal(-13)))
        CFI (cfiCond14) V0 load(1, XDATA, add(CFA_XSP16, literal(-12)))
        CFI (cfiCond14) V1 load(1, XDATA, add(CFA_XSP16, literal(-11)))
        CFI (cfiCond14) V2 load(1, XDATA, add(CFA_XSP16, literal(-10)))
        CFI (cfiCond14) V3 load(1, XDATA, add(CFA_XSP16, literal(-9)))
        CFI (cfiCond14) V4 load(1, XDATA, add(CFA_XSP16, literal(-8)))
        CFI (cfiCond14) V5 load(1, XDATA, add(CFA_XSP16, literal(-7)))
        CFI (cfiCond14) R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
        CFI (cfiCond14) ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-5)))
        CFI (cfiCond14) ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-4)))
        CFI (cfiCond14) ?BRET_EXT load(1, XDATA, add(CFA_XSP16, literal(-3)))
        CFI (cfiCond14) DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
        CFI (cfiCond14) DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
        CFI (cfiCond14) CFA_SP SP+0
        CFI (cfiCond14) CFA_XSP16 add(XSP16, 14)
        CFI Block cfiCond15 Using cfiCommon0
        CFI (cfiCond15) NoFunction
        CFI (cfiCond15) Conditional ??CrossCallReturnLabel_41
        CFI (cfiCond15) R6 load(1, XDATA, add(CFA_XSP16, literal(-12)))
        CFI (cfiCond15) VB load(1, XDATA, add(CFA_XSP16, literal(-11)))
        CFI (cfiCond15) V0 load(1, XDATA, add(CFA_XSP16, literal(-10)))
        CFI (cfiCond15) V1 load(1, XDATA, add(CFA_XSP16, literal(-9)))
        CFI (cfiCond15) V2 load(1, XDATA, add(CFA_XSP16, literal(-8)))
        CFI (cfiCond15) V3 load(1, XDATA, add(CFA_XSP16, literal(-7)))
        CFI (cfi

⌨️ 快捷键说明

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