This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/BOOSTXL-CC1125:CC1125接收

Guru**** 2536110 points
Other Parts Discussed in Thread: CC1125

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/640334/ccs-boostxl-cc1125-cc1125-reception

部件号:BOOSTXL-CC1125
主题:CC1125中讨论的其他部件

工具/软件:Code Composer Studio

命令(SRX);

同时(1)


READ_CH1=read16bitreg(MARCSTATE);
readburst8bitreg (RXFIFO,数据);
READ_CH2=read16bitreg(MARC_STATUS1);

}

void readburst8bitreg(unsigned char addr,unsigned char *data)


内部温度,I,len;
temp =地址和0x3F;                                      //写入
P1OUT &=~BIT5;                                        //启用从属设备(CS至Low)
UCB0TXBUF = temp | 0xC0;                              //用于访问TXFIFO的Send命令
while (!(USI_SPI_UCTXIFG));                             //等待TX缓冲区就绪
__DELAY周期(20);
同时(!(USI_SPI_UCRXIFG));
__DELAY周期(20);
LEN = UCB0RXBUF;
对于(i=0;i<len;i++)

同时(!(USI_SPI_UCRXIFG));                               //等待TX缓冲区就绪
__DELAY周期(20);
Data[I]= UCB0RXBUF;
__DELAY周期(10);
}
//等待TX缓冲区就绪
期间(UCB0STAT和UCBUSY);                               //等待TX完成
P1OUT || BIT5;                                            //禁用从属设备(CS到High)
}

有人能帮我解决代码中的错误吗。

我正在尝试在由MSP430控制的CC1125中接收数据。 数据通过另一台CC1125使用 Smart RF Studio进行发送

发射器侧正常。

可能是什么问题?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    不确定我是否理解代码的这一部分:

    while (1)
    {
    
    
    READ_CH1=read16bitreg(MARCSTATE);
    readburst8bitreg(RXFIFO,&data);
    READ_CH2=read16bitreg(MARC_STATUS1);}
    
    

    您是否确实连续读取RX FIFO?

    为什么使用轮询而不是基于中断的接收?   

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我正在读取MARC状态寄存器和MARC状态寄存器以确保接收。数据已接收...但我无法从Rx FIFO获取。
    READ_CH1=read16bitreg(MARCSTATE);
    READ_CH2=read16bitreg(MARC_STATUS1);

    我只是尝试投票来测试接收情况。 如何将代码更改为中断驱动代码?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    有关 示例代码,请参阅processors.wiki.ti.com/.../Perf_value_line_easylink。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    void readburst8bitreg(unsigned char addr,unsigned char *data)

          int i;

          P1OUT &=~BIT5;                                      //启用从属设备(CS到低)

          UCB0TXBUF = 0xFF;                            //发送命令

          while (!(USI_SPI_UCTXIFG));//          等待TX缓冲区就绪

          __DELAY周期(100万);

          用于(i=0;i<22;i++)

          {

                 while (!(USI_SPI_UCRXIFG));//          等待TX缓冲区就绪

                 __DELAY周期(20);

                 Data[I]= UCB0RXBUF;

          }

          //等待TX缓冲区就绪

          while (UCB0STAT & UCBUSY);                   //等待TX完成

          P1OUT || BIT5;                                      //禁用从属设备(CS至High)

    }

     

    内部主(无效)

     

     

          WDTCTL = WDTPW | WDTHOLD;                //停止看门狗计时器

     

          INT I = 0x00;

     

          pinconfig();

          clockconfig();

          spiconfig ();

     

          P1OUT |= BIT0;

          命令(SRES);

          P1OUT &=~BIT0;

          __DELAY周期(1.6万);

          init_cc1125();

          命令(SRX);

     

          同时(1)

          {

                  rxbytes = read16bitreg (NUM_RXBYTES);

                  marcstate = read16bitreg(marcsstate);

                  marcstatus=read16bitreg(marc_Status1);

                  readburst8bitreg (RXFIFO,&data);

          }

    }

    此代码中的错误是什么? 我正在使用轮询方法读取Rx FIFO。UCBORXBUF始终返回0x10值。 什么是错误?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我尝试使用直接FIFO访问读取FIFO

    使用commad 0xFE。 我在那里得到了接收到的数据...

    为什么它不能与标准FIFO访问一起使用?

    char readdirectFIFO (无符号char addr)
    
    {
    
    char read_ch;
    
    P1OUT &=~BIT5; //启用从属设备(CS至Low)
    
    UCB0TXBUF = 0xFE; //发送命令
    
    while (!(USI_SPI_UCTXIFG)); //等待TX缓冲区就绪
    
    UCB0TXBUF =地址; //扩展地址
    
    while (!(USI_SPI_UCTXIFG)); //等待TX缓冲区就绪
    
    __DELAY周期(20);
    
    UCB0TXBUF = 0x00; //发送刮水器级别
    
    while (!(USI_SPI_UCTXIFG)); //等待TX缓冲区就绪
    
    期间(UCB0STAT和UCBUSY); //等待TX完成
    
    同时(!(USI_SPI_UCRXIFG)); //收到USI_A0 RX?
    
    read_ch = UCB0RXBUF; //存储收到的数据
    
    P1OUT || BIT5; //禁用从属设备(CS到High)
    
    返回read_ch;
    
    }
    
    
    
    int main(void){
    
    
    
    WDTCTL = WDTPW | WDTHOLD; //停止看门狗计时器
    
    INT I = 0x80;
    
    pinconfig();
    
    clockconfig();
    
    spiconfig ();
    
    
    
    P1OUT |= BIT0;
    
    命令(SRES);
    
    P1OUT &=~BIT0;
    
    __DELAY周期(1.6万);
    
    init_cc1125();
    
    命令(SRX);
    
    同时(1)
    
    {
    
    对于(i=0x80;i<=0xFF;i++)
    
    {
    
    read_ch5 = readdirectFIFO (i);
    
    }
    
    }
    
    } 
    char readdirectFIFO (无符号char addr)
    
    {
    
    char read_ch;
    
    P1OUT &=~BIT5; //启用从属设备(CS至Low)
    
    UCB0TXBUF = 0xFE; //发送命令
    
    while (!(USI_SPI_UCTXIFG)); //等待TX缓冲区就绪
    
    UCB0TXBUF =地址; //扩展地址
    
    while (!(USI_SPI_UCTXIFG)); //等待TX缓冲区就绪
    
    __DELAY周期(20);
    
    UCB0TXBUF = 0x00; //发送刮水器级别
    
    while (!(USI_SPI_UCTXIFG)); //等待TX缓冲区就绪
    
    期间(UCB0STAT和UCBUSY); //等待TX完成
    
    同时(!(USI_SPI_UCRXIFG)); //收到USI_A0 RX?
    
    read_ch = UCB0RXBUF; //存储收到的数据
    
    P1OUT || BIT5; //禁用从属设备(CS到High)
    
    返回read_ch;
    
    }
    
    
    
    int main(void){
    
    
    
    WDTCTL = WDTPW | WDTHOLD; //停止看门狗计时器
    
    INT I = 0x80;
    
    pinconfig();
    
    clockconfig();
    
    spiconfig ();
    
    
    
    P1OUT |= BIT0;
    
    命令(SRES);
    
    P1OUT &=~BIT0;
    
    __DELAY周期(1.6万);
    
    init_cc1125();
    
    命令(SRX);
    
    同时(1)
    
    {
    
    对于(i=0x80;i<=0xFF;i++)
    
    {
    
    read_ch5 = readdirectFIFO (i);
    
    }
    
    }
    
    } 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如何确保代码中不会尝试读取空FIFO?

    您是否确定脉冲位等正确? 监控SPI接口并将其与示例代码I链接到的命令进行比较。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    unsigned char data[128];
    
    void readburst8bitreg(unsigned char addr,unsigned char *data)
    {
    	int I;
    	P1OUT &=~BIT5;						//启用从属设备(CS到Low)
    	UCB0TXBUF = 0xFF;					//
    	发送命令时(!(USSCI_SCI_SCI_UCTXIFG));		//等待U20
    	个缓冲周期
    	
    	;<I_I_UQ_I=10;缓冲器<I=10;<I=10;缓冲
    				器<)
    		
    		Data[I]= UCB0RXBUF;
    	}//
    	等待TX缓冲区处于就绪
    	状态(UCB0STAT & UCBUSY);			//等待TX完成
    	P1OUT |= BIT5;						//禁用从属设备(CS到高)
    }
    
    int main(void)
    {
    
    	WDTCTL = WDTPW | WDTHOLD; //停止看门狗计时
    
    	器int i = 0x80;
    
    	pinconfig();
    	clockconfig();
    	spiconfig ();
    
    	P1OUT |= BIT0;
    	commandstrobe(SRES);
    	P1OUT &=~BIT0;
    	__delay_cycles(1.6万);
    	init_cc1125();
    	commandstrobe (SRS);
    
    	while (1)
    	{
    		readburst8bitreg(RXFIFO,&data)}
    
    	
    } 

    FIFO不为空。 我正在使用直接FIFO访问功能获取接收到的数据。 是的,脉冲位正确。

     CC1125中的数据RXFIFO如何 传输到MSP430的RX缓冲区?
    RX缓冲区是否会自动更新数据?