venusbloom 发表于 2009-12-8 11:14:47

CC2500接收程序求助

我现在用是的MSP430+CC2500。
就是利尔达msp430FG4619自带的wireless那个程序。
程序是由开关控制灯亮/灭。每次只发送了buffer一个字节;
我将发送缓冲改为
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 = 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;
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_CRC_OK);
}
else
    return 0;                               // Error
}

awakening 发表于 2009-12-8 12:33:50

楼主看来根本没有看过cc2500的手册,rxfifo读出来的最后2字节是硬件添加的状态位,指示接收信号强度RSSI和数据包CRC状态的.

venusbloom 发表于 2009-12-8 13:37:22

那么就是说这个接收是没有问题的了?

venusbloom 发表于 2009-12-8 14:14:24

还有一个问题就是一次最多可以传送多少个数?
char txBuffer[] = {0x08,0x01,0x02,0x03,0x04,0x05,0x06,0x07。。。};可以定义到多长?

maomao2126 发表于 2010-1-29 23:31:02

数据包最大只能是256byte

awakening 发表于 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来介绍接收模式,楼主可以多看看.

stepby 发表于 2010-6-20 01:22:48

MARK

xyzxyz 发表于 2010-9-13 13:48:00

mark

lijiakeyi 发表于 2011-7-15 09:58:48

楼主遇到的问题还好。不知你的发送模块GDO0脚在发送的时候有没有一个上升脉冲。我每次发送时总是产生一个上升脉冲,本应该是接收端GDO0产生上升脉冲,搞得郁闷!

kanerier 发表于 2011-9-2 10:57:02

GDO0怎么配置的,发送和接收都会产生脉冲的,指示发送、接收完成。数据手册写的很明确

lllmcu 发表于 2011-11-9 22:53:10

MARK

eward2021 发表于 2013-4-11 23:00:24

      mark
页: [1]
查看完整版本: CC2500接收程序求助