📄 commrtos.src
字号:
;
; if (pbuf->RingBufRxCtr < COMM_RX_BUF_SIZE) { /* See if buffer is full */
; SOURCE LINE # 82
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
LCALL ?C?ILDPTR
CLR C
SUBB A,#040H
MOV A,B
SUBB A,#00H
JC $ + 5H
LJMP ?C0009
; pbuf->RingBufRxCtr++; /* No, increment character count */
; SOURCE LINE # 83
CLR A
MOV B,#01H
LCALL ?C?IILDPTR
; *pbuf->RingBufRxInPtr++ = c; /* Put character into buffer */
; SOURCE LINE # 84
MOV DPTR,#03H
LCALL ?C?XBPOFF
MOVX A,@DPTR
MOV R7,A
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV DPTR,#05H
CLR A
MOV B,#01H
LCALL ?C?PLDIOPTR
MOV A,R7
LCALL ?C?CSTPTR
; if (pbuf->RingBufRxInPtr == &pbuf->RingBufRx[COMM_RX_BUF_SIZE]) { /* Wrap IN pointer */
; SOURCE LINE # 85
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV DPTR,#05H
LCALL ?C?PLDOPTR
PUSH AR3
PUSH AR2
PUSH AR1
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
ADD A,#04BH
MOV R1,A
CLR A
ADDC A,R2
MOV R2,A
POP DPL
POP DPH
POP ACC
XRL A,R3
JNZ ?C0019
MOV A,R1
XRL A,DPL
JNZ ?C0019
MOV A,R2
XRL A,DPH
?C0019:
JNZ ?C0008
; pbuf->RingBufRxInPtr = &pbuf->RingBufRx[0];
; SOURCE LINE # 86
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
ADD A,#0BH
MOV R1,A
CLR A
ADDC A,R2
MOV R2,A
PUSH AR3
PUSH AR2
PUSH AR1
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV DPTR,#05H
LCALL ?C?PSTOPTR
; }
; SOURCE LINE # 87
?C0008:
; OSSemPost(pbuf->RingBufRxSem); /* Indicate that character was received */
; SOURCE LINE # 88
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV DPTR,#02H
LCALL ?C?PLDOPTR
LCALL _OSSemPost
; }
; SOURCE LINE # 89
; }
; SOURCE LINE # 90
?C0009:
MOV DPTR,#04H
LJMP ?C?ADDXBP
; END OF _?CommPutRxChar
;
; INT8U CommGetChar (INT16U to, INT8U *err) reentrant
RSEG ?PR?_?CommGetChar?COMMRTOS
_?CommGetChar:
USING 0
; SOURCE LINE # 92
MOV DPTR,#0FFFDH
LCALL ?C?ADDXBP
MOV A,R3
MOVX @DPTR,A
INC DPTR
MOV A,R2
MOVX @DPTR,A
INC DPTR
MOV A,R1
MOVX @DPTR,A
MOV DPTR,#0FFFEH
LCALL ?C?ADDXBP
MOV A,R6
MOVX @DPTR,A
INC DPTR
MOV A,R7
MOVX @DPTR,A
MOV DPTR,#0FFFBH
LCALL ?C?ADDXBP
; {
; INT8U c;
; INT8U oserr;
; COMM_RING_BUF *pbuf;
; pbuf=&CommBuf;
; SOURCE LINE # 97
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
INC DPTR
INC DPTR
MOV A,#01H
MOVX @DPTR,A
INC DPTR
MOV A,#HIGH (CommBuf)
MOVX @DPTR,A
INC DPTR
MOV A,#LOW (CommBuf)
MOVX @DPTR,A
; OSSemPend(pbuf->RingBufRxSem, to, &oserr); /* Wait for character to arrive */
; SOURCE LINE # 98
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
INC DPTR
INC DPTR
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV DPTR,#02H
LCALL ?C?PLDOPTR
PUSH AR3
PUSH AR2
PUSH AR1
MOV DPTR,#05H
LCALL ?C?XBPOFF
MOVX A,@DPTR
MOV R4,A
INC DPTR
MOVX A,@DPTR
MOV R5,A
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
INC DPTR
MOV R1,DPL
MOV R2,DPH
MOV DPTR,#?_OSSemPend?BYTE+05H
MOV A,#01H
MOVX @DPTR,A
INC DPTR
MOV A,R2
MOVX @DPTR,A
INC DPTR
MOV A,R1
MOVX @DPTR,A
POP AR1
POP AR2
POP AR3
LCALL _OSSemPend
; if (oserr == OS_TIMEOUT) { /* See if characters received within timeout*/
; SOURCE LINE # 99
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
INC DPTR
MOVX A,@DPTR
CJNE A,#0AH,?C0010
; *err = COMM_RX_TIMEOUT; /* No, return error code */
; SOURCE LINE # 100
MOV DPTR,#07H
LCALL ?C?XBPOFF
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV A,#05H
LCALL ?C?CSTPTR
; return (NUL);
; SOURCE LINE # 101
MOV R7,#00H
LJMP ?C0011
; } else {
; SOURCE LINE # 102
?C0010:
; OS_ENTER_CRITICAL();
; SOURCE LINE # 103
CLR EA
; pbuf->RingBufRxCtr--; /* Yes, decrement character count */
; SOURCE LINE # 104
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
INC DPTR
INC DPTR
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV A,#0FFH
MOV B,A
LCALL ?C?IILDPTR
; c = *pbuf->RingBufRxOutPtr++; /* Get character from buffer */
; SOURCE LINE # 105
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
INC DPTR
INC DPTR
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV DPTR,#08H
CLR A
MOV B,#01H
LCALL ?C?PLDIOPTR
LCALL ?C?CLDPTR
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
MOVX @DPTR,A
; if (pbuf->RingBufRxOutPtr == &pbuf->RingBufRx[COMM_RX_BUF_SIZE]) { /* Wrap OUT pointer */
; SOURCE LINE # 106
INC DPTR
INC DPTR
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV DPTR,#08H
LCALL ?C?PLDOPTR
PUSH AR3
PUSH AR2
PUSH AR1
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
INC DPTR
INC DPTR
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
ADD A,#04BH
MOV R1,A
CLR A
ADDC A,R2
MOV R2,A
POP DPL
POP DPH
POP ACC
XRL A,R3
JNZ ?C0020
MOV A,R1
XRL A,DPL
JNZ ?C0020
MOV A,R2
XRL A,DPH
?C0020:
JNZ ?C0013
; pbuf->RingBufRxOutPtr = &pbuf->RingBufRx[0];
; SOURCE LINE # 107
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
INC DPTR
INC DPTR
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
ADD A,#0BH
MOV R1,A
CLR A
ADDC A,R2
MOV R2,A
PUSH AR3
PUSH AR2
PUSH AR1
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
INC DPTR
INC DPTR
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV DPTR,#08H
LCALL ?C?PSTOPTR
; }
; SOURCE LINE # 108
?C0013:
; OS_EXIT_CRITICAL();
; SOURCE LINE # 109
SETB EA
; *err = COMM_NO_ERR;
; SOURCE LINE # 110
MOV DPTR,#07H
LCALL ?C?XBPOFF
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
CLR A
LCALL ?C?CSTPTR
; return (c);
; SOURCE LINE # 111
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
MOVX A,@DPTR
MOV R7,A
; }
; SOURCE LINE # 112
; }
; SOURCE LINE # 113
?C0011:
MOV DPTR,#0AH
LJMP ?C?ADDXBP
; END OF _?CommGetChar
;
; INT8U CommGetTxChar (INT8U *err) reentrant
RSEG ?PR?_?CommGetTxChar?COMMRTOS
_?CommGetTxChar:
USING 0
; SOURCE LINE # 115
MOV DPTR,#0FFFDH
LCALL ?C?ADDXBP
MOV A,R3
MOVX @DPTR,A
INC DPTR
MOV A,R2
MOVX @DPTR,A
INC DPTR
MOV A,R1
MOVX @DPTR,A
MOV DPTR,#0FFFCH
LCALL ?C?ADDXBP
; {
; INT8U c;
; COMM_RING_BUF *pbuf;
; pbuf=&CommBuf;
; SOURCE LINE # 119
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
INC DPTR
MOV A,#01H
MOVX @DPTR,A
INC DPTR
MOV A,#HIGH (CommBuf)
MOVX @DPTR,A
INC DPTR
MOV A,#LOW (CommBuf)
MOVX @DPTR,A
;
; if (pbuf->RingBufTxCtr > 0) { /* See if buffer is empty */
; SOURCE LINE # 121
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
INC DPTR
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV DPTR,#04BH
LCALL ?C?ILDOPTR
SETB C
SUBB A,#00H
MOV A,B
SUBB A,#00H
JNC $ + 5H
LJMP ?C0014
; pbuf->RingBufTxCtr--; /* No, decrement character count */
; SOURCE LINE # 122
MOV DPTR,#04BH
MOV A,#0FFH
MOV B,A
LCALL ?C?IILDOPTR
; c = *pbuf->RingBufTxOutPtr++; /* Get character from buffer */
; SOURCE LINE # 123
MOV DPTR,#053H
CLR A
MOV B,#01H
LCALL ?C?PLDIOPTR
LCALL ?C?CLDPTR
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
MOVX @DPTR,A
; if (pbuf->RingBufTxOutPtr == &pbuf->RingBufTx[COMM_TX_BUF_SIZE]) { /* Wrap OUT pointer */
; SOURCE LINE # 124
INC DPTR
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV DPTR,#053H
LCALL ?C?PLDOPTR
PUSH AR3
PUSH AR2
PUSH AR1
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
INC DPTR
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
ADD A,#096H
MOV R1,A
CLR A
ADDC A,R2
MOV R2,A
POP DPL
POP DPH
POP ACC
XRL A,R3
JNZ ?C0021
MOV A,R1
XRL A,DPL
JNZ ?C0021
MOV A,R2
XRL A,DPH
?C0021:
JNZ ?C0015
; pbuf->RingBufTxOutPtr = &pbuf->RingBufTx[0];
; SOURCE LINE # 125
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
INC DPTR
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
ADD A,#056H
MOV R1,A
CLR A
ADDC A,R2
MOV R2,A
PUSH AR3
PUSH AR2
PUSH AR1
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
INC DPTR
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV DPTR,#053H
LCALL ?C?PSTOPTR
; }
; SOURCE LINE # 126
?C0015:
; OSSemPost(pbuf->RingBufTxSem); /* Indicate that character will be sent */
; SOURCE LINE # 127
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
INC DPTR
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV DPTR,#04DH
LCALL ?C?PLDOPTR
LCALL _OSSemPost
; *err = COMM_NO_ERR;
; SOURCE LINE # 128
MOV DPTR,#04H
LCALL ?C?XBPOFF
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
CLR A
LCALL ?C?CSTPTR
; return (c); /* Characters are still available */
; SOURCE LINE # 129
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
MOVX A,@DPTR
MOV R7,A
SJMP ?C0016
; } else {
; SOURCE LINE # 130
?C0014:
; *err = COMM_TX_EMPTY;
; SOURCE LINE # 131
MOV DPTR,#04H
LCALL ?C?XBPOFF
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV A,#04H
LCALL ?C?CSTPTR
; return (NUL); /* Buffer is empty */
; SOURCE LINE # 132
MOV R7,#00H
; }
; SOURCE LINE # 133
; }
; SOURCE LINE # 134
?C0016:
MOV DPTR,#07H
LJMP ?C?ADDXBP
; END OF _?CommGetTxChar
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -