打印
[无线通信]

新手求助:cc2500配置完, GDO0出现137khz脉冲波,读取寄存器值都为0,怎么回事?

[复制链接]
2284|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
qq752494297|  楼主 | 2015-3-21 16:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
qq752494297|  楼主 | 2015-3-21 16:31 | 只看该作者
本来网上找的两个51程序收发挺正常的,后来把发射端改成富士通单片机了。就不行了。。。

使用特权

评论回复
板凳
qq752494297|  楼主 | 2015-3-21 16:39 | 只看该作者
本帖最后由 qq752494297 于 2015-3-21 16:45 编辑

void c25_TX_Init(void)
{
    c25_SPI_W_Reg_Single(c25_RA_IOCFG0, c25_CR_IOCFGx_SYNC_WORD);                                    
                                          // GDO0:发送/接收到同步字时置位,并在数据包的末尾取消置位
    c25_SPI_W_Reg_Single(c25_RA_FIFOTHR,    c25_CR_FIFOTHR_TX_1_RX_64);             // 设置TX_FIFO和RX_FIFO阀值(TX:1,RX:64)
    c25_SPI_W_Reg_Single(c25_RA_SYNC1,      c25_CR_SYNC1);                          // 同步字高位(默认0xD3=11010011)
    c25_SPI_W_Reg_Single(c25_RA_SYNC0,      c25_CR_SYNC0);                          // 同步字低位
    c25_SPI_W_Reg_Single(c25_RA_PKTLEN,     c25_DATA_WIDTH);                        // 固定长度数据包时为数据包长度;可变长度数据包时为允许的最大数据包长度
    c25_SPI_W_Reg_Single(c25_RA_PKTCTRL1,   c25_CR_PKTCTRL1_PQT                     // 前导质量评估门限(默认值0)(等于0时同步字总能被接收)
                                          | c25_CR_PKTCTRL1_CRC_AUTOFLUSH_EN        // 当接收数据CRC校验失败时,自动清空RX_FIFO
                                          | c25_CR_PKTCTRL1_APPEND_STATUS_DI        // 不在有效负载上添加状态字
                                          | c25_CR_PKTCTRL1_ADR_CHK_DI);            // 不检查地址
    c25_SPI_W_Reg_Single(c25_RA_PKTCTRL0,   c25_CR_PKTCTRL0_WHITE_DATA_EN           // 开启数据白化
                                          | c25_CR_PKTCTRL0_NORMAL_MODE             // 普通模式,使用FIFO
                                          | c25_CR_PKTCTRL0_CRC_EN                  // 开启CRC校验
                                          | c25_CR_PKTCTRL0_PTKLEN_FIXED);          // 固定数据包长度模式,在PKTLEN寄存器中配置长度数据
    c25_SPI_W_Reg_Single(c25_RA_ADDR,       c25_CR_ADDR);                           // 数据包过滤时使用的地址.可选广播地址为0x00和0xFF
    c25_SPI_W_Reg_Single(c25_RA_FSCTRL1,    c25_CR_FSCTRL1_2K4BPS);                 // 建议使用SmartRF Studio进行计算
    c25_SPI_W_Reg_Single(c25_RA_FSCTRL0,    c25_CR_FSCTRL0);                        // 建议使用SmartRF Studio进行计算
    c25_SPI_W_Reg_Single(c25_RA_FREQ2,      c25_CR_FREQ2_2400MHz);                  // 基频为2400MHz时的FREQ2寄存器值
    c25_SPI_W_Reg_Single(c25_RA_FREQ1,      c25_CR_FREQ1_2400MHz);                  // 基频为2400MHz时的FREQ1寄存器值
    c25_SPI_W_Reg_Single(c25_RA_FREQ0,      c25_CR_FREQ0_2400MHz);                  // 基频为2400MHz时的FREQ0寄存器值
    c25_SPI_W_Reg_Single(c25_RA_MDMCFG4,    c25_CR_MDMCFG4_2K4BPS);                 // 建议使用SmartRF Studio进行计算
    c25_SPI_W_Reg_Single(c25_RA_MDMCFG3,    c25_CR_MDMCFG3_2K4BPS);                 // 建议使用SmartRF Studio进行计算
    c25_SPI_W_Reg_Single(c25_RA_MDMCFG2,    c25_CR_MDMCFG2_DEM_DCFILT_OFF_EN        // 在解调前禁用数字DC阻断滤波器,使能(更佳的灵敏度)
                                          | c25_CR_MDMCFG2_MOD_FORMAT_2FSK          // 2FSK
                                          | c25_CR_MDMCFG2_MANCHESTER_DI            // 禁用曼切斯特编码/解码
                                          | c25_CR_MDMCFG2_30_32_B_SYNC);           // 检测30/32同步字bit
    c25_SPI_W_Reg_Single(c25_RA_MDMCFG1,    c25_CR_MDMCFG1_FEC_DI                   // 禁用交错向前纠错
                                          | c25_CR_MDMCFG1_NUM_PREAMBLE_4BYTE       // 最小前导4Byte
                                          | c25_CR_MDMCFG1_CHANSPC_E);              // 通道间隔的2bit指数
    c25_SPI_W_Reg_Single(c25_RA_MDMCFG0,    c25_CR_MDMCFG0_CHANSPC_M);              // 通道间隔的8bit尾数
    c25_SPI_W_Reg_Single(c25_RA_DEVIANT,    c25_CR_DEVIANT_2K4BPS);                 // 建议使用SmartRF Studio进行计算
    c25_SPI_W_Reg_Single(c25_RA_MCSM2,      c25_CR_MCSM2_RX_TIME_RSSI_DI            // 不使用RSSI测量执行RX终止
                                          | c25_CR_MCSM2_RX_TIME_QUAL_SYNC          // 在RX_TIME定时器超时时,芯片检查是否找到同步字
                                          | c25_CR_MCSM2_RX_TIME);                  // 在WOR模式和标准RX运行时,RX中的同步字搜索时限
    c25_SPI_W_Reg_Single(c25_RA_MCSM1,      c25_CR_MCSM1_CCA_MODE_RB_UCRPKT         // 如果RSSI在阀值之下且除当前接收数据包外,清空通道指示
                                          | c25_CR_MCSM1_RXOFF_MODE_RX              // 数据包接收完成后保持RX状态
                                          | c25_CR_MCSM1_TXOFF_MODE_RX);            // 数据包发送完成后进入RX状态
    c25_SPI_W_Reg_Single(c25_RA_MCSM0,      c25_CR_MCSM0_FS_AUTOCAL_IDLE_RTX        // 从IDLE转到RX,TX,FSTXON时进行自动校准
                                          | c25_CR_MCSM0_PO_TIMEOUT_EC_64           // 终止计数次数64
                                          | c25_CR_MCSM0_PIN_CTRL_DI                // 禁用由引脚直接进行的无线状态控制
                                          | c25_CR_MCSM0_XOSC_FORCE_ON_DI);         // XOSC在SLEEP状态下关闭
    c25_SPI_W_Reg_Single(c25_RA_FOCCFG,     c25_CR_FOCCFG_2K4BPS);                  // 建议使用SmartRF Studio进行计算
    c25_SPI_W_Reg_Single(c25_RA_BSCFG,      c25_CR_BSCFG_2K4BPS);                   // 建议使用SmartRF Studio进行计算
    c25_SPI_W_Reg_Single(c25_RA_AGCCTRL2,   c25_CR_AGCCTRL2_2K4BPS);                // 建议使用SmartRF Studio进行计算
    c25_SPI_W_Reg_Single(c25_RA_AGCCTRL1,   c25_CR_AGCCTRL1_2K4BPS);                // 建议使用SmartRF Studio进行计算
    c25_SPI_W_Reg_Single(c25_RA_AGCCTRL0,   c25_CR_AGCCTRL0_2K4BPS);                // 建议使用SmartRF Studio进行计算
    c25_SPI_W_Reg_Single(c25_RA_WOREVT1,    c25_CR_WOREVT1_EVENT0_HBYTE);           // 事件0超时时间高位
    c25_SPI_W_Reg_Single(c25_RA_WOREVT0,    c25_CR_WOREVT0_EVENT0_LBYTE);           // 事件0超时时间低位
    c25_SPI_W_Reg_Single(c25_RA_WORCTRL,    c25_CR_WORCTRL_RC_PD_EN                 // 向RC振荡器发送掉电信号
                                          | c25_CR_WORCTRL_EVENT1_48                // 约1.333~1.385ms
                                          | c25_CR_WORCTRL_RC_CAL_EN                // 开启RC振荡器校准
                                          | c25_CR_WORCTRL_WOR_RES_1P);             // 精度1周期,最大时限1.8~1.9秒
    c25_SPI_W_Reg_Single(c25_RA_FREND1,     c25_CR_FREND1_2K4BPS);                  // 建议使用SmartRF Studio进行计算
    c25_SPI_W_Reg_Single(c25_RA_FREND0,     c25_CR_FREND0_LODIV_BUF_CURRENT_TX      // 调节当前TX LO缓冲器(PA的输入)
                                          | c25_CR_FREND0_PA_POWER_0);              // 选择PA功率设置
    c25_SPI_W_Reg_Single(c25_RA_FSCAL3,     c25_CR_FSCAL3_2K4BPS);                  // 建议使用SmartRF Studio进行计算
    c25_SPI_W_Reg_Single(c25_RA_FSCAL2,     c25_CR_FSCAL2);                         // 建议使用SmartRF Studio进行计算
    c25_SPI_W_Reg_Single(c25_RA_FSCAL1,     c25_CR_FSCAL1_2K4BPS);                  // 建议使用SmartRF Studio进行计算
    c25_SPI_W_Reg_Single(c25_RA_FSCAL0,     c25_CR_FSCAL0_2K4BPS);                  // 建议使用SmartRF Studio进行计算
    c25_SPI_W_Reg_Single(c25_RA_RCCTRL1,    c25_CR_RCCTRL1);                        // 建议使用SmartRF Studio进行计算
    c25_SPI_W_Reg_Single(c25_RA_RCCTRL0,    c25_CR_RCCTRL0);                        // 建议使用SmartRF Studio进行计算
    c25_SPI_W_Reg_Single(c25_RA_PATABLE,    c25_PS_PATABLE_1dBm);                   // 写入PATABLE(+1.5dBm,21.4mA)
}

使用特权

评论回复
地板
qq752494297|  楼主 | 2015-3-21 16:41 | 只看该作者
void c25_Send_Packet(uint8 *p)
{
    c25_SPI_W_Cmd_Strobes(c25_CS_SIDLE);                                            // 进入IDLE空闲模式
    c25_SPI_W_Cmd_Strobes(c25_CS_SFTX);                                             // 清空TX_FIFO
    c25_SPI_W_Reg_Burst(c25_RA_TXFIFO, c25_DATA_WIDTH, p);                          // 将数据写入TX_FIFO寄存器
    c25_SPI_W_Cmd_Strobes(c25_CS_STX);                                              // 开启TX
    while(c25_Pin_GDO2==0);                                                         // 等待发送结束
    while(c25_Pin_GDO2==1);                                                         // 等待发送结束
}

使用特权

评论回复
5
qq752494297|  楼主 | 2015-3-21 16:49 | 只看该作者
发射端的GDO0一直脉冲波,用读函数尝试读取发射端cc2500寄存器值,都是0,何解?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

6

帖子

0

粉丝