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

📄 tf9925b.src

📁 2.4GH 无绳电话源代码(三星MCU), 8825 P
💻 SRC
📖 第 1 页 / 共 5 页
字号:
	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 + -