📄 utils.a51
字号:
#define PUTCHAR _putchar
ENTRY MACRO symbol
PUBLIC symbol
symbol:
ENDM
NAME UTILS
?PR?utils?UTILS SEGMENT CODE PAGE
EXTRN CODE ( ?C?ISTPTR )
EXTRN CODE ( ?C?PSTPTR )
EXTRN CODE ( ?C?LSTPTR )
EXTRN CODE ( ?C?CLDPTR )
EXTRN CODE ( ?C?ILDPTR )
EXTRN CODE ( ?C?PLDPTR )
EXTRN CODE ( ?C?LLDPTR )
EXTRN CODE ( PUTCHAR )
USING 0
RSEG ?PR?utils?UTILS
;
; U32 MDrv_ByteSwapU32( U32 u32Val );
;
ENTRY _MDrv_ByteSwapU32
XCH A, R4
XCH A, R7
XCH A, R4
XCH A, R5
XCH A, R6
XCH A, R5
RET
;
; void MDrv_WriteU16LE( U16 *pLoc, U16 u16Val );
;
ENTRY _MDrv_WriteU16LE
MOV B, R4
MOV A, R5
LJMP ?C?ISTPTR
;
; void MDrv_WriteU24LE( U32 *pLoc, U32 u32Val );
;
ENTRY _MDrv_WriteU24LE
MOV A, R7
PUSH ACC
MOV A, R6
PUSH ACC
MOV A, R5
PUSH ACC
LCALL ?C?PSTPTR
RET
;
; void MDrv_WriteU32LE( U32 *pLoc, U32 u32Val );
;
ENTRY _MDrv_WriteU32LE
ACALL _MDrv_ByteSwapU32
LJMP ?C?LSTPTR
;
; U16 MDrv_ReadU16LE( U16 *pLoc );
;
ENTRY _MDrv_ReadU16LE
LCALL ?C?ILDPTR
MOV R6, B
MOV R7, A
RET
;
; U32 MDrv_ReadU24LE( U16 *pLoc );
;
ENTRY _MDrv_ReadU24LE
LCALL ?C?PLDPTR
CLR A
MOV R4, A
MOV A, R1
MOV R5, A
MOV A, R2
MOV R6, A
MOV A, R3
MOV R7, A
RET
;
; U32 MDrv_ReadU32LE( U16 *pLoc );
;
ENTRY _MDrv_ReadU32LE
LCALL ?C?LLDPTR
SJMP _MDrv_ByteSwapU32
;
; void MDrv_Write2Byte( U16 u16Reg, U16 u16Val );
;
ENTRY _MDrv_Write2Byte
MOV DPH, R6
MOV DPL, R7
MOV A, R5
MOVX @DPTR, A
INC DPTR
MOV A, R4
MOVX @DPTR, A
RET
;
; U16 MDrv_Read2Byte( U16 u16Reg );
;
ENTRY _MDrv_Read2Byte
MOV DPH, R6
MOV DPL, R7
MOVX A, @DPTR
MOV R7, A
INC DPTR
MOVX A, @DPTR
MOV R6, A
RET
;
; void MDrv_WriteRegBit( U16 u16Reg, U8 bBit, U8 u8BitMask );
;
ENTRY _MDrv_WriteRegBit
MOV DPH, R6
MOV DPL, R7
MOVX A, @DPTR
ORL A, R3
CJNE R5, #00H, L?Enable
XRL A, R3
L?Enable:
MOVX @DPTR, A
RET
;
; void MDrv_WriteRegTbl( MS_REG_INIT * pRegTable );
;
ENTRY _MDrv_WriteRegTbl
MOV R4, #HIGH( 1024 ) ; max allowed entries
MOV R5, #LOW( 1024 )
REGVAL_LOOP:
LCALL ?C?ILDPTR
MOV DPL, A
CJNE A, #0FFH, REGVAL_NOT_STOP
MOV A, B
CPL A
JZ REGVAL_EXIT
REGVAL_NOT_STOP:
;
; pRegTable++
;
MOV A, R1
ADD A, #02H
MOV R1, A
JNC REGVAL_TBL_NOT_CARRY
INC R2
REGVAL_TBL_NOT_CARRY:
MOV A, B
MOV DPH, A
ANL DPH, #3FH
;
; put value length to R0
;
SWAP A
RR A
RR A
ANL A, #03H
INC A
MOV R0, A
REGVAL_SET_BYTE:
PUSH DPH
PUSH DPL
LCALL ?C?CLDPTR
POP DPL
POP DPH
MOVX @DPTR, A
INC DPTR
INC R1
CJNE R1, #00, REGVAL_PTR_NOT_CARRY_0
INC R2
REGVAL_PTR_NOT_CARRY_0:
DJNZ R0, REGVAL_SET_BYTE
DJNZ R5, REGVAL_LOOP
DJNZ R4, REGVAL_LOOP
REGVAL_EXIT:
RET
ENTRY _puthex
MOV A, R7
MOV R0, A
PUTHEX_R6_R0:
MOV A, R6
ACALL L0
MOV A, R6
ACALL L1
MOV A, R0
ACALL L0
MOV A, R0
ACALL L1
RET
L0: SWAP A ; high nibble
L1: ANL A, #0FH ; low nibble
ADD A, #low(-10)
JNC L2
ADD A, #('A' - '0' - 10)
L2: ADD A, #('0' + 10)
MOV R7, A
LJMP PUTCHAR
L3: XCH A, R7 ; C:ABCD
XCH A, R0
LCALL PUTCHAR
MOV R7, #':'
LCALL PUTCHAR
ACALL PUTHEX_R6_R0
MOV R7, #0AH
LJMP PUTCHAR
ENTRY _msWarning
MOV A, #'W'
SJMP L3
ENTRY _msFatal
MOV A, #'F'
ACALL L3
SJMP $
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -