搜索
bottom↓
回复: 11

CC2500接收程序求助

[复制链接]

出0入0汤圆

发表于 2009-12-8 11:14:47 | 显示全部楼层 |阅读模式
我现在用是的MSP430+CC2500。
就是利尔达msp430FG4619自带的wireless那个程序。
程序是由开关控制灯亮/灭。每次只发送了buffer[2]一个字节;
我将发送缓冲改为
char txBuffer[] = {0x08,0x01,0x02,0x03,0x04,0x05,0x06,0x07};
char rxBuffer[];
查看寄存器时,U1TXBUF是没有问题的,发送的U1TXBUF分别是0x08,0x01,0x02,0x03,0x04,0x05,0x06,0x07
但是在查看U1RXBUF时,就出现问题了,分别是0x02,0x03,0x04,0x05,0x06,0x07,oxff,0x18。最后接收的两个数还经常变。按理说接受的U1RXBUF中的数应该是0x02,0x03,0x04,0x05,0x06,0x07,可是现在接收是不对的。
----------------------------------------------------------------------------------
void TI_CC_SPIReadBurstReg(char addr, char *buffer, char count)
{
  unsigned int i;

  TI_CC_CSn_PxOUT &= ~TI_CC_CSn_PIN;        // /CS enable
  while (TI_CC_SPI_USART0_PxIN&TI_CC_SPI_USART0_SOMI);// Wait for CCxxxx ready
  IFG1 &= ~URXIFG0;                         // Clear flag
  U0TXBUF = (addr | TI_CCxxx0_READ_BURST);  // Send address
  while (!(IFG1&UTXIFG0));                  // Wait for TXBUF ready
  U0TXBUF = 0;                              // Dummy write to read 1st data byte
  // Addr byte is now being TX'ed, with dummy byte to follow immediately after
  while (!(IFG1&URXIFG0));                  // Wait for end of addr byte TX
  IFG1 &= ~URXIFG0;                         // Clear flag
  while (!(IFG1&URXIFG0));                  // Wait for end of 1st data byte TX
  // First data byte now in RXBUF
  for (i = 0; i < (count-1); i++)
  {
    U0TXBUF = 0;                            //Initiate next data RX, meanwhile..
    buffer = U0RXBUF;                    // Store data from last data RX
    while (!(IFG1&URXIFG0));                // Wait for end of data RX
  }
  buffer[count-1] = U0RXBUF;                // Store last RX byte in buffer
  TI_CC_CSn_PxOUT |= TI_CC_CSn_PIN;         // /CS disable
}
----------------------------------------------------------------------------
char RFReceivePacket(char *rxBuffer, char *length)
{
  char status[2];
  char pktLen;
  
  if ((TI_CC_SPIReadStatus(TI_CCxxx0_RXBYTES) & TI_CCxxx0_NUM_RXBYTES))
  {
   
    pktLen = TI_CC_SPIReadReg(TI_CCxxx0_RXFIFO);
   
     
    TI_CC_SPIReadBurstReg(TI_CCxxx0_RXFIFO, rxBuffer, pktLen); // Pull data
    *length = pktLen;                       // Return the actual size

    TI_CC_SPIReadBurstReg(TI_CCxxx0_RXFIFO, status, 2);

    return (char)(status[TI_CCxxx0_LQI_RX]&TI_CCxxx0_CRC_OK);
  }
  else
    return 0;                               // Error
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2009-12-8 12:33:50 | 显示全部楼层
楼主看来根本没有看过cc2500的手册,rxfifo读出来的最后2字节是硬件添加的状态位,指示接收信号强度RSSI和数据包CRC状态的.

出0入0汤圆

 楼主| 发表于 2009-12-8 13:37:22 | 显示全部楼层
那么就是说这个接收是没有问题的了?

出0入0汤圆

 楼主| 发表于 2009-12-8 14:14:24 | 显示全部楼层
还有一个问题就是一次最多可以传送多少个数?
char txBuffer[] = {0x08,0x01,0x02,0x03,0x04,0x05,0x06,0x07。。。};可以定义到多长?

出0入0汤圆

发表于 2010-1-29 23:31:02 | 显示全部楼层
数据包最大只能是256byte

出0入0汤圆

发表于 2010-2-2 03:28:53 | 显示全部楼层
仔细看看手册,在封包发送的模式下可以最大发送256字节的包,但是软件要做相关的处理.因为2500内部的fifo只有64字节.不能一次性发送256字节数据给2500,而是不断检查fifo状态然后填充.这里2500和1100都有个fifo指针和spi通信的硬件bug,不能准确报告当前fifo的状况.所以最好设置GPx引脚为fifo下限中断,通过中断来控制填充.接收大于62字节的包也是一样,要设置包头到达中断和fifo上限中断来接收.过程相对比较繁琐.ti提供了相关的application note来介绍接收模式,楼主可以多看看.

出0入0汤圆

发表于 2010-6-20 01:22:48 | 显示全部楼层
MARK

出0入0汤圆

发表于 2010-9-13 13:48:00 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-7-15 09:58:48 | 显示全部楼层
楼主遇到的问题还好。不知你的发送模块GDO0脚在发送的时候有没有一个上升脉冲。我每次发送时总是产生一个上升脉冲,本应该是接收端GDO0产生上升脉冲,搞得郁闷!

出0入0汤圆

发表于 2011-9-2 10:57:02 | 显示全部楼层
GDO0怎么配置的,发送和接收都会产生脉冲的,指示发送、接收完成。数据手册写的很明确

出0入0汤圆

发表于 2011-11-9 22:53:10 | 显示全部楼层
MARK

出0入0汤圆

发表于 2013-4-11 23:00:24 | 显示全部楼层
      mark
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 03:23

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表