📄 rf_cc100.asm.bak
字号:
BTFSS RF_DCLK
GOTO DET_L
GOTO DET_H
DET_H:
CALL WORK_1
BANK_3
CLRF RF_CNT0
DET_H_LP: ;8NOP = 4US
CLRWDT
NOP
NOP
BTFSs RF_DCLK
GOTO Calculat_DET_H
INCFSZ RF_CNT0,1
GOTO DET_H_LP
GOTO DETECT_RF_CODE
Calculat_DET_H:
MOVLW D'70'
SUBWF RF_CNT0,W
BTFSS STATUS,C
GOTO DETECT_RF_CODE
MOVLW D'150'
SUBWF RF_CNT0,W
BTFSS STATUS,C
GOTO HALF_DET_H
BTFSC H_LONG_FG
GOTO DETECT_RF_CODE
BSF H_LONG_FG
BCF L_LONG_FG
BSF HALF_BIT_FG
INCF RX_BYTE_CNT,1
GOTO DET_L
HALF_DET_H:
CALL HALF_BIT_OP
GOTO DET_L
DET_L:
MOVLW 5
SUBWF RX_BYTE_CNT,W
BTFSC STATUS,C
GOTO DET_OK
CALL WORK_1
BANK_3
CLRF RF_CNT0
DET_L_LP: ;8NOP/8M = 4US
;CALL DELAY27NOP
CLRWDT
NOP
NOP
BTFSC RF_DCLK
GOTO Calculat_DET_L
INCFSZ RF_CNT0,1
GOTO DET_L_LP
GOTO DETECT_RF_CODE
Calculat_DET_L:
MOVLW D'70'
SUBWF RF_CNT0,W
BTFSS STATUS,C
GOTO DETECT_RF_CODE
MOVLW D'150'
SUBWF RF_CNT0,W
BTFSS STATUS,C
GOTO HALF_DET_L
BTFSC L_LONG_FG
GOTO DETECT_RF_CODE
BSF L_LONG_FG
BCF H_LONG_FG
BSF HALF_BIT_FG
INCF RX_BYTE_CNT,1
GOTO DET_L
HALF_DET_L:
CALL HALF_BIT_OP
GOTO DET_H
DET_OK:
BSF Manchester_ok_fg
GOTO END_DET_CODE
DET_FAIL:
CALL SHUT_DOWN_CC1000
END_DET_CODE:
RETURN
;************************************
;************************************
;***********************
; **************************************************
; CC1000 WRITE TO A SINGLE CC1000 REGISTER
; **************************************************
;**********WRITE CC1000_DATA CC1000_ADR
;**********MODIFY BY LZY 2007OCT23
RESETCC1000:
MOVLW 0X3A
CALL WRT_CC1000_MAIN
MOVLW 0X3B
;BRA WRT_CC1000_MAIN
WRT_CC1000_MAIN:
MOVWF CC1000_DATA
MOVLW LOW CC1000_MAIN
WRITETOREGISTER:
BSF PALE
BSF STATUS,C
BSF PCLK
MOVWF COUNT_H
RLCF COUNT_H
BCF PALE
CALL WRITE_CC1000_8BIT1
BSF PALE
MOVF CC1000_DATA,W
;------------------------------------
WRITE_CC1000_8BIT:
MOVWF COUNT_H
WRITE_CC1000_8BIT1:
MOVLW 8
MOVWF COUNT_L
WRITE_CC1000_8BIT2:
BSF PCLK
BTFSS COUNT_H,7
BCF PDATA
BTFSC COUNT_H,7
BSF PDATA
RLNCF COUNT_H
BCF PCLK
DECFSZ COUNT_L
BRA WRITE_CC1000_8BIT2
BSF PCLK
RETURN
;************************************
;**************************************************
;**************************************************
READTOREGISTER:
BSF PALE
BCF STATUS,C
BSF PCLK
MOVWF COUNT_H
RLCF COUNT_H
BCF PALE
CALL WRITE_CC1000_8BIT1
BSF PALE
BSF IOC_PDATA
READ_CC1000_8BIT:
CLRF CC1000_DATA
READ_CC1000_8BIT1:
MOVLW 8
MOVWF COUNT_L
READ_CC1000_8BIT2:
BCF PCLK
RLNCF CC1000_DATA
BTFSC PDATA
BSF CC1000_DATA,0
BSF PCLK
DECFSZ COUNT_L
BRA READ_CC1000_8BIT2
BCF IOC_PDATA
RETURN
; **************************************************
; **************************************************
; **************************************************
; **************************************************
CALIBRATECC1000:
;/* TURN OFF PA TO AVOID SUPRS DURING
; CALIBRATION IN TX MODE */
CALL WRT_CC1000_PA_POW00
;
MOVLW RXPLL
BTFSC CC1000TRX_F
MOVLW TXPLL
CALL WRT_CC1000_PLL
; PROGRAM VCO CURRENT FOR TX/RX
MOVLW RXCURRENT
BTFSC CC1000TRX_F
MOVLW TXCURRENT
CALL WRT_CC1000_CURRENT
;/* START CALIBRATION */
MOVLW 0X0A6
CALL WRT_CC1000_CAL
;/* WAIT FOR CALIBRATION COMPLETE */
CLRF CNT_LB
CALIBRATECC10002:
CALL DELAY150C
MOVLW CC1000_CAL
CALL READTOREGISTER
BTFSC CC1000_DATA,3;@YZ.3
BRA CALIBRATECC10004
DECFSZ CNT_LB
BRA CALIBRATECC10002
;/* END CALIBRATION */
CALIBRATECC10004:
MOVLW 0X26
CALL WRT_CC1000_CAL
;/* RESTORE PA SETTING */
MOVF PA_VALUE
CALL WRT_CC1000_PA_POW
;/* WAIT FOR LOCK */
CLRF CNT_LB
CALIBRATECC10006:
CALL DELAY100C
MOVLW LOW CC1000_LOCK
CALL READTOREGISTER
BTFSC CC1000_DATA,0
RETURN
DECFSZ CNT_LB
BRA CALIBRATECC10006
RETURN
; **************************************************
;
; **************************************************
SETUPCC1000PD:
BANK_3
MOVLW 0X3F
CALL WRT_CC1000_MAIN
BRA WRT_CC1000_PA_POW0
SHUT_DOWN_CC1000:
BCF RF_POWER
CLRWDT
BCF RF_DIO
CLRWDT
BCF RE_C
CLRWDT
BCF PALE
CLRWDT
BCF TE_C
CLRWDT
BCF PDATA
CLRWDT
BCF PCLK
RETURN
;***********************************
;***********************************
SET_CC1000_TX:
BCF RE_C
BSF CC1000TRX_F ;RX=0
CALL POWER_ON_CC1000
BSF TE_C
RETURN
SET_CC1000_RX:
BCF TE_C
BCF CC1000TRX_F ;RX=0
CALL POWER_ON_CC1000
BSF RE_C
BCF RX_OVER_FG
BCF RX_OK_FG
RETURN
;***********************************
POWER_ON_CC1000:
BANK_3
BSF RF_POWER
CLRWDT
BSF PALE
CLRWDT
BSF PCLK
CLRWDT
BSF PDATA
CLRWDT
BCF RF_DIO
CALL DELAY_2MS
BTFSC CC1000TRX_F
BRA POWER_ON_CC1000B
BSF RE_C
CLRWDT
BCF TE_C
CLRWDT
;BSF RX_VCC
BRA POWER_ON_CC1000D
POWER_ON_CC1000B:
BCF RE_C
CLRWDT
BSF TE_C
CLRWDT
;BCF RX_VCC
POWER_ON_CC1000D:
CALL DELAY300C
CALL PURTOCC1000
MOVLW 0X17
BTFSC CC1000TRX_F
CALL WRT_CC1000_MODEM0
BRA SETUPCC1000TRX
; **************************************************
; **************************************************
WAKEUPCC1000TOTRX:
;/* TURN ON XIAL OSCILATOR */
MOVLW 0X3B ;// FORM RX
BTFSC CC1000TRX_F
MOVLW 0X0FB ;// FORM TX
CALL WRT_CC1000_MAIN
;/* PROGRAM VCO CURRENT */
MOVLW RXCURRENT ;// FORM RX
BTFSC CC1000TRX_F
MOVLW TXCURRENT ;// FORM TX
CALL WRT_CC1000_CURRENT
;/* USE TRX REDIV SETTING */
MOVLW RXPLL ;// FORM RX
BTFSC CC1000TRX_F
MOVLW TXPLL ;// FORM TX
CALL WRT_CC1000_PLL
;/* INSERT WAIT ROUTINE HERE, MUST WAIT
; FOR XIAL OSCILLATOR TO STABILISE.
; TYPICALL Y TAKES 2MS */
CALL DELAY_2MS
;/* TURN ON BIAS GENERATOR */
MOVLW 0X39
BTFSC CC1000TRX_F
MOVLW 0X0F9
CALL WRT_CC1000_MAIN
;/* WAIT FOR 200US */
CALL DELAY300C
;/* TURN ON PA FOR TX */
BTFSS CC1000TRX_F
BRA WAKEUPCC1000TOTRX2
MOVLW PA_VALUE
CALL WRT_CC1000_PA_POW
;/* TURN ON FREQUENCY SYNTHESISTER *
WAKEUPCC1000TOTRX2:
MOVLW 0X31
BTFSC CC1000TRX_F
MOVLW 0X0F1
BRA WRT_CC1000_MAIN
; ********************************************************
; RX MODE=REG. A
; TX MODE=REG. B
; ********************************************************
SETUPCC1000TRX:
;/* TURN OFF PA TO AVOID FREQUENCY SPLATTER */
BTFSS CC1000TRX_F
BRA SETUPCC1000TRX2
CALL WRT_CC1000_PA_POW00
;/* SWITCH INTO TX/RX */
SETUPCC1000TRX2:
MOVLW 0X11
BTFSC CC1000TRX_F
MOVLW 0X0E1
CALL WRT_CC1000_MAIN
;/* USE TX/RX REFDIV SETTING */
MOVLW RXPLL
BTFSC CC1000TRX_F
MOVLW TXPLL
CALL WRT_CC1000_PLL
;/* PROGRAM VCO CURRENT FOR TX/RX */
MOVLW RXCURRENT
BTFSC CC1000TRX_F
MOVLW TXCURRENT
CALL WRT_CC1000_CURRENT
;/* WAIT 250US BEFORE MONITORING LOCK */
CALL DELAY300C
;/* WAIT FOR LOCK */
MOVLW 0X07F
MOVWF CNT_LB;A
MOVLW 0X02
MOVWF CNT_HB;A
SETUPCC1000TRX3:
MOVLW LOW CC1000_LOCK
CALL READTOREGISTER
BTFSC CC1000_DATA,0
BRA SETUPCC1000TRX4
DECFSZ CNT_LB
BRA SETUPCC1000TRX3
DECFSZ CNT_HB
BRA SETUPCC1000TRX3
;/* IF PLL IN LOCK */
SETUPCC1000TRX4:
MOVF CC1000_DATA,W
XORLW 01H
BNZ SETUPCC1000TRX6
MOVLW LOCK_OK
BRA SETUPCC1000TRX14
;/* IF RECALIBRATION OK *
SETUPCC1000TRX6:
CALL CALIBRATECC1000
BNZ SETUPCC1000TRX8
MOVLW LOCK_RECAL_OK
BRA SETUPCC1000TRX14
;/* RECALIBRATION FAILED */
SETUPCC1000TRX8:
CALL RESETFREQSYNTH
MOVLW LOCK_NOK
SETUPCC1000TRX14:
MOVWF CC1000_FG;A
;
BTFSS CC1000TRX_F
RETURN
MOVLW PA_VALUE; MOVLW 0XPA_VALUE
BRA WRT_CC1000_PA_POW
; ******************************************************
; ******************************************************
RESETFREQSYNTH:
RETURN
; ******************************************************
; RX
; ******************************************************
CC1000RXTABLE: DW 02058H, 04200H, 09C14H, 08002H
DW 01044H, 0600FH, 02610H, 0698BH ; DEVIATION = 32K(8BH)
DW 0F02BH, 00001H, 00000H
;14.7456
;CC1000RXTABLE: DW 00F42H, 042FCH, 09814H, 08002H
; DW 01044H, 048FFH, 02610H, 06F8DH
; DW 0F03BH, 00001H, 00000H ;//7038H
;CC1000TXTABLE: DW 02058H, 04200H, 09C14H, 08002H
; DW 01081H, 048FFH, 02610H, 0698DH
; DW 0F037H, 00001H, 00000H
;14.7456
;CC1000TXTABLE: DW 00F42H, 042FCH, 09814H, 08002H
; DW 01081H, 048FFH, 02610H, 06F8DH
; DW 0F017H, 00001H, 00000H ;//7037H
;PUR_TXLOAD: B0MOV H, #01H
; B0MOV L, #CC1000_FREQ_2A$L
; B0MOV X, #CC1000TXTABLE$H
; B0MOV Y, #CC1000TXTABLE$M
; B0MOV Z, #CC1000TXTABLE$L
; BRA @F
; *************************************************
;WRITE PRESET DATA TO CC1000
; *************************************************
PURTOCC1000:
MOVLW 0X3A
CALL WRT_CC1000_MAIN
CALL DELAY500C
MOVLW 0X3B
CALL WRT_CC1000_MAIN
CALL DELAY300C
;
MOVLW 1
MOVWF CC1000_ADR
MOVLW UPPER CC1000RXTABLE
MOVWF TBLPTRU
MOVLW HIGH CC1000RXTABLE
MOVWF TBLPTRH
MOVLW LOW CC1000RXTABLE
MOVWF TBLPTRL
PURTOCC1000_B:
TBLRD*+
MOVF TABLAT,W
MOVWF CC1000_DATA
MOVF CC1000_ADR,W
CALL WRITETOREGISTER
INCF CC1000_ADR
MOVF CC1000_ADR,W
XORLW 0X14
BNZ PURTOCC1000_B
MOVLW 0X25
CALL WRT_CC1000_TEST4
WRT_CC1000_PRESCALER00:
CLRF CC1000_DATA
MOVLW LOW CC1000_PRESCALER
BRA WRITETOREGISTER
;BRA SETUPCC1000PD
; *****************************************************
;
; *****************************************************
WRT_CC1000_PA_POW00:
CLRF CC1000_DATA
MOVLW LOW CC1000_PA_POW
BRA WRITETOREGISTER
WRT_CC1000_PA_POW:
MOVWF CC1000_DATA
MOVLW LOW CC1000_PA_POW
BRA WRITETOREGISTER
WRT_CC1000_MODEM0:
MOVWF CC1000_DATA
MOVLW LOW CC1000_MODEM0
BRA WRITETOREGISTER
WRT_CC1000_MODEM1:
MOVWF CC1000_DATA
MOVLW LOW CC1000_MODEM1
BRA WRITETOREGISTER
WRT_CC1000_CURRENT:
MOVWF CC1000_DATA
MOVLW LOW CC1000_CURRENT
BRA WRITETOREGISTER
WRT_CC1000_TEST4:
MOVWF CC1000_DATA
MOVLW LOW CC1000_TEST4
BRA WRITETOREGISTER
WRT_CC1000_CAL:
MOVWF CC1000_DATA
MOVLW LOW CC1000_CAL
BRA WRITETOREGISTER
WRT_CC1000_PLL:
MOVWF CC1000_DATA
MOVLW LOW CC1000_PLL
BRA WRITETOREGISTER
; **************************************************
;----------------------------------------
;=========================================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -