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

📄 rf_oper.asm

📁 holtek mouse usb asm. FW
💻 ASM
字号:
INCLUDE DONGLE.INC

PUBLIC	INIT_RF
PUBLIC	RF_CHANGE_TO_TX
PUBLIC	RF_CHANGE_TO_RX
PUBLIC	RF_REFILL_COMMAND
PUBLIC	RF_WAIT_DATA
PUBLIC	RF_REG_WRITE
PUBLIC	RF_REG_READ
PUBLIC	RF_FIFO_WRITE
PUBLIC	RF_FIFO_READ

PUBLIC	RF_CHANNEL
PUBLIC	CHANNEL_INDEX
PUBLIC	RF_REG_ADDRESS
PUBLIC	RF_REG_DATA

PUBLIC	TEST_RF

PUBLIC	RF_KDATA_GOT
PUBLIC	RF_MDATA_GOT
EXTERN	TIME_COUNT			:BYTE
EXTERN	WRITE_FIFO2			:NEAR
EXTERN	WRITE_FIFO2X		:NEAR
EXTERN	WRITE_FIFO2XX		:NEAR

EXTERN	WRITE_FIFO1			:NEAR
EXTERN	WRITE_FIFO1_ALLZERO	:NEAR
EXTERN	FIFO_WF				:BIT
EXTERN	FIFO_WF1			:BIT
EXTERN	NOT_BOOT_TYPE		:BIT

EXTERN	NEXT_1_CHANNEL		:BYTE
EXTERN	NEXT_2_CHANNEL		:BYTE
EXTERN	NEXT_3_CHANNEL		:BYTE
EXTERN	NEXT_4_CHANNEL		:BYTE
EXTERN	NEXT_5_CHANNEL		:BYTE

RFOPER_DATA	.SECTION 'DATA'

RF_LCOUNT0			DB	?
RF_LCOUNT1			DB	?
RF_LCOUNT2			DB	?
RF_REG_ADDRESS		DB	?
RF_REG_DATA			DB	?
RF_DATALNG			DB	?

RF_CHANNEL			DB	?
RF_FSP_COUNT		DB	?
RF_LAST_MSERIAL		DB	?
RF_LAST_KSERIAL		DB	?
RF_LAST_RSERIAL		DB	?

CHANNEL_INDEX		DB	?

RF_NOMOUSE_CNT		DB	?

PER_CNT				DB	?
PER					DB	?
PERIOD_CNT			DB	?

RF_MDATA_GOT		DBIT
RF_KDATA_GOT		DBIT
RF_MLINKED			DBIT

MAKE_KEY	DBIT

M_COUNT		DB	?
F_WRITE_FAIL_COUNT	DB	?
WAIT_NO_ALIVE_PACK_COUNT	DB	?

REOPER_CODE	.SECTION 'CODE'

TEST_RF:
;================CONTINUES RF READ IN TEST===============
;		MOV		A, 8
;		MOV		RF_DATALNG, A
;
;	RUN_AGAIN:
;		SET		TRRDY
;
;	WAIT:
;		SNZ		TRINT
;		JMP		WAIT
;
;		CLR		TRRDY
;		CALL 	RF_FIFO_READ
;		JMP		RUN_AGAIN
;
;==================END HERE=============================

;==============CONTINUES RF WRITE OUT TEST==============
;
;	RUN_AGAIN:
;		MOV		A, RF_OUTBUFF
;		MOV		MP0, A
;
;		MOV		A, 8
;		MOV		RF_DATALNG, A
;		MOV		RF_LCOUNT0, A
;
;	FILLLOOP:
;		MOV		A, RF_LCOUNT0
;		MOV		ID0, A
;
;		INC		MP0
;		
;		SDZ		RF_LCOUNT0
;		JMP		FILLLOOP
;
;		CALL	RF_FIFO_WRITE
;	WAIT:
;		SNZ		TRINT
;		JMP		WAIT
;
;		JMP		RUN_AGAIN		
;==============================END HERE==================
		RET

INIT_RF:
		CLR		TRSDAT_CTRL
		SET		TRINT_CTRL
		SET		DRSSI_CTRL
		CLR		SPIEN_CTRL
		CLR		SPIEN
		CLR		TRRDY_CTRL
		CLR		TRRDY
		CLR		TRSDAT_CTRL
		CLR		TRSDAT
		CLR		TRSCLK_CTRL
		CLR		TRSCLK
		CLR		PSB_CTRL
		SET		PSB

		CALL	RF_RESET

		CALL	INIT_RF_REG

		MOV		A, 002H
		MOV		RF_CHANNEL, A

		MOV		A, 00AH
		MOV		RF_DATALNG, A

		CLR		RF_FSP_COUNT
		CLR		RF_MLINKED	
		CLR		CHANNEL_INDEX

		CLR		PERIOD_CNT
		CLR		PER_CNT
		CLR		PER

		RET

RF_CHANGE_TO_RX:
		MOV		A, RF_CHANNEL
		MOV		RF_REG_DATA, A
		CLR		RF_REG_ADDRESS
		CALL	RF_REG_WRITE
		RET

RF_CHANGE_TO_TX:
		MOV		A, RF_CHANNEL
		OR		A, 080H
		MOV		RF_REG_DATA, A
		CLR		RF_REG_ADDRESS
		CALL	RF_REG_WRITE
		RET

RF_REFILL_COMMAND:
		MOV		A, RF_OUTBUFF
		MOV		MP0, A
		
		MOV		A, 0F0H
		MOV		ID0, A
		INC		MP0

		MOV		A, RF_FSP_COUNT			;FSP COUNING NUMBER
		MOV		ID0, A
		INC		MP0

		CLR		ACC

		SZ		RF_MDATA_GOT
		OR		A, 003H

		SZ		RF_KDATA_GOT
		OR		A, 00CH

		MOV		ID0, A
		INC		MP0

		MOV		A, NEXT_1_CHANNEL
		MOV		ID0, A
		INC		MP0

		MOV		A, NEXT_2_CHANNEL
		MOV		ID0, A
		INC		MP0

		MOV		A, NEXT_3_CHANNEL
		MOV		ID0, A
		INC		MP0

		MOV		A, NEXT_4_CHANNEL
		MOV		ID0, A
		INC		MP0

		INC		RF_FSP_COUNT

		RET

RF_WAIT_DATA:
		CLR		LED_PIN
		SET		TRRDY
		CLR		CARRY

		CLR		RF_MDATA_GOT
		CLR		RF_KDATA_GOT

		;WAIT FOR RF_DATA FOR ABOUT 4MS
	RX_WAIT_TRINT:
		SZ		TRINT
		JMP		GOT_RF_DATA

		MOV		A, TIME_COUNT		
		SUB		A, 30
		SZ		CARRY
		JMP		EXIT_RF_WAIT_DATA
		JMP		RX_WAIT_TRINT

	GOT_RF_DATA:
		SET		PC.2
		CALL	RF_FIFO_READ
		CALL	HANDLE_RF_DATA
		CLR		PC.2

		JMP		RX_WAIT_TRINT

	EXIT_RF_WAIT_DATA:
		CLR		TRRDY

	;============ ALIVE COUNT =========================
		SNZ	MAKE_KEY
		JMP	NORMAL_EXIT
		MOV	A, 15
		XOR	A, WAIT_NO_ALIVE_PACK_COUNT
		SZ	ACC
		JMP	WAIT_RELEASE
		JMP	RELEASE_TIMEOUT
	WAIT_RELEASE:
		INC	WAIT_NO_ALIVE_PACK_COUNT
		JMP	NORMAL_EXIT
	RELEASE_TIMEOUT:
		CALL	WRITE_FIFO1_ALLZERO
		CLR	WAIT_NO_ALIVE_PACK_COUNT
		CLR	MAKE_KEY
	NORMAL_EXIT:
	;==================================================
		SNZ		RF_MDATA_GOT
		SET		LED_PIN

		SNZ		RF_MDATA_GOT
		INC		PER_CNT
		
		INC		PERIOD_CNT
		MOV		A, 255
		XOR		A, PERIOD_CNT
		SZ		ACC
		JMP		NOT_100_CNT

	NFIRST_PER:

		MOV		A, PER
		ADD		A, PER_CNT
		RR		ACC
		AND		A, 07FH
		MOV		PER, A

	PER_NEXT:
		CLR		PERIOD_CNT
		CLR		PER_CNT

	NOT_100_CNT:

		RET

HANDLE_RF_DATA:

		MOV		A, RF_INBUFF
		MOV		MP0, A

		MOV		A, ID0
		
		XOR		A, 0E1H
		SZ		ACC
		JMP		NOT_MOUSE_DATA

		SET		RF_MDATA_GOT
		INC		MP0
		MOV		A, ID0
		XOR		A, RF_LAST_MSERIAL
		SZ		ACC
		JMP		GOT_NEW_MOUSE_DATA
	;M_SERIAL SAME!
	INC	M_COUNT
		SNZ		FIFO_WF
		JMP		UPDATE_MSERIAL
	INC	F_WRITE_FAIL_COUNT
	GOT_NEW_MOUSE_DATA:
	;=========================== FOR OFFICE BUTTON ==============================
		MOV		A, RF_INBUFF
		MOV		MP0, A
		INC		MP0
		INC		MP0
		INC		MP0
		SNZ		ID0.3
		JMP	L_M_R_BUT_OR_XYZ
		CALL	WRITE_FIFO2XX

		SZ		FIFO_WF
		CLR		RF_MDATA_GOT
		SZ		FIFO_WF
		JMP		NOT_UPDATE_MSERIAL
		JMP		UPDATE_MSERIAL
	;============================================================================
	L_M_R_BUT_OR_XYZ:
		CALL	WRITE_FIFO2
		SZ		FIFO_WF
		CLR		RF_MDATA_GOT
		SZ		FIFO_WF
		JMP		NOT_UPDATE_MSERIAL

	UPDATE_MSERIAL:
		MOV		A, RF_INBUFF
		MOV		MP0, A
		INC		MP0
		MOV		A, ID0
		MOV		RF_LAST_MSERIAL, A
		RET

	NOT_UPDATE_MSERIAL:
		RET
	NOT_MOUSE_DATA:

		MOV		A, ID0
		XOR		A, 0D2H
		SZ		ACC
		JMP		MAYBE_ALIVE_PACKAGE	;NOT_KB_D2_DATA
		JMP		D2_PACK_ACCESS
	
	MAYBE_ALIVE_PACKAGE:
		MOV		A, ID0
		XOR		A, 0D3H
		SZ		ACC
		JMP		NOT_KB_D2_DATA
	;============= D3_ALIVE_PACKAGE ACCESS SECTION =============
	D3_PACK_ACCESS:
		SET	RF_KDATA_GOT
		CLR	WAIT_NO_ALIVE_PACK_COUNT
		JMP	UPDATE_KSERIAL
	;============= D2_PACKAGE ACCESS SECTION ===================
	D2_PACK_ACCESS:
		SZ	[0B0H]
		JMP	SET_MAKE_KEY
		SZ	[0B1H]
		JMP	SET_MAKE_KEY
		JMP	CLEAR_MAKE_KEY
	SET_MAKE_KEY:
		SET	MAKE_KEY
		JMP	D2_PACK_ACC
	CLEAR_MAKE_KEY:
		CLR	MAKE_KEY
	D2_PACK_ACC:
		SET		RF_KDATA_GOT
		INC		MP0
		MOV		A, ID0
		XOR		A, RF_LAST_KSERIAL
		SZ		ACC
		JMP		GOT_NEW_KB_DATA

		SNZ		FIFO_WF1
		JMP		UPDATE_KSERIAL
		
	GOT_NEW_KB_DATA:
		CALL	WRITE_FIFO1
		SZ		FIFO_WF1
		CLR		RF_KDATA_GOT
		SZ		FIFO_WF1
		JMP		NOT_UPDATE_KSERIAL

	UPDATE_KSERIAL:
		MOV		A, RF_INBUFF
		MOV		MP0, A
		INC		MP0
		MOV		A, ID0
		MOV		RF_LAST_KSERIAL, A
		RET

	NOT_UPDATE_KSERIAL:
	
		RET
		
	NOT_KB_D2_DATA:
		MOV		A, ID0
		XOR		A, 0C3H
		SZ		ACC
		JMP		NOT_KB_D2_NOR_C3_DATA
	; ============ C3_PACKAGE ACCESS SECTION ==================
		SET		RF_KDATA_GOT
		INC		MP0
		MOV		A, ID0
		XOR		A, RF_LAST_KSERIAL
		SZ		ACC
		CALL		WRITE_FIFO2X
		
		SZ		FIFO_WF1
		CALL		WRITE_FIFO2X
		JMP		UPDATE_KSERIAL

	; =================================================
	NOT_KB_D2_NOR_C3_DATA:
		
		RET
		
RF_RESET:
		CLR		PSB
		SET		TRRDY
		
		CALL	DELAY_120MS

		CLR		TRRDY
		CALL	DELAY_20US
		SET		PSB

		CALL	DELAY_120MS
		RET	

RF_REG_WRITE:
		SET		SPIEN
		CALL	DELAY_20US

		;WRITE R/W BIT, 1
		SET		TRSDAT
		SET		TRSCLK
		CLR		TRSCLK
		CLR		TRSDAT

		SZ		RF_REG_ADDRESS.6
		SET		TRSDAT
		SET		TRSCLK
		CLR		TRSCLK
		CLR		TRSDAT

		SZ		RF_REG_ADDRESS.5
		SET		TRSDAT
		SET		TRSCLK
		CLR		TRSCLK
		CLR		TRSDAT

		SZ		RF_REG_ADDRESS.4
		SET		TRSDAT
		SET		TRSCLK
		CLR		TRSCLK
		CLR		TRSDAT

		SZ		RF_REG_ADDRESS.3
		SET		TRSDAT
		SET		TRSCLK
		CLR		TRSCLK
		CLR		TRSDAT

		SZ		RF_REG_ADDRESS.2
		SET		TRSDAT
		SET		TRSCLK
		CLR		TRSCLK
		CLR		TRSDAT

		SZ		RF_REG_ADDRESS.1
		SET		TRSDAT
		SET		TRSCLK
		CLR		TRSCLK
		CLR		TRSDAT

		SZ		RF_REG_ADDRESS.0
		SET		TRSDAT
		SET		TRSCLK
		CLR		TRSCLK
		CLR		TRSDAT

		SZ		RF_REG_DATA.7
		SET		TRSDAT
		SET		TRSCLK
		CLR		TRSCLK
		CLR		TRSDAT

		SZ		RF_REG_DATA.6
		SET		TRSDAT
		SET		TRSCLK
		CLR		TRSCLK
		CLR		TRSDAT

		SZ		RF_REG_DATA.5
		SET		TRSDAT
		SET		TRSCLK
		CLR		TRSCLK
		CLR		TRSDAT

		SZ		RF_REG_DATA.4
		SET		TRSDAT
		SET		TRSCLK
		CLR		TRSCLK
		CLR		TRSDAT

		SZ		RF_REG_DATA.3
		SET		TRSDAT
		SET		TRSCLK
		CLR		TRSCLK
		CLR		TRSDAT

		SZ		RF_REG_DATA.2
		SET		TRSDAT
		SET		TRSCLK
		CLR		TRSCLK
		CLR		TRSDAT

		SZ		RF_REG_DATA.1
		SET		TRSDAT
		SET		TRSCLK
		CLR		TRSCLK
		CLR		TRSDAT

		SZ		RF_REG_DATA.0
		SET		TRSDAT
		SET		TRSCLK
		CLR		TRSCLK
		CLR		TRSDAT

		CLR		SPIEN

		RET


RF_REG_READ:
		SET		SPIEN
		CALL	DELAY_20US

		;WRITE R/W BIT, 0
		CLR		TRSDAT
		
		CLR		TRSCLK
		MOV		A, 07FH			; MASK:0XXX XXXX
		ANDM	A, RF_REG_ADDRESS

		;=== ADDRESS PHASE ======================================
		MOV		A, 8
		MOV		RF_LCOUNT0, A
	RREGAP:
		SZ		RF_REG_ADDRESS.7
		SET		TRSDAT
		SET		TRSCLK
		CLR		TRSCLK
		CLR		TRSDAT
		RL		RF_REG_ADDRESS
		SDZ		RF_LCOUNT0
		JMP		RREGAP

		RL		RF_REG_ADDRESS

		;=== DATA PHASE ==========================================
		CLR		RF_REG_DATA
		MOV		A, 8
		MOV		RF_LCOUNT0, A
		
		;TURNCATE DATA PIN FROM OUTPUT TO INPUT
		SET		TRSDAT_CTRL
		
	RREGDP:
		RL		RF_REG_DATA
		SZ		TRSDAT
		SET		RF_REG_DATA.0
		SET		TRSCLK
		CLR		TRSCLK
		SDZ		RF_LCOUNT0
		JMP		RREGDP

		CLR		SPIEN

		CLR		TRSDAT_CTRL


		RET

RF_FIFO_WRITE:
		MOV		A, RF_DATALNG	; INIT:0A
		MOV		RF_LCOUNT1, A
		MOV		A, RF_OUTBUFF
		MOV		MP0, A

		CLR		TRSDAT
		CLR		TRSCLK

		SET		TRRDY
		CALL 	DELAY_20US

		;DATA PHASE
	WFIFOOLP:

		SZ		ID0.7
		SET		TRSDAT
		SET		TRSCLK
		CLR		TRSCLK
		CLR		TRSDAT

		SZ		ID0.6
		SET		TRSDAT
		SET		TRSCLK
		CLR		TRSCLK
		CLR		TRSDAT

		SZ		ID0.5
		SET		TRSDAT
		SET		TRSCLK
		CLR		TRSCLK
		CLR		TRSDAT

		SZ		ID0.4
		SET		TRSDAT
		SET		TRSCLK
		CLR		TRSCLK
		CLR		TRSDAT

		SZ		ID0.3
		SET		TRSDAT
		SET		TRSCLK
		CLR		TRSCLK
		CLR		TRSDAT

		SZ		ID0.2
		SET		TRSDAT
		SET		TRSCLK
		CLR		TRSCLK
		CLR		TRSDAT

		SZ		ID0.1
		SET		TRSDAT
		SET		TRSCLK
		CLR		TRSCLK
		CLR		TRSDAT

		SZ		ID0.0
		SET		TRSDAT
		SET		TRSCLK
		CLR		TRSCLK
		CLR		TRSDAT


		INC		MP0
		SDZ		RF_LCOUNT1
		JMP		WFIFOOLP		
		
		;DUMMY CYCLE : 3-BIT
		CLR		TRSDAT
		SET		TRSCLK
		CLR		TRSCLK
		SET		TRSCLK
		CLR		TRSCLK
		SET		TRSCLK
		CLR		TRSCLK
		
		CLR		TRRDY		

	RFWFIFOWTRINT:
		SNZ		TRINT
		JMP		RFWFIFOWTRINT
		
		RET


RF_FIFO_READ:
		MOV		A, RF_DATALNG
		MOV		RF_LCOUNT1, A
		MOV		A, RF_INBUFF
		MOV		MP0, A

		;TURNCATE TRSDAT AS INPUT
		SET		TRSDAT_CTRL
		
		;PRE-DUMMY CYCLE : 2-BIT
		SET		TRSCLK
		CLR		TRSCLK
		SET		TRSCLK
		CLR		TRSCLK		

		;DATA PHASE
	RFIFOOLP:
		CLR		ID0

		SZ		TRSDAT
		SET		ID0.7
		SET		TRSCLK
		CLR		TRSCLK

		SZ		TRSDAT
		SET		ID0.6
		SET		TRSCLK
		CLR		TRSCLK

		SZ		TRSDAT
		SET		ID0.5
		SET		TRSCLK
		CLR		TRSCLK

		SZ		TRSDAT
		SET		ID0.4
		SET		TRSCLK
		CLR		TRSCLK

		SZ		TRSDAT
		SET		ID0.3
		SET		TRSCLK
		CLR		TRSCLK

		SZ		TRSDAT
		SET		ID0.2
		SET		TRSCLK
		CLR		TRSCLK

		SZ		TRSDAT
		SET		ID0.1
		SET		TRSCLK
		CLR		TRSCLK

		SZ		TRSDAT
		SET		ID0.0
		SET		TRSCLK
		CLR		TRSCLK

	
		INC		MP0
		SDZ		RF_LCOUNT1
		JMP		RFIFOOLP		
		
		;DUMMY CYCLE : 3-BIT
		CLR		TRSDAT
		SET		TRSCLK
		CLR		TRSCLK
		SET		TRSCLK
		CLR		TRSCLK
		SET		TRSCLK
		CLR		TRSCLK
		
		CLR		TRSDAT_CTRL		
		
		RET




;DELAY ABOUT 20US
DELAY_20US:
		MOV		A, 8
		
	DELAY_LOOP:
		SDZ		ACC
		JMP		DELAY_LOOP	
	
		RET

DELAY_120MS:
		MOV		A, 4
		MOV		RF_LCOUNT0, A

	DELAY_120MS_OLP:
		MOV		A, 10
		MOV		RF_LCOUNT1, A
		
	DELAY_120MS_OUTLOOP:
		SET		RF_LCOUNT2

	DELAY_120MS_INLOOP:
		SDZ		RF_LCOUNT2
		JMP		DELAY_120MS_INLOOP

		SDZ		RF_LCOUNT1
		JMP		DELAY_120MS_OUTLOOP

		SDZ		RF_LCOUNT0
		JMP		DELAY_120MS_OLP

		RET



RF_REG_VALUE 	.SECTION AT 0E00H 'CODE'

INIT_RF_REG:
		MOV		A, RF_REG_TABLE
		MOV		TBLP, A

		CLR		RF_REG_ADDRESS

	INIT_RF_REG_LOOP:
		TABRDC	RF_REG_DATA
		CALL	RF_REG_WRITE
		INC		TBLP
		INC		RF_REG_ADDRESS
		MOV		A, RF_REG_ADDRESS
		XOR		A, 018H
		SZ		ACC
		JMP		INIT_RF_REG_LOOP

		CLR		RF_REG_ADDRESS

		RET

;AB 54
RF_REG_TABLE:
;D2						078h
;		0		1		2		3		4		5		6		7
DC		082H,	01BH,	068H,	007H,	000H,	009H,	030H,	023H	;0
DC		003H,	0ABH,	044H,	044H,	000H,	000H,	054H,	00FH	;8
DC		00FH,	000H,	000H,	000H,	001H,	0B4H,	000H,	022H	;10
;-------------------------------------------------------------------------------
DC		004H,	039H,	003H,	000H,	000H,	000H,	000H,	000H	;24
DC		03FH,	000H,	000H,	000H,	000H,	002H,	02FH,	01FH	;32
DC		00DH,	00FH,	007H,	001H,	019H,	000H,	000H,	000H	;40
DC		0B9H,	080H,	0B7H,	0F4H,	024H,	000H,	00BH,	05CH	;48
DC		042H,	0ABH,	015H,	002H,	01BH,	001H,	01BH,	001H	;56
DC		013H,	001H,	031H,	073H,	00AH,	001H,	000H,	000H	;64
DC		08CH,	066H,	0F0H,	0BFH,	018H,	046H,	01DH,	026H	;72
DC		04CH,	0A8H,	014H,	006H,	01AH,	007H,	09AH,	025H	;80
;DC		030H,	02FH,	00AH,	017H,	0FEH,	0FEH,	0FEH,	0FFH	;88
;DC		001H,	022H,	014H,	00FH,	014H,	055H,	0BBH,	0B9H	;96
;DC		088H,	087H,	057H,	000H,	000H,	000H,	000H,	000H	;104
;DC		000H,	000H,	000H,	000H,	000H,	000H,	000H,	07CH	;112
;DC		002H,	03FH,	004H,	000H,	030H,	000H,	002H,	058H	;120

DC		030H,	02FH,	00AH,	017H,	0F0H,	0F0H,	0F0H,	0F0H	;58
DC		000H,	022H,	014H,	00FH,	014H,	055H,	0FFH,	0FFH	;60
DC		0FFH,	0FFH,	057H,	000H,	000H,	000H,	000H,	000H	;68
DC		000H,	000H,	000H,	000H,	000H,	000H,	000H,	07CH	;70
DC		002H,	03FH,	004H,	000H,	030H,	000H,	002H,	058H	;78

⌨️ 快捷键说明

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