?? cc2500-dongle-rx-v40.asm
字號:
;*****************************************************************
INDF == 0X00;INDIRECT ADDRESSING REGISTER
TCC == 0X01;TIME CLOCK/TIMER
PC == 0X02;PROGRAM COUNTER & STACK
STATUS == 0X03
C == 0
DC == 1
Z == 2
P == 3
T == 4
PS0 == 5
PS1 == 6
GP == 7
FSR == 0X04 ;RAM SELECT REGISTER
PORT5 == 0X05
CSN EQU 0
GDO0 EQU 1
GDO2 EQU 2
SI EQU 3
PORT6 == 0X06
SO EQU 0
SCLK EQU 1
_LED EQU 2
PORT7 == 0X07
ISR == 0X3F
TCIF == 0
EXIF == 3
IOCB == 0X0B
IOCE == 0X0E
IOCF == 0X0F
;*****************=====*****************************
TEMP1 EQU 0X08
ADDR EQU 0X09
DATA0 EQU 0X0A
RW_COUNT EQU 0X0B
TEMP0 EQU 0X0D
FLAG EQU 0X0E
RX_FIFO_FLAG EQU 0
rand equ 0x0f
rand1 equ 0x10
rand_h equ 0x11
rand_l equ 0x12
;*****************BANK0*****************************
PK_TX_LENGH EQU 0X20
RRX_MODE EQU 0X21
RRX_SMALL EQU 0X22
RRX_BIG EQU 0X23
RF_STATUS EQU 0X25
PK_RX_LENGH EQU 0X26
RTX_MODE EQU 0X27 ;these bytes used to commucate with RF
RTX_KEY1 EQU 0X28 ;DO NOT MOVE REG!!!!!!!!
RTX_KEY2 EQU 0X29 ;DO NOT MOVE REG!!!!!!!!
RTX_RX EQU 0X2A ;DO NOT MOVE REG!!!!!!!!
RTX_RY EQU 0X2B ;DO NOT MOVE REG!!!!!!!!
RTX_LX EQU 0X2C ;DO NOT MOVE REG!!!!!!!!
RTX_LY EQU 0X2D ;DO NOT MOVE REG!!!!!!!!
RTX_RIGHT EQU 0X2E ;DO NOT MOVE REG!!!!!!!!
RTX_LEFT EQU 0X2F ;DO NOT MOVE REG!!!!!!!!
RTX_UP EQU 0X30 ;DO NOT MOVE REG!!!!!!!!
RTX_DOWN EQU 0X31 ;DO NOT MOVE REG!!!!!!!!
RTX_TRIANGLE EQU 0X32 ;DO NOT MOVE REG!!!!!!!!
RTX_CIRCLE EQU 0X33 ;DO NOT MOVE REG!!!!!!!!
RTX_CROSS EQU 0X34 ;DO NOT MOVE REG!!!!!!!!
RTX_SQUARE EQU 0X35 ;DO NOT MOVE REG!!!!!!!!
RTX_L1 EQU 0X36 ;DO NOT MOVE REG!!!!!!!!
RTX_R1 EQU 0X37 ;DO NOT MOVE REG!!!!!!!!
RTX_L2 EQU 0X38 ;DO NOT MOVE REG!!!!!!!!
RTX_R2 EQU 0X39 ;DO NOT MOVE REG!!!!!!!!
RSSI EQU 0X3a
LQI EQU 0X3B
;*****************************************************************
ORG 0X00
JMP RESET
;*****************************************************************
ORG 0X01
RETI
;*****************************************************************
ORG 0X02
RETI
RESET:
CALL INIT_MCU
CALL POWER_RESET
CALL CONFIG_RF
JMP $+1
JMP $+1
JMP $+1
JMP $+1
JMP $+1
CALL CHECK_RF_REG
XOR A,@0XFF
JBC STATUS,Z
JMP RESET
CALL TCCEQ1MS
JBS ISR,TCIF
JMP $-1
MOV A,@0XFB ;0dB
MOV DATA0,A
MOV A,@0X3E
MOV TEMP0,A
MOV ADDR,A
CALL WRITE_SINGLE_BYTE
CALL TCCEQ1MS
JBS ISR,TCIF
JMP $-1
MOV A,@0X3A ;FLUSH RX FIFO
MOV TEMP0,A
CALL WRITE_COMMAND_STROBE
mov a,@0x55
mov rand_h,a
mov a,@0x11
mov rand_l,a
MAIN:
call randm
MOV A,@0X34 ;RX
MOV TEMP0,A
CALL WRITE_COMMAND_STROBE
CALL TCCEQ10MS
JBC PORT5,GDO2
JMP RX_FIFO
JBS ISR,TCIF
JMP $-3
CALL TCCEQ3MS
JBC PORT5,GDO2
JMP RX_FIFO
JBS ISR,TCIF
JMP $-3
RF_IDLE:
MOV A,@0X36 ;idle
MOV TEMP0,A
CALL WRITE_COMMAND_STROBE
MOV A,@0X3A ;FLUSH RX FIFO
MOV TEMP0,A
CALL WRITE_COMMAND_STROBE
CALL TCCEQ1MS
JBS ISR,TCIF
JMP $-1
JMP MAIN
RX_FIFO:
CALL READ_BURST_22BYTE
XOR A,@0X00 ;A==00H LENGTH IS WRONG
JBC STATUS,Z
JMP RF_IDLE
CALL CAL_DATA
MOV A,@0X36 ;idle
MOV TEMP0,A
CALL WRITE_COMMAND_STROBE
MOV A,@0X3A ;FLUSH RX FIFO
MOV TEMP0,A
CALL WRITE_COMMAND_STROBE
MOV A,PORT6
XOR A,@0X04
MOV PORT6,A
;MOV A,@0X36 ;idle
;MOV TEMP0,A
;CALL WRITE_COMMAND_STROBE
CALL TCCEQ1MS
JBS ISR,TCIF
JMP $-1
MOV A,@0X55
MOV RRX_MODE,A
MOV RRX_SMALL,A
MOV RRX_BIG,A
BC STATUS,C
RLC RRX_BIG
MOV A,@0X3F
MOV ADDR,A
CALL WRITE_BURST_3BYTE
MOV A,@0X35 ;TX
MOV TEMP0,A
CALL WRITE_COMMAND_STROBE
CALL TCCEQ1MS
JBC PORT5,GDO0
JMP $+4
JBS ISR,TCIF
JMP $-3
JMP MAIN
CALL TCCEQ1MS
JBS PORT5,GDO0
JMP $+4
JBS ISR,TCIF
JMP $-3
JMP MAIN
MOV A,PORT7
XOR A,@0X08
MOV PORT7,A
MOV A,@0X36 ;idle
MOV TEMP0,A
CALL WRITE_COMMAND_STROBE
CALL TCCEQ1MS
JBS ISR,TCIF
JMP $-1
JMP MAIN
;***********************************************
;
;***********************************************
CAL_DATA:
MOV A,PK_RX_LENGH
XOR A,@0X13
JBS STATUS,Z
JMP CAL_DATA_ERROR
MOV A,RTX_MODE
XOR A,@0X87
JBS STATUS,Z
JMP CAL_DATA_ERROR
MOV A,RTX_R2
XOR A,@0X55
JBC STATUS,Z
RET
CAL_DATA_ERROR:
BC PORT7,2
RET
;*******************************************
;setup 1MS timeout to TCC
;*******************************************
TCCEQ50US:
MOV A,@(256-1) ;f=XTAL/2/256/47
MOV TCC,A ;XTAL=12MHz, T=1MS
MOV A,@0XFE ;clear TCIF 1st
MOV ISR,A
RET
;*******************************************
;setup 1MS timeout to TCC
;*******************************************
TCCEQ1MS:
MOV A,@(256-24) ;f=XTAL/2/256/47
MOV TCC,A ;XTAL=12MHz, T=1MS
MOV A,@0XFE ;clear TCIF 1st
MOV ISR,A
RET
;*******************************************
;setup 1MS timeout to TCC
;*******************************************
TCCEQ3MS:
MOV A,@(256-24-24-24) ;f=XTAL/2/256/47
MOV TCC,A ;XTAL=12MHz, T=1MS
MOV A,@0XFE ;clear TCIF 1st
MOV ISR,A
RET
;***************************************
;setup 10MS timeout to TCC
;***************************************
TCCEQ10MS:
MOV A,@(256-234);f=XTAL/2/256/234,XTAL=12MHz, T=10MS
MOV TCC,A
MOV A,@0XFE ;clear TCIF 1st
MOV ISR,A
RET
;***************************************************
;INITIALIZE THE MCU
;***************************************************
INIT_MCU:
DISI
MOV A,@0X11
IOW IOCE ;DISABLE WATCH DOG TIMER
MOV A,@0X07 ;TCC=1/256
CONTW ;set PORT6 as pull-up
MOV A,@0X01 ;disable TCC interrupt
IOW IOCF
MOV A,@0XFF
IOW IOCB
MOV A,@0B11111111
MOV PORT5,A
MOV A,@0B11110110
IOW PORT5
MOV A,@0B11111101
MOV PORT6,A
MOV A,@0B11111001
IOW PORT6
MOV A,@0B11110111
MOV PORT7,A
MOV A,@0B11110011
IOW PORT7
MOV A,@0X0A
MOV FSR,A
CLR_GENERAL_REG: ;CLEAR ALL OF THE USER'S RAM
CLR INDF
INC FSR
MOV A,FSR
JBC STATUS,Z
JMP CLR_GENERAL_REG_END
AND A,@0B00111111
JBS STATUS,Z
JMP CLR_GENERAL_REG
MOV A,@0X0A
ADD FSR,A
JMP CLR_GENERAL_REG
CLR_GENERAL_REG_END:
RET
;**********************************************
;
;
;**********************************************
CONFIG_RF:
CLR ADDR
CLR TEMP1 ;RF REG COUNT
CONFIG_RF_LOOP:
MOV A,TEMP1
CALL CONFIG_TABLE
MOV DATA0,A
MOV A,ADDR
MOV TEMP0,A
CALL WRITE_SINGLE_BYTE
INC ADDR
INC TEMP1
MOV A,TEMP1
XOR A,@0X27
JBS STATUS,Z
JMP CONFIG_RF_LOOP
RET
;**********************************************
;
;
;**********************************************
POWER_RESET:
BS PORT5,CSN
BS PORT6,SCLK
JMP $+1
JMP $+1
JMP $+1
JMP $+1
JMP $+1
JMP $+1
BC PORT5,CSN
JMP $+1
JMP $+1
JMP $+1
JMP $+1
JMP $+1
JMP $+1
BS PORT5,CSN
CALL TCCEQ50US
JBS ISR,TCIF
JMP $-1
BC PORT5,CSN
JBC PORT6,SO
JMP $-1
MOV A,@0X30 ;RESET
MOV TEMP0,A
CALL WRITE_COMMAND_STROBE
JBC PORT5,GDO2
JMP $-1
RET
;************************************************
CHECK_RF_REG:
CLR ADDR
CLR TEMP1 ;RF REG COUNT
CHECK_RF_REG_LOOP:
MOV A,ADDR
MOV TEMP0,A
CALL READ_SINGLE_BYTE
MOV A,TEMP1
CALL CONFIG_TABLE
XOR A,DATA0
JBS STATUS,Z
JMP CHECK_RF_REG_ERROR
INC ADDR
INC TEMP1
MOV A,TEMP1
XOR A,@0X27
JBS STATUS,Z
JMP CHECK_RF_REG_LOOP
MOV A,@0X00
CHECK_RF_REG_END:
RET
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -