📄 rf_oper.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 + -