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

📄 rf_oper.asm

📁 holtek mouse .asm firewave
💻 ASM
字号:
INCLUDE REG_DEF.INC

PUBLIC	INIT_RF
PUBLIC	RF_CHANGE_TO_TX
PUBLIC	RF_CHANGE_TO_RX
PUBLIC	RF_REFILL_DATA
PUBLIC	RF_REG_WRITE
PUBLIC	RF_REG_READ
PUBLIC	RF_FIFO_WRITE
PUBLIC	RF_FIFO_READ

PUBLIC	WAIT_FSP
PUBLIC	CHECK_FSP

PUBLIC	DELAY_120MS
PUBLIC	TEST_RF

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
		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		NEXT_1_CHANNEL
		CLR		NEXT_2_CHANNEL
		CLR		NEXT_3_CHANNEL
		CLR		NEXT_4_CHANNEL
		CLR		NEXT_5_CHANNEL

		; THE RANGE OD THE SERIAL NUMBER OF THE DATA PACKET IS 1~255
		MOV		A, 1
		MOV		RF_MSERIAL, A

		RET

WAIT_FSP:
		SZ		POWER_MODE.2
		JMP		WAIT
		
		SNZ		POWER_MODE.0
		SET		TRRDY

	WAIT:
		SZ		TRINT
		JMP		WFSP_GOT_FSP

		MOV		A, 80
		XOR		A, TIMER_COUNT
		SZ		ACC
		JMP		WAIT

		MOV		A, RF_INBUFF
		MOV		MP0, A
		CLR		ID0
		JMP		LOST_FSP

		JMP		WAIT

	LOST_FSP:
	WFSP_GOT_FSP:
		CLR		TRRDY
		CLR		TIMER_ENABLE
		CLR		TIMER_COUNT
		MOV		A, 105
		MOV		TMR, A
		SET		TIMER_ENABLE
		CALL 	RF_FIFO_READ

		RET

CHECK_FSP:
		MOV		A, RF_INBUFF
		MOV		MP0, A

		MOV		A, 0F0H
		XOR		A, ID0
		SZ		ACC
		JMP		NOT_VALID_FSP

		SET		VALID_FSP
		INC		MP0
		MOV		A, ID0
		MOV		RF_FSP_COUNT, A
		
		INC		MP0
		
		CLR		RESEND_DATA_REQUIRED
		MOV		A, ID0
		AND		A, 003H
		XOR		A, 003H
		SZ		ACC
		JMP	MAYBE_RESEND_CHECK
		JMP	NO_RESEND_CHECK
	MAYBE_RESEND_CHECK:
		MOV		A, 1
		XOR		A, RESEND_COUNT
		SZ		ACC
		JMP	RESEND_CHECK
		CLR	RESEND_COUNT
		JMP	NO_RESEND_CHECK
	RESEND_CHECK:
		SET		RESEND_DATA_REQUIRED
		INC		RESEND_COUNT
		
	NO_RESEND_CHECK	:
		INC		MP0

		MOV		A, ID0
		MOV		NEXT_1_CHANNEL, A

		INC		MP0
		MOV		A, ID0
		MOV		NEXT_2_CHANNEL, A

		INC		MP0
		MOV		A, ID0
		MOV		NEXT_3_CHANNEL, A

		INC		MP0
		MOV		A, ID0
		MOV		NEXT_4_CHANNEL, A

		INC		MP0
		MOV		A, ID0
		MOV		NEXT_5_CHANNEL, A

		SET		DONGLE_LINKED

		JMP		EXIT_CHECK_FSP
	
	NOT_VALID_FSP:
		CLR		VALID_FSP

	EXIT_CHECK_FSP:
		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_DATA:
		SNZ		VALID_FSP
		JMP		NOT_INC_MSERIAL

		SZ		RESEND_DATA_REQUIRED
		JMP		NOT_INC_MSERIAL
		
		INC		RF_MSERIAL
		SZ		RF_MSERIAL
		JMP		NOT_INC_AGAIN

		INC		RF_MSERIAL

	NOT_INC_AGAIN:
	NOT_INC_MSERIAL:

		MOV		A, RF_OUTBUFF
		MOV		MP0, A
	
		MOV		A, 0E1H
		MOV		ID0, A
		INC		MP0

		MOV		A, RF_MSERIAL
		MOV		ID0, A
		INC		MP0

		MOV		A, RF_FSP_COUNT
		MOV		ID0, A
		INC		MP0

		MOV		A, KEY_STATUS				;FOR BUTTONS
		MOV		ID0, A
		INC		MP0
		
		MOV		A, MONTION_X		
		MOV		ID0, A
		INC		MP0

		MOV		A, MONTION_Y
		MOV		ID0, A
		INC		MP0

		MOV		A, Z_WHEEL				;FOR Z-WHEEL
		MOV		ID0, A
		INC		MP0

		SNZ		VALID_FSP
		JMP		NOT_CLR_Z

		SZ		RESEND_DATA_REQUIRED
		JMP		NOT_CLR_Z

		CLR		Z_WHEEL

	NOT_CLR_Z:

		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

		;ADDRESS PHASE
		MOV		A, 7
		MOV		RF_LCOUNT0, A
	WREGAP:
		SZ		RF_REG_ADDRESS.6
		SET		TRSDAT
		SET		TRSCLK
		CLR		TRSCLK
		CLR		TRSDAT
		RL		RF_REG_ADDRESS
		SDZ		RF_LCOUNT0
		JMP		WREGAP

		RL		RF_REG_ADDRESS

		;DATA PHASE
		MOV		A, 8
		MOV		RF_LCOUNT0, A
	WREGDP:
		SZ		RF_REG_DATA.7
		SET		TRSDAT
		SET		TRSCLK
		CLR		TRSCLK
		CLR		TRSDAT
		RL		RF_REG_DATA
		SDZ		RF_LCOUNT0
		JMP		WREGDP

		CLR		SPIEN

		RET


RF_REG_READ:
		SET		SPIEN
		CALL	DELAY_20US

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

		;ADDRESS PHASE
		MOV		A, 7
		MOV		RF_LCOUNT0, A
	RREGAP:
		SZ		RF_REG_ADDRESS.6
		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
		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 0100H '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, 018H
		XOR		A, RF_REG_ADDRESS
		SZ		ACC
		JMP		INIT_RF_REG_LOOP

		CLR		RF_REG_ADDRESS

		RET


RF_REG_TABLE:
;		0		1		2		3		4		5		6		7
DC		002H,	01BH,	068H,	007H,	000H,	009H,	030H,	023H	;0
DC		003H,	054H,	00FH,	00FH,	000H,	000H,	0ABH,	044H	;8
DC		044H,	000H,	000H,	000H,	006H,	0B4H,	000H,	022H	;16
;-------------------------------------------------------------------------------
DC		004H,	039H,	003H,	000H,	000H,	000H,	000H,	000H	;24


⌨️ 快捷键说明

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