📄 rf_cc1000.asm
字号:
;******************************REC BIT
MOVLW 2*1 ;START BIT
XORWF CSR3,W
BZ CHECK_BIT_HIGH
MOVLW 2*10 ;BYTE 2 HEAD
XORWF CSR3,W
BZ CHECK_BIT_HIGH
MOVLW 2*19 ;BYTE 3 HEAD
XORWF CSR3,W
BZ CHECK_BIT_HIGH
MOVLW 2*28 ;BYTE 4 HEAD
XORWF CSR3,W
BZ CHECK_BIT_HIGH
MOVLW 2*37 ;BYTE 5 HEAD
XORWF CSR3,W
BZ CHECK_BIT_HIGH
MOVLW 2*46 ;BYTE 5 HEAD
XORWF CSR3,W
BZ CHECK_BIT_HIGH
;*************************
RRCF CSR2
BTG STATUS,C
RRCF CSR9,1
RRCF CSR8,1
RRCF CSR7,1
RRCF CSR6,1
RRCF CSR5,1
;***************************************
REC_RF_HALF_LOW_OK:
RETLW 1
CHECK_BIT_HIGH: ;BIT MUST 1
MOVLW 00000010B
XORWF CSR2,W
BZ REC_RF_HALF_LOW_OK
REC_RF_HALF_LOW_ERROR:
RETLW 0
;***************************************************
;***************************************************
;CHECK MANCHESTER FROM POWER DOWN
;****************************************************
REC_10MS:
RCALL SET_CC1000_RX
MOVLW 3; 8-12MS
MOVWF RX_TIME
BCF Manchester_ok_fg
BCF RX_OVER_FG
REC_10MS1
CLRF CSR3
REC_10MS2:
MOVLW 256-16 ;>8 BIT
ADDWF CSR3,W
BC DET_OK
BTFSC RX_OVER_FG
BRA DET_FAIL ;TIMER OVER
BTFSC RF_DCLK
BRA REC_10MS_RF_HIGH
RCALL GET_RF_DCLK_LOW
BZ REC_10MS1 ;>1024US ERROR
BRA REC_10MS_RF_HIGH2
REC_10MS_RF_HIGH:
RCALL GET_RF_DCLK_HIGH
BZ REC_10MS1 ;>1024US ERROR
REC_10MS_RF_HIGH2:
MOVLW RF_BIT_MIN ;MUST >100 US
ADDWF CSR4,W
BNC REC_10MS1
MOVLW RF_BIT_SHORT ;
ADDWF CSR4,W
MOVLW 1
BTFSC STATUS,C
MOVLW 2
ADDWF CSR3
BRA REC_10MS2
DET_OK:
BSF Manchester_ok_fg
RETURN
DET_FAIL:
RCALL SHUT_DOWN_CC1000
RETURN
;************************************
;************************************
;***********************
; **************************************************
; CC1000 WRITE TO A SINGLE CC1000 REGISTER
; **************************************************
;**********WRITE CC1000_DATA CC1000_ADR
;**********MODIFY BY LZY 2007OCT23
RESETCC1000:
MOVLW 0X3A
RCALL 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 KEYREG7
RLCF KEYREG7
BCF PALE
RCALL WRITE_CC1000_8BIT1
BSF PALE
MOVF CC1000_DATA,W
;------------------------------------
WRITE_CC1000_8BIT:
MOVWF KEYREG7
WRITE_CC1000_8BIT1:
MOVLW 8
MOVWF KEYREG6
WRITE_CC1000_8BIT2:
BSF PCLK
BTFSS KEYREG7,7
BCF PDATA
BTFSC KEYREG7,7
BSF PDATA
RLNCF KEYREG7
BCF PCLK
DECFSZ KEYREG6
BRA WRITE_CC1000_8BIT2
BSF PCLK
RETURN
;************************************
;**************************************************
;**************************************************
READTOREGISTER:
BSF PALE
BCF STATUS,C
BSF PCLK
MOVWF KEYREG7
RLCF KEYREG7
BCF PALE
RCALL WRITE_CC1000_8BIT1
BSF PALE
clrwdt
BSF IOC_PDATA
READ_CC1000_8BIT:
CLRF CC1000_DATA
READ_CC1000_8BIT1:
MOVLW 8
MOVWF KEYREG6
READ_CC1000_8BIT2:
BCF PCLK
RLNCF CC1000_DATA
BTFSC PDATA_R
BSF CC1000_DATA,0
BSF PCLK
DECFSZ KEYREG6
BRA READ_CC1000_8BIT2
BCF IOC_PDATA
MOVF CC1000_DATA,W
RETURN
; **************************************************
; **************************************************
; **************************************************
; **************************************************
CALIBRATECC1000:
;/* TURN OFF PA TO AVOID SUPRS DURING
; CALIBRATION IN TX MODE */
RCALL WRT_CC1000_PA_POW00
;
MOVLW RXPLL
BTFSC CC1000TRX_F
MOVLW TXPLL
RCALL WRT_CC1000_PLL
; PROGRAM VCO CURRENT FOR TX/RX
MOVLW RXCURRENT
BTFSC CC1000TRX_F
MOVLW TXCURRENT
RCALL WRT_CC1000_CURRENT
;/* START CALIBRATION */
MOVLW 0X0A6
RCALL WRT_CC1000_CAL
;/* WAIT FOR CALIBRATION COMPLETE */
MOVLW CC1000_FREQ_2A
RCALL READTOREGISTER
XORLW 0X58
BNZ CALIBRATECC10004_ERROR
MOVLW 192
MOVWF KEYREG0
CALIBRATECC10002:
CALL DELAY150C
MOVLW CC1000_CAL
RCALL READTOREGISTER
BTFSC CC1000_DATA,3;@YZ.3
BRA CALIBRATECC10004
DECFSZ KEYREG0
BRA CALIBRATECC10002
;/* END CALIBRATION */
CALIBRATECC10004:
MOVLW 0X26
RCALL WRT_CC1000_CAL
CALL DELAY150C
MOVLW LOW CC1000_LOCK
RCALL READTOREGISTER
BSF CC1000LOCK_F
andlw 0x01
XORLW 0X01 ;LOCK OK DATA
CALIBRATECC10004_ERROR:
BTFSS STATUS,Z
BCF CC1000LOCK_F
RETURN
; **************************************************
;
; **************************************************
SETUPCC1000PD:
BANK_3
MOVLW 0X3F
RCALL WRT_CC1000_MAIN
BRA WRT_CC1000_PA_POW00
SHUT_DOWN_CC1000:
BCF IOC_RF_DCLK
CLRWDT
BCF RF_DCLK
CLRWDT
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
BANK_3
BSF CC1000TRX_F ;RX=0
BRA POWER_ON_CC1000
; BSF TE_C
; RETURN
SET_CC1000_RX:
; BCF TE_C
BANK_3
BCF RX_OVER_FG
BCF RX_OK_FG
BCF CC1000TRX_F ;RX=0
;BRA POWER_ON_CC1000
; BSF RE_C
;RETURN
;***********************************
POWER_ON_CC1000:
BANK_3
;BSF MCU_OUT
BSF IOC_RF_DCLK
CLRWDT
BSF RF_DCLK
CLRWDT
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
RCALL PURTOCC1000
MOVLW 0X17
BTFSC CC1000TRX_F
RCALL WRT_CC1000_MODEM0
BRA SETUPCC1000TRX
; **************************************************
; **************************************************
WAKEUPCC1000TOTRX:
;/* TURN ON XIAL OSCILATOR */
MOVLW 0X3B ;// FORM RX
BTFSC CC1000TRX_F
MOVLW 0X0FB ;// FORM TX
RCALL WRT_CC1000_MAIN
;/* PROGRAM VCO CURRENT */
MOVLW RXCURRENT ;// FORM RX
BTFSC CC1000TRX_F
MOVLW TXCURRENT ;// FORM TX
RCALL WRT_CC1000_CURRENT
;/* USE TRX REDIV SETTING */
MOVLW RXPLL ;// FORM RX
BTFSC CC1000TRX_F
MOVLW TXPLL ;// FORM TX
RCALL WRT_CC1000_PLL
;/* INSERT WAIT ROUTINE HERE, MUST WAIT
; FOR XIAL OSCILLATOR TO STABILISE.
; TYPIRCALL Y TAKES 2MS */
CALL DELAY_2MS
;/* TURN ON BIAS GENERATOR */
MOVLW 0X39
BTFSC CC1000TRX_F
MOVLW 0X0F9
RCALL WRT_CC1000_MAIN
;/* WAIT FOR 200US */
CALL DELAY300C
;/* TURN ON PA FOR TX */
BTFSS CC1000TRX_F
BRA WAKEUPCC1000TOTRX2
MOVLW PA_VALUE
RCALL 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
RCALL WRT_CC1000_PA_POW00
;/* SWITCH INTO TX/RX */
SETUPCC1000TRX2:
MOVLW 0X11
BTFSC CC1000TRX_F
MOVLW 0X0E1
RCALL WRT_CC1000_MAIN
;/* USE TX/RX REFDIV SETTING */
MOVLW RXPLL
BTFSC CC1000TRX_F
MOVLW TXPLL
RCALL WRT_CC1000_PLL
;/* PROGRAM VCO CURRENT FOR TX/RX */
MOVLW RXCURRENT
BTFSC CC1000TRX_F
MOVLW TXCURRENT
RCALL WRT_CC1000_CURRENT
;/* WAIT 250US BEFORE MONITORING LOCK */
CALL DELAY300C
RCALL CALIBRATECC1000
;BCF MCU_OUT
;BTFSC CC1000LOCK_F
BZ SETUPCC1000TRX14
RCALL CALIBRATECC1000
;XORLW LOCK_OK
BZ SETUPCC1000TRX14
RCALL CALIBRATECC1000
SETUPCC1000TRX14:
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
RCALL WRT_CC1000_MAIN
CALL DELAY500C
MOVLW 0X3B
RCALL 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
RCALL WRITETOREGISTER
INCF CC1000_ADR
MOVF CC1000_ADR,W
XORLW 0X14
BNZ PURTOCC1000_B
MOVLW 0X25
RCALL 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 + -