//========================================================
局部镀锡//========================================================
// 2.4GHz
// Product = CC2500
// Crystal accuracy = 40 ppm
// X-tal frequency = 26 MHz
// RF output power = 0 dBm
// RX filterbandwidth = 232.000000 kHz
// Deviation = 0.000000
// Return state: Return to RX state upon leaving either TX or RX
/
/ Datarate = 10.000000 kbps
灭茬机// Modulation = 2-FSK
// Manchester enable = (0) Manchester disabled
// RF Frequency = 2433.000000 MHz
// Channel spacing = 199.950000 kHz
// Channel number = 0
// Optimization = Sensitivity
// Sync mode = (3) 30/32 sync word bits detected
// Format of RX/TX data = (0) Normal mode, use FIFOs for RX and TX
// CRC operation = (1) CRC calculation in TX and CRC check in RX enabled
// Forward Error Correction = (0) FEC disabled
/
/ Length configuration = (1) Variable length packets, packet length configured by the first received byte after sync word.
// Packetlength = 255
// Preamble count = (2) 4 bytes
// Append status = 1
// Address check = (0) No address check
// FIFO autoflush = 0
// Device address = 0
// GDO0 signal selection = ( 6) Asserts when sync word has been sent / received, and de-asserts at the end of the packet
// GDO2 signal selection = (11) Serial Clock
RF_REGISTER_TAB:
ADDAR PCL, R
//===
RETIA 0X04 ;//0x07 Packet automation control.
RETIA 0X05 ;//0x08 Packet automation control
RETIA 0X00 ;//0x09 Device address.
RETIA 0X00 ;// 0X0A Channel number.
RETIA 0X0B ;//0x0B Freq synthesizer control.
RETIA 0X00 ;//0x0C Freq synthesizer control.
RETIA 0x5D ;// 0X0D Freq control word, high byte
RETIA 0x93 ;// 0X0E Freq control word, mid byte.
RETIA 0xB1 ;// 0X0F Freq control word, low byte.
RETIA 0x78 ;//0x10 Modem configuration.
RETIA 0x93 ;//0x11 Modem configuration (DATARATE)
RETIA 0x83 ;//0x12 Modem configuration. BIT7:0 = Enable (better sensitivity)
// 1 = Disable (current optimized). Only for data rates ≤ 250 kBaud
// BIT6:4 = 0x111 MSK
// BIT3 = 0 禁止曼切斯特编码/译码
// BIT2:0 = 0X011 开启TX时的重复同步词汇发送和RX时的32 位同步词汇侦测
// (只有32 位中的30 位需要匹配):
RETIA 0x22 ;//0x13 Modem configuration. 禁止前导位纠错;前导4个字节;信道空间的2个指数
RETIA 0xF8 ;//0x14 Modem configuration. (channal)信道空间(初始为1)的8位尾数26000000/2^18*(256+0xF8)*2^2*(channal)=199.951171875khz
// 此信道的频率单位与基频相加后,就是运行的频率 RETIA 0x44 ;//0x15 Modem dev (when FSK mod en) 背离指数为0
RETIA 0x07 ;//0x16 MCSM2 至到数据包终止
RETIA 0x30 ;//0x17 MainRadio Cntrl State Machine 若RSSI 在门限之下,清理数据包指示,除非当前接收一个数据包
// 在数据包被接受后的下一个状态:空闲
// 在数据包已发送到(TX)后的下个状态:空闲
RETIA 0x18 ;//0x18 MainRadio Cntrl State Machine 当从空闲到TX 或RX时,进行自动校准
// 终止次数64次,禁止引脚通讯控制选项,XOSC_FORCE_OFF
RETIA 0x16 ;//0x19 Freq Offset Compens. Config 频率偏移补偿配置
RETIA 0x6C ;//0x1A Bit synchronization config. 位同步控制
RETIA 0x43 ;//0x1B AGC control. AGC控制寄存器
RETIA 0x40 ;//0x1C AGC control AGC控制寄存器
RETIA 0x91 ;//0x1D AGC control AGC控制寄存器
RETIA 0x87 ;//0X1E WOREVT1 High Byte Event0 Timeout
RETIA 0x6B ;//0X1F WOREVT0 Low Byte Event0 Timeout
RETIA 0xF8 ;//0X20 WORCTRL Wake On Radio Control
RETIA 0x56 ;//0X21 Front end RX configuration. 前端rx配置
RETIA 0x10 ;//0X22 Front end RX configuration 前端TX配置,调整当前TX LO 缓冲(输入到PA)
RETIA 0xA9 ;//0x23 Frequency synthesizer cal 频率合成器校准配置和结果寄存器
RETIA 0x0A ;//0x24 Frequency synthesizer cal. FSCAL3
CHIP_CURR_CAL_EN FSCAL3
RETIA 0x00 ;//0X25 Frequency synthesizer calibration.
RETIA 0x11 ;//0X26 Frequency synthesizer calibration.(38)
;=========================================================
; 初始化德州仪器CC2500
//========================================================
INSTALL_CC2500:
/*让CC2500进入待机模式
*/
MOVIA CC2500_SIDLE ;让CC2500先工作起来,命令滤波
CALL HAND_SPI_WRITE
BSR CSN ;关闭芯片的选择
CALL DELAY100US ;状态延时
BCR CSN ;开启芯片的选择
CALL DELAY100US ;状态延时
BSR CSN
CALL DELAY100US ;延时200微秒
CALL DELAY100US
BCR CSN ;选择CC2500
BTRSC SO //等待CC2500的电压调制器稳定 GOTO $-1
MOVIA CC2500_SRES //重启CC2500芯片
CALL HAND_SPI_WRITE
BSR CSN
BCR SCLK //关闭CC2500的选择
BCR SI
/*
设置CC2500的寄存器
*/
MOVIA 0X20 ;数据个数32
MOVAR COUNTER1
MOVIA 0X07
MOVAR TEMP1 ;地址的初始值
REGISTER_LOOP:
BCR CSN ;选择CC2500芯片
BTRSC SO ;等待SO腿输出低电平
GOTO $-1
小球归位BCR SCLK ;数据的时钟线变低,锁住数据线上的电平
MOVR TEMP1, A
ANDIA 0X7F ;写第一个数据,第7位必须为低电平表示写(时序图上是这样描述的)
MOVAR WRITE_VALUE ;写寄存器的初始值
CALL SPI_WRITE
MOVR TEMP1, A
ADDIA 0XF9 ;相当A-07H
CALL RF_REGISTER_TAB ;查表指令
MOVAR WRITE_VALUE ;写进寄存器的的数据
CALL SPI_WRITE
INCR TEMP1, R ;寄存器的地址加一
BCR SI
BSR CSN ;由于每次都是突发访问,根据芯片的说明,突发位的访问不管是读还是写,读必须通过设置CSN为高来终止芯片的选择
DECRSZ COUNTER1, R
GOTO REGISTER_LOOP ;循环写入32个数据
/*
设置CC2500的IOCFG2
*/
ca3358
MOVIA 0X00 //寄存器0
MOVAR TEMP1
MOVIA 0X29 //数据0B
超滤膜壳
MOVAR TEMP2
CALL DOUBLE_DATA
NOP
NOP //空指令
/*
设置CC2500的IOCFG0 非温度检测,不反转,当同步词汇被送出/收到时声明,在数据包末端时反声明。对RX,当可选地址检测失败
或RX FIFO 溢出时,引脚被反声明。若TX FIFO 下溢,这个引脚将同样被反声明*/
//
MOVIA 0X02 //寄存器1
MOVAR TEMP1
灭苍蝇器MOVIA 0X06 //数据06
MOVAR TEMP2
CALL DOUBLE_DATA
NOP
NOP
/*
设置CC2500的TX字节
*/
MOVIA 0X03 //寄存器3
MOVAR TEMP1
MOVIA 0X07 //数据07
MOVAR TEMP2
CALL DOUBLE_DATA
NOP
NOP
/*
设置CC2500的长度 Packet length.
*/
MOVIA 0X06 //寄存器6
MOVAR TEMP1
MOVIA 0XFF //数据3D
MOVAR TEMP2
CALL DOUBLE_DATA
NOP
NOP
/*
设置CC2500的发射功率
*/
PATABLE_LOOP:
MOVIA 0X3E //寄存器3E PATABLE
MOVAR TEMP1
MOVIA 0XFF
MOVAR TEMP2
CALL DOUBLE_DATA1
NOP
NOP
/*
设置CC2500的命令
*/
MOVIA CC2500_SCAL ;启动CC2500
CALL HAND_SPI_WRITE
MOVIA CC2500_SFRX
CALL HAND_SPI_WRITE //清零接收FIFO寄存器
MOVIA CC2500_SFTX
CALL HAND_SPI_WRITE //清零发送FIFO寄存器
CALL DELAY10MS
CALL DELAY10MS
//亮LED灯表示连接CC2500成功等待发射数据出去
READ_M_LOOP:
MOVIA 0X30
MOVAR WRITE_VALUE
CALL READ_REGISTER
MOVR READ_VALUE, A //读芯片的状态判断是否为80H,若为这个数据则表示芯片连接成功
XORIA 0X80
BTRSS Z
GOTO READ_M_LOOP
MOVIA CC2500_SIDLE //让CC2500进入空闲状态
CALL HAND_SPI_WRITE
BCR LED_PIN //芯片握手成功点亮LED灯
RETURN