📄 tf9925b.src
字号:
BITS TXPWRPORT.TX_PWR ; off TX power
BITS LINKFG.CH_SCAN ; enable standby multi-channel scan
BITR LINKFG.CONNECTED ; quit connected status
BITS IE0 ; re-enable ring interrupt
RNGJOB_QUIT:
RET
;
;*******************************************
; Stop ring check routine & ring led blink
; (reset flag for main routine check)
;*******************************************
STOP_RING:
REF ZERO2EA ; stop ring check & quit ringing mode
LD RING_FLAG,EA
BITR TIMERFG.BLK_TKLED ; stop In-Use led blink
RET
;
;***************************
; send DTMF cid job routine
;***************************
SEND_DTMF_CID:
REF SMB0
REF STOP_TX ; stop old continous command first !
;
REF SMB1
BITR CIDRX_FG.DTMF_RCVD
;
LD EA,#BS_DTMF ; send DTMF format cid command
LD TXCODE_BUF,EA
;
LD EA,DTMFRX_PTR ; load total length into byte counter
ADS EA,#4 ; include ID,command,DTMFRX_PTR
JPS SEND_CID_CMD ; send received DTMF data
;
;****************
; read DTMF data
;****************
GET_DTMFDATA:
REF SMB15
BITS DTMFENPORT.HT9170_TOE
NOP
LD A,DTMFDATAPORT ; get DTMF received data
BITR DTMFENPORT.HT9170_TOE
REF SMB1
RET
;
;*****************************
; Init. DT/DTMF as input mode
;*****************************
SET_DTMF_INPUT:
REF SMB1
BITS DTMFRX_FG.DTMF_ENABLE ; enable DTMF decode
;
REF SMB15
REF ZERO2EA ; Set DT/DTMF as input mode
JR SET_DTMF
;
;******************************
; Init. DT/DTMF as output mode
;******************************
SET_DTMF_OUTPUT:
REF SMB1
BITR DTMFRX_FG.DTMF_ENABLE ; disable DTMF decode
;
REF SMB15
LD EA,#00001111B ; Set DT/DTMF as output mode
;
SET_DTMF:
LD PMG2,EA
REF SMB0
RET
;
;***************************
; Timers decrement routine
;***************************
TMRSDEC:
BTST TIMERFG.T2MS ; entry for every 2ms
RET
BITR TIMERFG.T2MS
;
INCS RANDOM_SECL ; get 16 bits random code
JR GET_RANDOM_CODE
INCS RANDOM_SEC0
JR GET_RANDOM_CODE
INCS RANDOM_SECH
JR GET_RANDOM_CODE
INCS RANDOM_SEC1
NOP
GET_RANDOM_CODE:
LD EA,CIDERR_TMR
REF DECSEA
LD CIDERR_TMR,EA
;
INCS T20MS_BUF ; @20ms
JPS BLKLED_END
LD A,#16-10 ; Yes,reload 20ms timer value
LD T20MS_BUF,A
BITS TIMERFG.KYSCN_EN ; enable keyscan
;
BTST PWRDETPORT.POWER_DET ; power fail ?
JPS PWRDOWN_JOB
;
LD EA,MUTE_TMR
REF DECSEA
LD MUTE_TMR,EA ; update mute timer
;
BLK_LED:
BTST TIMERFG.BLK_TKLED
JPS BLKLED_END
LD EA,BLK_TKCNT
REF EAEQZERO
JPS BLKLED_END
;
LD BLK_TKCNT,EA
REF DECSEA
JPS BLKLED_END
BTSTZ TALKLEDPORT.TALK_LED ; blink TALK led
BITS TALKLEDPORT.TALK_LED
LD EA,BLK_TKTIME ; reload blink time
LD BLK_TKCNT,EA
;
BLKLED_END:
LD EA,T100MS_BUF
REF EAEQZERO
JR RELOAD_100MS
LD T100MS_BUF,EA
RET
;
RELOAD_100MS:
LD EA,#49-1 ; 50-1/2ms, 49-1/2.048ms
LD T100MS_BUF,EA ; @100ms
;
BTST TIMERFGH.LPTMR_EN ; update loop timer
JR LPTMR_END
LD EA,LOOP_CNT
REF DECSEA
LD LOOP_CNT,EA
REF EAEQZERO
BITR TIMERFGH.LPTMR_EN
LPTMR_END:
;
TMR1SDEC:
INCS T1S_BUF ; @1s
JR TMRDEC_QUIT
LD A,#16-10 ; reload 1 sec. timer value
LD T1S_BUF,A
;
TMRDEC_QUIT:
RET
;
;***********************************
; Start blink led routine
; i/p : A - led blink time (@20ms)
;***********************************
BLINK_TKLED:
BITS TIMERFG.BLK_TKLED ; enable In-Use led blink
LD BLK_TKTIME,EA
LD BLK_TKCNT,EA
RET
;
;*******************
; Off led routine
;*******************
OFF_TALKLED:
; BITS TALKLEDPORT.TALK_LED
BITR TALKLEDPORT.TALK_LED
BITR TIMERFG.BLK_TKLED ; stop In-Use led blink
RET
;
;******************************
; Multi-channel scan routine
;******************************
MCA_SCAN:
BTST LINKFG.CH_SCAN
RET
;
BTST RXFG.PREAMBLE ; preamble detected ?
JR MCA_SCAN2
;
BTSF COMBO_FG.EXTEND
JR MCA_SCAN3
BITS COMBO_FG.EXTEND
JPS MCA_SCAN4
MCA_SCAN2:
BTSF RXFG.SYNC
JPS MCA_SCAN4
MCA_SCAN3:
JPS MCA_SCAN5
MCA_SCAN6:
LD EA,#50
LD PAGE_TIMER,EA
BITS TIME_FLAGH.TIMER3FG
RET
;
MCA_SCAN5:
BTSF TIME_FLAGH.TIMER3FG ; current ch. scan timeout ?
RET
;
BITR COMBO_FG.EXTEND
BTST TXPWRPORT.TX_PWR ; off tx power ?
BITS TXPWRPORT.TX_PWR ; No, off tx power
;
LD EA,CONNECT_CH
LD HL,EA
REF CURCH2EA
REF CPEAHL
JR MCA_SCAN1
CALLS NEXTCHAN ; scan next channel
MCA_SCAN1:
LD CONNECT_CH,EA
CALLS PROG_PLL1
MCA_SCAN4:
LD EA,#7-1
LD PAGE_TIMER,EA ; start 120ms scan timer
BITS TIME_FLAGH.TIMER3FG
MCA_QUIT:
RET
;
;*****************************
; In-Use LED control routine
;*****************************
LED_JOB:
; BTSF LINKFG.WAIT_CHNUM
; RET
BTSF TIMERFG.BLK_TKLED ; ignore if In-Use led blink
RET
BTST CHGDETPORT.CHARGE_DET
JR LED_JOB1
BTSF MODEFG.TALK_MODE
JR LED_JOB1
BTSF RING_FLAG.RING_VALID
RET
; BITS TALKLEDPORT.TALK_LED ; off In-Use led
BITR TALKLEDPORT.TALK_LED
RET
;
LED_JOB1:
; BITR TALKLEDPORT.TALK_LED ; on In-Use LED
BITS TALKLEDPORT.TALK_LED
LED_JOB_QUIT:
RET
;
;*****************************************************
; Charge check
; i/p : CHARGE_DET - 0 : on charge ; 1 : off charge
; : CRADLE_STS - 0 : on cradle ; 1 : off cradle
; o/p : CRADLE_STS
;*****************************************************
CHARGE_CHK:
LDB C,CHGDETPORT.CHARGE_DET
LD H,#CHK_FLAG>>4
BXOR C,@H+CHK_FLAG.CRADLE_STS
BTST C
JPS CHG_CHK_END
;
LD EA,DEBOUN_CNT ; debounce on/off cradle
REF DECSEA
LD DEBOUN_CNT,EA
REF EAEQZERO
RET
;
LDB C,@H+CHK_FLAG.CRADLE_STS
CCF
LDB @H+CHK_FLAG.CRADLE_STS,C
;
BTSF CHK_FLAG.CRADLE_STS
JPS CHARGE_CHK1
;
BTST CHK_FLAGH.HW_RESET
JPS CHG_CHK_END
BITR CHK_FLAGH.HW_RESET
;
;-----------------------------------
; off -> on charge cradle detected
;-----------------------------------
;
BITR TXPWRPORT.TX_PWR
CALLS TXRX_HIGH_INIT
LD EA,#CHCODE_CH
CALLS PROG_PLL1 ; prog. PLL to default channel
LD EA,#TX_SETTLE
REF WAIT_SETTLE
;
CALLS TXRX_ON_INIT
LD EA,#20/2
REF WAIT_SETTLE
;
LD EA,RANDOM_SECL
REF SMB1
LD SECODEL,EA
REF SMB0
LD EA,RANDOM_SECH
REF SMB1
LD SECODEH,EA
REF SMB0
;
REF CURCH2EA
LD HL,EA
LD EA,#CHANGE_SEC
OR EA,HL
CALLS SEND_C_CODE
REF ZERO2EA
LD RXFG,EA ; clear any data previous received
;
LD EA,#150
LD PAGE_TIMER,EA ; set 3 sec. timeout
BITS TIME_FLAGH.TIMER3FG
LD EA,#5
CALLS BLINK_TKLED ; blink CHARGE led 100ms on/off
CHGLOOP:
BTST TIME_FLAGH.TIMER3FG ; 3 sec. timeout ?
JPS CHGLOOP1
REF TIMERDEC ; update led blink
CHGLOOP4:
REF CHK_RXD ; check new security ID match ?
JPS CHGLOOP
LD HL,#CHGSEC_ACK ; change security ACK ?
REF CPEAHL
JPS CHGLOOP
;
;-------------------------
; exchange code success !
;-------------------------
CHGLOOP3:
REF STOP_TX ; stop tx first ! 2002-03-10
LD A,#16-2
LD SCAN_CNT,A
LD EA,#CHGSEC_CFM ; send change security confirm 2 times
CALLS SEND_NCMD
LD EA,#10/2
REF WAIT_SETTLE ; delay 10ms before off TX power
;
REF SMB1
LD EA,SECODEL ; update register to new security code
REF SMB0
LD SECLOW_REG,EA
REF SMB1
LD EA,SECODEH
REF SMB0
LD SECHIGH_REG,EA
JPS CHGLOOP2
;
;----------------------
; exchange code fail !
;----------------------
CHGLOOP1:
LD EA,SECLOW_REG ; if timeout, use old security code
REF SMB1
LD SECODEL,EA
REF SMB0
LD EA,SECHIGH_REG
REF SMB1
LD SECODEH,EA
REF SMB0
;
CHGLOOP2:
REF OFF_TLKLED ; off led & stop blink
REF STOP_TX ; stop tx data
BITS TXPWRPORT.TX_PWR ; off tx power
REF ZERO2EA
LD RXFG,EA ; clr. any byte received
BITR TIME_FLAGH.TIMER3FG ; reset channel scan timer flag
CHG_CHK_END:
LD EA,#3
LD DEBOUN_CNT,EA
BITR CHK_FLAGH.HW_RESET
CHG_CHK_QUIT:
RET
;
;---------------------------
; on -> off cradle detected
;---------------------------
CHARGE_CHK1:
; BITS PCLEDPORT.PC_LED
BITR PCLEDPORT.PC_LED
JR CHG_CHK_END
;
;********************
; Page job routine
;********************
PAGE_JOB:
BTSF MODEFG.TALK_MODE ; skip if TALK mode
RET
;
BTST CHGDETPORT.CHARGE_DET ; skip if on charge cradle
RET
;
BTSF RING_FLAG.RING_VALID ; skip if ringing mode
RET
;
CALL KEYSCN
JPS PAGEJOB2 ; jp to page mode check
;
;---------------------------------------------
; Page keypress -> init. connect & led flash
;---------------------------------------------
PAGEJOB6:
BTSF MODEFG.PAGE_MODE ; skip if already PAGE mode
JPS PAGEJOB9
;
LD EA,#10 ; is GE option
CALLS BLINK_TKLED ; blink CHARGE led 200ms on/off
CALLS CONNECT ; init. send BS_CONNECT for 6 sec. max.
BITS MODEFG.PAGE_MODE ; enter PAGE mode
RET
;
PAGEJOB9:
REF STOP_TX
LD A,#16-2
LD SCAN_CNT,A
LD EA,#PAGEOFF ; break down page
CALLS SEND_NCMD
JPS END_PAGE
;
;-------------------------------------------
; PAGE mode check
; - skip if connected
; - send long page code for long page
; - send short page codef for short page
;-------------------------------------------
PAGEJOB2:
BTST MODEFG.PAGE_MODE ; PAGE mode ?
RET
;
BTST LINKFG.CONNECTED ; already linked up ?
RET
;
LD HL,#PAGE_CMD
REF SMB1
LD EA,TXCODE_BUF ; skip if already init.
REF SMB0
XCH EA,HL
REF CPEAHL
JR PAGEJOB8
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -