?? cc1100_pa_rx.pbp
字號:
;*****************************************
; CC1100 Module Example Code
;*****************************************
INCLUDE "modedefs.bas" ' Include serial modes
Define OSC 10
PA_En VAR PORTB.2
MISO var PortB.3 ' Connect to SO of CC1100
Sck var PortB.4
MOSI var PortB.5 ' Connect to SI of CC1100
GDO0 VAR PortB.6
CSn var PortB.7
TX var PortC.6
RX var PortC.7
Burst con 6
RW con 7
R con 1
W con 0
single con 0
Continu Con 1
' Strobe commands
CC1100_SRES con $30 ' Reset chip.
CC1100_SFSTXON con $31 ' Enable and calibrate frequency synthesizer (if MCSM0.FS_AUTOCAL=1).
' If in RX/TX: Go to a wait state where only the synthesizer is
' running (for quick RX / TX turnaround).
CC1100_SXOFF con $32 ' Turn off crystal oscillator.
CC1100_SCAL con $33 ' Calibrate frequency synthesizer and turn it off
' (enables quick start).
CC1100_SRX con $34 ' Enable RX. Perform calibration first if coming from IDLE and
' MCSM0.FS_AUTOCAL=1.
CC1100_STX con $35 ' In IDLE state: Enable TX. Perform calibration first if
' MCSM0.FS_AUTOCAL=1. If in RX state and CCA is enabled:
' Only go to TX if channel is clear.
CC1100_SIDLE con $36 ' Exit RX / TX, turn off frequency synthesizer and exit
' Wake-On-Radio mode if applicable.
CC1100_SAFC con $37 ' Perform AFC adjustment of the frequency synthesizer
CC1100_SWOR con $38 ' Start automatic RX polling sequence (Wake-on-Radio)
CC1100_SPWD con $39 ' Enter power down mode when CSn goes high.
CC1100_SFRX con $3A ' Flush the RX FIFO buffer.
CC1100_SFTX con $3B ' Flush the TX FIFO buffer.
CC1100_SWORRST con $3C ' Reset real time clock.
CC1100_SNOP con $3D ' No operation. May be used to pad strobe commands to two
' bytes for simpler software.
CC1100_PKTSTATUS con $38
CC1100_TXBYTES con $3A
CC1100_RXBYTES con $3B
CC1100_PATABLE con $3E
i var byte
k var byte
j var byte
n var byte
buffer var byte[47]
RX_buf var byte[31]
TX_buf var byte[32]
STA_TUS var byte
tx_error var byte
temp var byte
Msb_Data var bit
pkt var byte
pkt_Len var byte
ADD_ID var Byte
cnt var byte
B0 var byte
FIFO_BYTE var byte
Dtest var word
D0 var byte
MISO_Wait var bit
Tx_complete VAR BIT
Rx_rcv VAR BIT ' RF Receive bit
' ** Declare the Variables **
Cmd Var Byte ' Command byte
Dat Var Byte ' Bit Counting loop
TRISA = %00000000
ADCON1 =7
CMCON = $07
trisb = %01001011
TRISC = %10000000
pause 1000
serout PORTC.6,T9600,[10,13,"Test ST-TR1100-PA",10,13]
CSn = 1
Sck = 0
PA_En=0
pause 200
'--- Write Reset Strobe ---
Cmd = CC1100_SRES ' SRES
gosub CMD_Write
Cmd = CC1100_SNOP ' Snop
gosub CMD_Write
'--- Write Initial Config Register ---
for i = 0 to 46
lookup i,[$0B,$41,$41,$07,$D3,$91,$FF,$04,$05,$0,$0,$0B,$0,$10,$B0,$71,$C8,$93,$73,$22,$F8,$0,$07,$30,$18,$1D,$1C,$C7,$0,$B2,$87,$6B,$F8,$B6,$10,$EA,$2A,$0,$11,$41,$00,$59,$7f,$3f,$88,$31,$0B],Dat
Cmd = i
gosub REG_Write
next i
'--- Write PATABLE
Dat = $3F ' $C0 = 10 dbm , $3F = 0dBm $CE = 5 dBm
cmd = CC1100_PATABLE
gosub REG_Write
main:
cmd = CC1100_SIDLE ' Sidle
gosub CMD_Write
cmd = CC1100_SRX ' SRX strobe
gosub CMD_Write
'----------------------------------------------
' RX Test Mode
'----------------------------------------------
Rx_test:
Rx_rcv=1
while Rx_rcv = 1
gosub Rx_Byte
wend
gosub Read_RxFIFO
for k = 0 to pkt_len-3
serout2 TX,84,[Rx_buf[k]]
next k
cmd = CC1100_SFRX ' SFRX strobe for clear RxFIFO Buffer
gosub CMD_Write
cmd = CC1100_SIDLE ' Sidle strobe
gosub CMD_Write
cmd = CC1100_SRX ' SRX strobe
gosub CMD_Write
Goto Rx_test
'-------------------------
' Command Write
'-------------------------
CMD_Write:
Sck = 0
CSn = 0
MISO_Wait = 1
while MISO_Wait = 1
MISO_Wait = MISO
wend
for k = 0 to 7
MOSI = CMD.7
Sck = 1
Sta_tus.0 = MISO
Sck = 0
if k != 7 then
Sta_tus = Sta_tus << 1
endif
CMD = CMD << 1
next k
CSn = 1
return
'-------------------------
' Register Write
'-------------------------
REG_Write:
Sck = 0
CSn = 0
MISO_Wait = 1
while MISO_Wait = 1
MISO_Wait = MISO
wend
cmd.7 =0
cmd.6 =0
for k = 0 to 7
MOSI = CMD.7
Sck = 1
Sta_tus.0 = MISO
Sck = 0
if k != 7 then
Sta_tus = Sta_tus << 1
endif
CMD = CMD << 1
next k
for k = 0 to 7
MOSI = Dat.7
Sck = 1
Sck = 0
Dat = Dat << 1
next k
CSn = 1
return
'-------------------------
' Register Read
'-------------------------
REG_Read:
temp = cmd
Sck = 0
CSn = 0
MISO_Wait = 1
while MISO_Wait = 1
MISO_Wait = MISO
wend
cmd.7 =1
cmd.6 =0
for k = 0 to 7
MOSI = CMD.7
Sck = 1
Sta_tus.0 = MISO
Sck = 0
if k != 7 then
Sta_tus = Sta_tus << 1
endif
CMD = CMD << 1
next k
Dat = 0
for k = 0 to 7
Dat.0 = MISO
Sck = 1
Sck = 0
Msb_Data = DAT.7
Dat = Dat << 1
next k
Dat = Dat >> 1
Dat.7 = Msb_Data
pauseus 250
CSn = 1
serout2 TX,84,[10,13,"Register Add =",hex2 temp," Read value = ",hex2 Dat,10,13]
return
'-------------------------
' Command Read
'-------------------------
CMD_Read:
Sck = 0
CSn = 0
MISO_Wait = 1
while MISO_Wait = 1
MISO_Wait = MISO
wend
for k = 0 to 7
MOSI = CMD.7
Sck = 1
Sck = 0
CMD = CMD << 1
next k
shiftin MISO,Sck,6,[Dat\8]
CSn = 1
return
'--------------------------
' Read Config Register
'--------------------------
Read_config:
for i = 0 to 46
cmd = i
gosub REG_Read
buffer[i] = dat
next i
return
'------------------------------
' Write TX Data to Tx FIFO
'------------------------------
write_TxFIFO:
Sck = 0
CSn = 0
MISO_Wait = 1
while MISO_Wait = 1
MISO_Wait = MISO
wend
CMD = $7F
for k = 0 to 7
MOSI = CMD.7
Sck = 1
Sta_tus.0 = MISO
Sck = 0
if k != 7 then
Sta_tus = Sta_tus << 1
endif
CMD = CMD << 1
next k
' serout2 TX,84,[10,13,"Tx Byte =",bin8 Sta_tus,10,13]
'**************************************
' Write Data For Sending to TX FIFO
'**************************************
for pkt = 0 to pkt_len
Dat = TX_buf[pkt]
for k = 0 to 7
MOSI = Dat.7
Sck = 1
B0.0 = MISO
Sck = 0
if k != 7 then
B0 = B0 << 1
endif
Dat = Dat << 1
next k
next pkt
CSn = 1
sck = 0
return
'*********************************************************************************************************
' |----------------------------------------------------------------------------------------------------
' | | | | | | | |
' | Length field | Address Field | Random Data | Random Data |............| Random Data | Random Data |
' | | | | | | | |
' |----------------------------------------------------------------------------------------------------
' ^ ^ ^ ^
' | | | |
' Rx_buf[0] Rx_buf[1] Rx_buf[2] Rx_buf[menuData.packetLength]
'-------------------------------------------------------------------------------------------------------
Read_RxFIFO:
'---------------------------------------
Sck = 0
CSn = 0
MISO_Wait = 1
while MISO_Wait = 1
MISO_Wait = MISO
wend
Cmd = $FB
for k = 0 to 7
MOSI = Cmd.7
pauseus 10
Sck = 1
pauseus 10
Sta_tus.0 = MISO
Sck = 0
if k != 7 then
Sta_tus = Sta_tus << 1
endif
CMD = CMD << 1
next k
Dat = 0
for k = 0 to 7
Dat.0 = MISO
Sck = 1
pauseus 10
Sck = 0
Msb_Data = DAT.7
Dat = Dat << 1
next k
Dat = Dat >> 1
Dat.7 = Msb_Data
CSn = 1
pkt_len = Dat & %01111111
serout2 TX,84,[10,13,"Packet Len =",dec pkt_len-3,10,13]
'--------------------- Get packet Len ---------------
if pkt_len > 0 then
Sck = 0
CSn = 0
MISO_Wait = 1
while MISO_Wait = 1
MISO_Wait = MISO
wend
cmd = $FF '1011 1111
for k = 0 to 7
MOSI = CMD.7
pauseus 10
Sck = 1
pauseus 10
Sta_tus.0 = MISO
Sck = 0
if k != 7 then
Sta_tus = Sta_tus << 1
endif
CMD = CMD << 1
next k
for n = 0 to pkt_len
for k = 0 to 7
Dat.0 = MISO
pauseus 10
Sck = 1
pauseus 10
Sck = 0
Msb_Data = DAT.7
Dat = Dat << 1
next k
Dat = Dat >> 1
Dat.7 = Msb_Data
Rx_buf[n] = Dat
next n
CSn = 1
sck = 0
endif
return
'---------------------------------------
' Checking Rx receved byte in RxFIFO
'---------------------------------------
RX_Byte:
temp = cmd
Sck = 0
CSn = 0
MISO_Wait = 1
while MISO_Wait = 1
MISO_Wait = MISO
wend
cmd = $F5 ' MARCSTATE MARC_STATE[4:0]=(0x0E) RX_END
for k = 0 to 7
MOSI = CMD.7
Sck = 1
Sta_tus.0 = MISO
Sck = 0
if k != 7 then
Sta_tus = Sta_tus << 1
endif
CMD = CMD << 1
next k
Dat = 0
for k = 0 to 7
Dat.0 = MISO
Sck = 1
Sck = 0
Msb_Data = DAT.7
Dat = Dat << 1
next k
Dat = Dat >> 1
Dat.7 = Msb_Data
CSn = 1
if Dat = $01 then
Rx_rcv=0
endif
return
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -