📄 channel_mana.asm
字号:
INCLUDE DONGLE.INC
PUBLIC INIT_CHANNEL_MANA
PUBLIC CHANNEL_SCAN
PUBLIC RSSI_CHECK
PUBLIC GET_NEXT_CHANNEL
PUBLIC GET_NEXT_2CHANNELS
PUBLIC NEXT_1_CHANNEL
PUBLIC NEXT_2_CHANNEL
PUBLIC NEXT_3_CHANNEL
PUBLIC NEXT_4_CHANNEL
PUBLIC NEXT_5_CHANNEL
EXTERN RF_CHANNEL :BYTE
EXTERN RF_REG_ADDRESS :BYTE
EXTERN RF_REG_DATA :BYTE
EXTERN CHANNEL_INDEX :BYTE
EXTERN RF_REG_READ :NEAR
EXTERN RF_REG_WRITE :NEAR
CHANNEL_MANA .SECTION 'DATA'
BIT_MASK_INDEX DB ?
CHANNEL_BIT_MASK DB ?
RSSI_LIMIT DB ?
SAFE_CHANNEL_CNT DB ?
CHANNEL_IDX_TEMP DB ?
NEXT_1_CHANNEL DB ?
NEXT_2_CHANNEL DB ?
NEXT_3_CHANNEL DB ?
NEXT_4_CHANNEL DB ?
NEXT_5_CHANNEL DB ?
RF_CHANNEL_RSSI DB ?
CHANNEL_IDX_RSSI DB ?
RSSI_ACC_TEMP DB ?
RSSI_ACC_LIMIT DB ?
RSSI_RB_TEMP DB ?
RSSI_RB_CNT DB ?
RSSI_RB_1 DB ?
RF_CHANNEL_TEMP DB ?
RSSI_INC_FLAG DBIT
CHANNEL_MANA_CODE .SECTION 'CODE'
INIT_CHANNEL_MANA:
MOV A, 80
MOV SAFE_CHANNEL_CNT, A
MOV A, 2
MOV RSSI_LIMIT, A
MOV A, 1
MOV RSSI_ACC_LIMIT, A
CLR CHANNEL_IDX_RSSI
MOV A, 2
MOV RF_CHANNEL_RSSI, A
RET
CHANNEL_SCAN:
RET
RSSI_CHECK:
SET PC.2
RSSI_CA:
MOV A, CHANNEL_IDX_RSSI ; INIT:0
MOV CHANNEL_IDX_TEMP, A
;CALL GET_RF_CHANNEL_RSSI
; CHANGE TO RX MODE
CLR RF_REG_ADDRESS
MOV A, RF_CHANNEL_RSSI ; RF_CHANNEL_RSSI <-- 2 ,WHEN INIT_CHANNEL_MANA()
MOV RF_REG_DATA, A
CALL RF_REG_WRITE ; CHANGE MODE TO "RX" AND CHANNEL TO "RF_CHANNEL_RSSI"
; CHANGE TO DIRECT MODE
MOV A, 002H
MOV RF_REG_ADDRESS, A
MOV A, 028H ; 0010 1000
MOV RF_REG_DATA, A
CALL RF_REG_WRITE
;ENABLE RSSI REFRESH BY ASSIGN RSSI_CCA=1
MOV A, 003H
MOV RF_REG_ADDRESS, A
MOV A, 090H ; 1001 0000
MOV RF_REG_DATA, A ; |
CALL RF_REG_WRITE ; RSSI_CCA
;POWER-UP RF FRONT
;SET TRRDY
WAIT_RSSI_REFRESH_DONE:
CALL RF_REG_READ
SZ RF_REG_DATA.4 ; RSSI_CCA:1->0 MEANS REFRESH "RSSIVAL" DONE
JMP WAIT_RSSI_REFRESH_DONE
;CLR TRRDY
MOV A, 004H
MOV RF_REG_ADDRESS, A
CALL RF_REG_READ
MOV A, RF_REG_DATA ; NOW RF_REG_DATA.3~0:RSSIVAL
AND A, 00FH ; 0000XXXX
ADD A, RSSI_RB_1 ; INIT:0
RR ACC ; X0000XXX
AND A, 07FH ; 01111111
MOV RSSI_RB_1, A ; RSSI_RB_1(NOW) = ( RSSIVAL + RSSI_RB_1(LAST TIME) ) MOD 2
; CHANGE BACK TO BURST MODE
MOV A, 002H
MOV RF_REG_ADDRESS, A
MOV A, 068H ; 0110 1000
MOV RF_REG_DATA, A ; |
CALL RF_REG_WRITE ; BURST MODE
INC RSSI_RB_CNT ; 0~7 ROTATIONs "NOT INC RSSI CHANNEL"
MOV A, 8
XOR A, RSSI_RB_CNT
SZ ACC
JMP NOT_INC_RSSI_CHANNEL
INC_RSSI_CHANNEL:
MOV A, RSSI_RB_1 ; RSSI_RB_1(NOW) = ( RSSIVAL + RSSI_RB_1(LAST TIME) ) MOD 2
CALL REFRESH_RSSI_ACC_A
CLR RSSI_RB_1
CLR RSSI_RB_CNT
INC RF_CHANNEL_RSSI
MOV A, 82
XOR A, RF_CHANNEL_RSSI
SZ ACC
JMP NOT_RST_CIR
MOV A, 2
MOV RF_CHANNEL_RSSI, A
JMP EXIT_RSSI_CHECK
NOT_INC_RSSI_CHANNEL:
NOT_RST_CIR:
EXIT_RSSI_CHECK:
CLR PC.2
RET
REFRESH_RSSI_ACC_A:
MOV RSSI_RB_TEMP, A ; A = RSSI_RB_1(NOW) = ( RSSIVAL + RSSI_RB_1(LAST) ) MOD 2
MOV A, RF_CHANNEL_RSSI
SUB A, 2
RR ACC
AND A, 07FH
ADD A, RF_RSSI_STATUS
MOV MP0, A
MOV A, RF_CHANNEL_RSSI
SUB A, 2
MOV RF_CHANNEL_TEMP, A
MOV A, ID0
SZ RF_CHANNEL_TEMP.0
JMP LOW_BYTE_RSSI_A
RR ACC
RR ACC
RR ACC
RR ACC
LOW_BYTE_RSSI_A:
AND A, 00FH
ADD A, RSSI_RB_TEMP
RR ACC
AND A, 07FH
PUT_RSSI_ACC_BACK_A:
MOV RSSI_ACC_TEMP, A
MOV A, ID0
MOV A, RF_CHANNEL_RSSI
SUB A, 2
SZ ACC.0
JMP PUT_RSSI_LOW_BYTE_A
MOV A, 00FH
ANDM A, ID0
MOV A, RSSI_ACC_TEMP
RL ACC
RL ACC
RL ACC
RL ACC
ORM A, ID0
JMP PUT_RSSI_BACK_DONE_A
PUT_RSSI_LOW_BYTE_A:
MOV A, 0F0H
ANDM A, ID0
MOV A, RSSI_ACC_TEMP
ORM A, ID0
PUT_RSSI_BACK_DONE_A:
; IF RSSI_ACC_TEMP > RSSI_ACC_LIMIT THEN MARK THIS CHANNEL AS "DON'T BROTHER"
; MOV A, RF_CHANNEL_RSSI ;KIM
; AND A, 00FH ;KIM
; XOR A, 00FH ;KIM
; SZ ACC ;KIM
; JMP JUDGE_AS_USUAL ;KIM
; JMP CLEAR_MARK_THIS_CHANNEL_A ;KIM
;JUDGE_AS_USUAL: ;KIM
MOV A, RSSI_LIMIT
SUB A, RSSI_ACC_TEMP
SNZ ACC.7
JMP CLEAR_MARK_THIS_CHANNEL_A
CALL MARK_CHANNEL
JMP EXIT_REFRESH_RSSI_ACC_A
CLEAR_MARK_THIS_CHANNEL_A:
CALL CLEAR_MARKED_CHANNEL
EXIT_REFRESH_RSSI_ACC_A:
RET
;============================================================================
REFRESH_RSSI_ACC:
CLR RSSI_INC_FLAG
SZ ACC
SET RSSI_INC_FLAG
MOV A, CHANNEL_IDX_RSSI
RR ACC
AND A, 07FH
ADD A, RF_RSSI_STATUS
MOV MP0, A
MOV A, ID0
SZ CHANNEL_IDX_RSSI.0
JMP LOW_BYTE_RSSI
RR ACC
RR ACC
RR ACC
RR ACC
LOW_BYTE_RSSI:
AND A, 00FH
SZ RSSI_INC_FLAG
JMP INC_RSSI_ACC
SZ ACC
DEC ACC
JMP PUT_RSSI_ACC_BACK
INC_RSSI_ACC:
INC ACC
AND A, 00FH
SZ ACC
JMP PUT_RSSI_ACC_BACK
SET ACC
AND A, 00FH
JMP PUT_RSSI_ACC_BACK
PUT_RSSI_ACC_BACK:
MOV RSSI_ACC_TEMP, A
MOV A, ID0
SZ CHANNEL_IDX_RSSI.0
JMP PUT_RSSI_LOW_BYTE
MOV A, 00FH
ANDM A, ID0
MOV A, RSSI_ACC_TEMP
RL ACC
RL ACC
RL ACC
RL ACC
ORM A, ID0
JMP PUT_RSSI_BACK_DONE
PUT_RSSI_LOW_BYTE:
MOV A, 0F0H
ANDM A, ID0
MOV A, RSSI_ACC_TEMP
ORM A, ID0
PUT_RSSI_BACK_DONE:
; IF RSSI_ACC_TEMP > RSSI_ACC_LIMIT THEN MARK THIS CHANNEL AS "DON'T BROTHER"
MOV A, RSSI_ACC_LIMIT
SUB A, RSSI_ACC_TEMP
SNZ ACC.7
JMP CLEAR_MARK_THIS_CHANNEL
CALL MARK_CHANNEL
JMP EXIT_REFRESH_RSSI_ACC
CLEAR_MARK_THIS_CHANNEL:
CALL CLEAR_MARKED_CHANNEL
EXIT_REFRESH_RSSI_ACC:
RET
;============================================================================
RF_REG_VALUE .SECTION AT 0300H 'CODE'
MARK_CHANNEL:
MOV A, RF_CHANNEL_RSSI
SUB A, 2
RR ACC
RR ACC
RR ACC
AND A, 01FH ; 000X XXXX
ADD A, RF_CHANNEL_STATUS
MOV MP0, A
MOV A, RF_CHANNEL_RSSI
SUB A, 2
AND A, 007H ; 0000 0XXX
MOV BIT_MASK_INDEX, A
MOV A, BIT_MASK_TABLE
ADD A, BIT_MASK_INDEX
MOV TBLP, A
TABRDC CHANNEL_BIT_MASK
MOV A, ID0
AND A, CHANNEL_BIT_MASK
SZ ACC
JMP NOTDECCNT
DEC SAFE_CHANNEL_CNT
NOTDECCNT:
MOV A, ID0
OR A, CHANNEL_BIT_MASK
MOV ID0, A
RET
CLEAR_MARKED_CHANNEL:
MOV A, RF_CHANNEL_RSSI
SUB A, 2
RR ACC
RR ACC
RR ACC
AND A, 01FH ;000X XXXX
ADD A, RF_CHANNEL_STATUS
MOV MP0, A
MOV A, RF_CHANNEL_RSSI
SUB A, 2
AND A, 007H
MOV BIT_MASK_INDEX, A
MOV A, BIT_MASK_TABLE
ADD A, BIT_MASK_INDEX
MOV TBLP, A
TABRDC CHANNEL_BIT_MASK
MOV A, ID0
AND A, CHANNEL_BIT_MASK
SZ ACC
JMP INC_SCHN_CNT;
JMP NOT_INC_SCHN_CNT
INC_SCHN_CNT:
INC SAFE_CHANNEL_CNT
CHANNEL_NOT_FULL:
NOT_INC_SCHN_CNT:
MOV A, RF_CHANNEL_RSSI
SUB A, 2
AND A, 007H
MOV BIT_MASK_INDEX, A
MOV A, BIT_CLEAR_MASKED_TABLE
ADD A, BIT_MASK_INDEX
MOV TBLP, A
TABRDC CHANNEL_BIT_MASK
MOV A, ID0
AND A, CHANNEL_BIT_MASK
MOV ID0, A
RET
BIT_MASK_TABLE:
DC 128, 64, 32, 16, 8, 4, 2, 1
BIT_CLEAR_MASKED_TABLE:
DC 07FH, 0BFH, 0DFH, 0EFH, 0F7H, 0FBH, 0FDH, 0FEH
CHN_CODE .SECTION AT 0400H 'CODE'
GET_RF_CHANNEL_RSSI:
MOV A, CHN_LIST
ADD A, CHANNEL_IDX_TEMP
MOV TBLP, A
TABRDC RF_CHANNEL_RSSI
RET
GET_RF_CHANNEL:
MOV A, CHN_LIST
ADD A, CHANNEL_INDEX
MOV TBLP, A
TABRDC RF_CHANNEL
RET
GET_RF_CHANNEL_4:
MOV A, CHN_LIST
ADD A, CHANNEL_IDX_TEMP
MOV TBLP, A
TABRDC RF_CHANNEL_TEMP
RET
GET_NEXT_CHANNEL:
MOV A, NEXT_1_CHANNEL
MOV CHANNEL_INDEX, A
SZ CHANNEL_INDEX
DEC CHANNEL_INDEX
MOV A, NEXT_2_CHANNEL
MOV NEXT_1_CHANNEL, A
MOV A, NEXT_3_CHANNEL
MOV NEXT_2_CHANNEL, A
MOV A, NEXT_4_CHANNEL
MOV NEXT_3_CHANNEL, A
MOV A, NEXT_5_CHANNEL
MOV NEXT_4_CHANNEL, A
CALL GET_RF_CHANNEL
RET
GET_NEXT_2CHANNELS:
MOV A, NEXT_5_CHANNEL
MOV CHANNEL_IDX_TEMP, A
DEC CHANNEL_IDX_TEMP
CHECK_AGAIN_1:
INC CHANNEL_IDX_TEMP
MOV A, 80
XOR A, CHANNEL_IDX_TEMP
SZ ACC
JMP NRSTIDX2
CLR CHANNEL_IDX_TEMP
NRSTIDX2:
CALL GET_RF_CHANNEL_4
MOV A, RF_CHANNEL_TEMP
SUB A, 2
RR ACC
RR ACC
RR ACC
AND A, 01FH
ADD A, RF_CHANNEL_STATUS
MOV MP0, A
MOV A, RF_CHANNEL_TEMP
SUB A, 2
AND A, 007H
MOV BIT_MASK_INDEX, A
MOV A, MASK_TABLE
ADD A, BIT_MASK_INDEX
MOV TBLP, A
TABRDC CHANNEL_BIT_MASK
MOV A, ID0
AND A, CHANNEL_BIT_MASK
SZ ACC
JMP CHECK_AGAIN_1
MOV A, CHANNEL_IDX_TEMP
MOV NEXT_5_CHANNEL, A
INC NEXT_5_CHANNEL
RET
CHN_LIST:
DC 2, 22, 42, 62
DC 3, 23, 43, 63
DC 4, 24, 44, 64
DC 5, 25, 45, 65
DC 6, 26, 46, 66
DC 7, 27, 47, 67
DC 8, 28, 48, 68
DC 9, 29, 49, 69
DC 10, 30, 50, 70
DC 11, 31, 51, 71
DC 12, 32, 52, 72
DC 13, 33, 53, 73
DC 14, 34, 54, 74
DC 15, 35, 55, 75
DC 16, 36, 56, 76
DC 17, 37, 57, 77
DC 18, 38, 58, 78
DC 19, 39, 59, 79
DC 20, 40, 60, 80
DC 21, 41, 61, 81
MASK_TABLE:
DC 128, 64, 32, 16, 8, 4, 2, 1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -