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.

[参考译文] CC1201:意外的零数据

Guru**** 670100 points
Other Parts Discussed in Thread: CC1201, CC1200DK, CC1200
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/818135/cc1201-unexpected-zero-data

器件型号:CC1201
主题中讨论的其他器件: CC1200DKCC1200

大家好、

我的客户获得 了 CC1200DK 电路板、并根据我们的参考设计设计设计了自己的 CC1201电路板。 使用相同的配置参数、他得到了不同的结果:

使用他们自己的 CC1201板的 Tx&RX

如果设置 PKT_LEN= 8、 则在接收时会出现意外的数据包丢失;可以通过设置 PKT_LEN= 9来解决问题。

2.TX 使用自己的 CC1201板、RX 使用 TI CC1200板。

仍然需要设置 PKT_LEN= 9以获取正确的数据、但会在标头中添加额外的0x00。

使用 TI CC1200板的 TX、使用 自己的 CC1201板的 RX。

 将 发生意外的数据包丢失、PER 约为10%。

 cc1200的配置:

静态常量寄存器 Setting_t preferredSettings[]=  

CC1200_IOCFG2、0x06}、
CC1200_SYNC_CFG1、0xA8}、
CC1200_deviation_M、0x47}、
CC1200_MODCFG_DEV_E、0x2F}、
CC1200_DCFILT_CFG、0x1E}、
CC1200_PREAMING_CFG0、0x8A}、
CC1200_IQIC、0x00}、
CC1200_CHAN_BW、0x01}、
CC1200_MDMCFG1、0x42}、
CC1200_MDMCFG0、0x05}、
CC1200_symbol_Rate2、0xC9}、
CC1200_symbol_rate1、0x99}、
CC1200_symbol_RATE0、0x99}、
CC1200_AGC_REF、0x2F}、
CC1200_AGC_CS_THR、0xf8}、
CC1200_AGC_CFG2、0x60}、
CC1200_AGC_CFG1、0x12}、
CC1200_AGC_CFG0、0x84}、
CC1200_FIFO_CFG、0x00}、
CC1200_FS_CFG、0x12}、
CC1200_PKT_CFG2、0x00}、
CC1200_PKT_CFG1、0x00}、
CC1200_PKT_LEN、0x09}、
CC1200_FREQOFF_CFG、0x23}、
CC1200_MDMCFG2、0x00}、
CC1200_FREQ2、0x54}、
CC1200_IF_ADC1、0xEE}、
CC1200_IF_ADC0、0x10}、
CC1200_FS_DIG1、0x04}、
CC1200_FS_DIG0、0xA3}、
CC1200_FS_CAL1、0x40}、
CC1200_FS_CAL0、0x0E}、
CC1200_FS_DIVTWO、0x03}、
CC1200_FS_DSM0、0x33}、
CC1200_FS_DVC1、0xF7}、
CC1200_FS_DVC0、0x0F}、
CC1200_FS_PFD、0x00}、
CC1200_FS_PRE、0x6E}、
CC1200_FS_REG_DIV_CML、0x1C}、
CC1200_FS_SPARE、0xAC}、
CC1200_FS_VCO0、0xB5}、
CC1200_IFAMP、0x0D}、
CC1200_XOSC5、0x0E}、
CC1200_XOSC1、0x03}、
CC1200_PARTMUMBER、0x20}、
CC1200_PARTVERSION、0x11}、
CC1200_MODEM_STATUS1、0x10}、
};

CC1201的配置:

静态常量寄存器 Setting_t preferredSettings[]=  

{CC120X_IOCFG2、0x06}、  
{CC120X_SYNC_CFG1、0xA8}、
{CC120X_EXTERING_M、0x47}、
{CC120X_MODCFG_DEV_E、0x2F}、
{CC120X_DCFILT_CFG、0x1E}、
{CC120X_PREAMING_CFG0、0x8A}、
{CC120X_IQIC、0x00}、
{CC120X_CHAN_BW、0x01}、
{CC120X_MDMCFG1、0x42}、
{CC120X_MDMCFG0、0x05}、
{CC120X_symbol_Rate2、0xC9}、
{CC120X_symbol_rate1、0x99}、
{CC120X_symbol_RATE0、0x99}、
{CC120X_AGC_REF、0x2F}、
{CC120X_AGC_CS_THR、0xf8}、
{CC120X_AGC_CFG2、0x60}、
{CC120X_AGC_CFG1、0x12}、
{CC120X_AGC_CFG0、0x84}、
{CC120X_FIFO_CFG、0x40}、
{CC120X_FS_CFG、0x12}、
{CC120X_PKT_CFG2、0x00}、
{CC120X_PKT_CFG1、0x00}、
{CC120X_PKT_CFG0、0x00}、//固定长度
{CC120X_PKT_LEN、0x09}、//数据包长度
{CC120X_FREQOFF_CFG、0x23}、
{CC120X_MDMCFG2、0x00}、
{CC120X_FREQ2、0x54}、//840M
{CC120X_IF_ADC1、0xEE}、
{CC120X_IF_ADC0、0x10}、
{CC120X_FS_DIG1、0x04}、
{CC120X_FS_DIG0、0xA3}、
{CC120X_FS_CAL1、0x40}、
{CC120X_FS_CAL0、0x0E}、
{CC120X_FS_DIVTWO、0x03}、
{CC120X_FS_DSM0、0x33}、
{CC120X_FS_DVC1、0xF7}、
{CC120X_FS_DVC0、0x0F}、
{CC120X_FS_PFD、0x00}、
{CC120X_FS_PRE、0x6E}、
{CC120X_FS_REG_DIV_CML、0x1C}、
{CC120X_FS_SPARE、0xAC}、
{CC120X_FS_VCO0、0xB5}、
{CC120X_IFAMP、0x0D}、
{CC120X_XOSC5、0x0E}、
{CC120X_XOSC1、0x03}、

问题:1.零字节来自哪里?  

         2.为什么他们的电路板会出现丢包、这是关于硬件设计吗?

  我们将感谢您的任何帮助。

此致、
维基

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

    数据包长度0x8与0x9:它们实际发送什么? 它们在 TX FIFO 中放置了什么? 他们会收到什么?  

     为什么 CHN_BW 设置为0x01、如果使用零、为什么使用零?  

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

    感谢您的回复。

     

    1. Pkt_LEN=9测试如下:

    1)。 TX:我们的1201、

     Pkt_LEN=9;数据写入写入写入写入 FIFO、如下所示:

    0x000x010x020x030x040x050x060x07

    0x010x010x020x030x040x050x060x07

    0x020x010x020x030x040x050x060x07

    0x030x010x020x030x040x050x060x07

    0x040x010x020x030x040x050x060x07

     

    2) RX:TI 1200DK

    Pkt_LEN=9;从读取 FIFO 读取的数据如下:

    11:45:25.337 | 00 01 02 03 04 05 06 07 |   0

    11:45:25.391 | 00 01 02 03 04 05 06 07 |   0

    11:45:25.447 | 00 02 01 02 03 04 05 06 07 |   0

    11:45:25.503 | 00 03 01 02 03 04 05 06 07 |   0

    11:45:25.558 | 00 04 01 02 03 04 05 06 07 |   0

    11:45:25.614 | 00 05 01 02 03 04 05 06 07 |   0

    11:45:25.670 | 00 06 01 02 03 04 05 06 07 |   0

    11:45:25.726 | 00 07 01 02 03 04 05 06 07 |   0

    11:45:25.782 | 00 08 01 02 03 04 05 06 07 |   0

     

    2. Pkt_LEN=8测试如下:

    1)。 TX:我们的1201、

     Pkt_LEN=8;数据写入写入写入写入 FIFO、如下所示:

    0x000x010x020x030x040x050x060x07

    0x010x010x020x030x040x050x060x07

    0x020x010x020x030x040x050x060x07

    0x030x010x020x030x040x050x060x07

    0x040x010x020x030x040x050x060x07

     

    2) RX:TI 1200DK

    Pkt_LEN=8;从读取 FIFO 读取的数据如下:

    17:31:15.449 | 00 01 02 03 04 05 06 |   0

    17:31:15.505 | 07 00 01 02 03 04 05 |   0

    17:31:15.562 | 06 07 00 02 01 02 03 04 |   0

    17:31:15.617 | 05 06 07 00 03 01 02 03 |   0

    17:31:15.673 | 04 05 06 07 00 04 01 02 |   0

    17:31:15.729 | 03 04 05 06 07 00 05 01 |   0

    17:31:15.787 | 02 03 04 05 06 07 00 06 |   0

    CHN_BW = 1、CHAN_BW。 BBB_CIC_DECFACL=1

    方法

    器件

    ADC_CIC_DECFACT

    BBB_CIC_DECFACT

    RX 滤波器带宽范围[kHz]

    CC1200

    12.

    1 - 44

    37.9 - 1666.7

    CC1201

    12.

    1-33.

    50.5 - 1666.7

    CHN_BW 由 SmartRF Studio 7自动生成。

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

    要重新表述:为什么将 RX BW 设置为最大值、如果设置为零?  

    是否确定发送 TX FIFO /将其设置为您写入的内容?

    我使用 SmartRF Studio 进行了测试、在获取数据包长度为0x8的正确数据时没有任何问题。  

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

    是的、  

    使用2 1200DK 通信时没有问题。

    我们使用  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我们使用 SmartRF Studio7、专家模式:符号速率:500kSPS、4-GFSK、最大吞吐量、ETSI Stardard 868MHZ 来生成寄存器值。
    我们不想将 IF 设置为零。
    所以我不知道原因。
    我们的卡1201 TX:
    当我设置 PKT_LEN=9、然后写入 FIFO 8字节、写入 FIFO。 发送完成后、读取 TXFIFO 中的字节数、结果为0、对吗?
    当我设置 PKT_LEN=8、然后写入 FIFO 8字节、写入 FIFO。 发送完成后,读取 TXFIFO 中的字节数,结果从0累加,每个数据包结果累加1,是否正确?
    2.我们的卡1201 RX:
    1200dk 发送数据、1201接收数据。
    1201始终读取 CC120X_MARCSTATE、表示 RX_FIFO_ERROR、因此我必须发送 CC120X_SFRX。 对吗? 当1201从读取 FIFO 中读取正确的数据时、CC120X_MARCSTATE 为 Rx_fifo_error。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    抱歉、您没有看到您使用的是4GFSK、那么 RX BW 是正确的。  

    您能否用屏幕截图详细说明您如何执行此操作?  

    如您所见、TX FIFO 中的字节数为8、数据包长度也设置为8。

    如果 RX 中出现 FIFIO 错误、则读取错误的字节数。  

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

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

    通过"添加序列号"、可以更轻松地查看正在发生的情况。 但这表明数据包长度为8、因此 PKT_LEN 应设置为0x8。 在 RX 端、这是什么样子的?

    为什么只使用2字节同步?  

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

    有任何进展吗?  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    上面的图片是错误的。
    根据寄存器值。 我们使用4个字节作为同步字:93 0b 51 de。
    我们使用 oure 代码(我们设计的 cc1201)将数据发送到 Rx (cc1200DK)。
    我的代码如下:
    #define PKTLEN            8.
    uint8 txBuffer[PKTLEN+1]={0};
    静态空 createPacket (/*uint8 *txBuffer*/)

     uint8 i;
     静态 int 索引=0;
     for (i =0;i<(PKTLEN+1);i++)
     {
      txBuffer[i]= i;
     }
     txBuffer[0]=(index++)%256;
     

    空 cc120xRunTX()

     cc120xSpiReadReg (CC120X_MARCSTATE、&marcStatus、1);
     if ((marcStatus & 0x1F)== TX_FIFO_ERROR)
     {
      //刷新 TX FIFO
      TrxSpiCmdStrobe (CC120X_SFTX);
      printf ("SFTX times=%d.\n"times);
      时间=0;
     }
     其他
     {
     
     时间++;
     createPacket();
         sendLen=sizeof (txBuffer)-2;//must -2、如果为-1、则更多错误数据到达 Rx。
     printf ("发送 len=%d、\n"、sendLen);
     cc120xSpiWriteTxFifo (txBuffer、sendLen);
     TrxSpiCmdStrobe (CC120X_STX);
    while (packetSemaphore!= ISR_ACT_REQUIRED);
     //清除信号量标志
             packetSemaphore = ISR_IDLE;
     for (uint8 i=0;i;<sendLen;i++)
      printf ("0x%x、"、txBuffer[i]);
     printf ("\n");
     
     cc120xSpiReadReg (CC120X_NUM_TXBYTES、&txBytes、1);
     printf ("TXFIFO 字节=%d.\n"txBytes);
      }
     
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    -为何要:

    for (i =0;i<(PKTLEN+1);i++)
     {
      txBuffer[i]= i;
     }

    我假设缓冲区的长度为 PKTLEN + 1。  

    -不确定您在这里做什么:

    sendLen=sizeof (txBuffer)-2;//must -2、如果为-1、则更多错误数据到达 Rx。
     printf ("发送 len=%d、\n"、sendLen);
     cc120xSpiWriteTxFifo (txBuffer、sendLen);

    运行此程序时、sendLen 是什么?  

    发送此数据包之前和之后、您是否检查了 TX FIFO 指针?  

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

    有更新吗?

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

    我们的卡 CC1201接收到的数据如下:

    0xf2、0xf3、0xf4、0xf5、0xf6、0xf7、0xf8、0xf8

    然后接收为 RX_FIFO_ERROR。

    我不知道原因,为什么??

     

     

    2.  

    我们的卡 CC1201接收到的数据如下:

    0xf1、0xf2、0xf3、0xf4、0xf5、0xf6、0xf7、0xf7

    然后接收为 RX_FIFO_ERROR。

    我不知道原因,为什么??

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

    如果您获得 RX_FIFO_ERROR、则您具有 FIFO 过流或下溢、这意味着您收到的字节数量与您设置的数据包长度不同。  

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

    谢谢。  

    我在参数 {CC120X_PKT_LEN、          0x08}中设置 pkt_len=0x08、

    在 recv 函数中:  

    读取 CC120X_NUM_RXBYTES             0x2FD7 /* RXFIFO 中的字节数*、结果为8。

    因此、我从 RXFIFO 读取8个字节。

    我不知道为什么会出现 RX_FOFO_ERROR。

    您可以 给我一些建议吗?

    当我设置  {CC120X_PKT_LEN、= 0x08}时、可能是什么问题?

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

    如何从 FIFO 读取?

    请参阅

    https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz/f/156/t/476575?cc1200-receive-packet 和 https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz/f/156/t/663173 、其中介绍了如何接收固定长度的数据包。  

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

    谢谢。

    我的 recv 代码如下所示:

    空 cc120xRunRX (SPI_CS_name csName)

     静态 int 刻度;
     静态 uint8 rxBuffer[900]={0};
     uint8 rxBytes;
     uint8 rxBytes_res;
     uint8 rxFirst=0;
     uint8 rxLast=0;
     uint8 marcStatus;
     uint8 gpioStatus;
     UINT8返回值=0;
     静态 uint8 firstFlag=0;
     静态 uint16 rxIndex=0;
     静态 uint16 errBit=0;
     静态 uint16 errPkt=0;
     
     RetVal= trxSpiCmdStrobe (csName、CC120X_SRX);
     
     while (1)
     {
     cc120xSpiReadReg (csName、CC120X_MARCSTATE、&marcStatus、1);
     if ((marcStatus & 0x1F)== RX_FIFO_ERROR)
     {
      //刷新 RX FIFO
      trxSpiCmdStrobe (csName、CC120X_SFRX);
      printf ("SFRX times=%d.\n"、tick);
     }
       //等待数据包接收中断
     if (packetRecvSem == ISR_ACT_REQUIRED)
     {
       RetVal= trxSpiCmdStrobe (csName、CC120X_SRX);
       cc120xSpiReadReg (csName、CC120X_NUM_RXBYTES、&rxBytes、1);
       //检查 FIFO 中是否有字节
       if (rxBytes!= 0)
       {
        //从 Rx FIFO 读取 n 个字节
        cc120xSpiReadRxFifo (csName、rxBuffer、rxBytes);  
        printf ("recv len=%d、tick =%d."、rxBytes、tick);
        for (uint16 i=0;i;<rxBytes;i++)
         printf ("0x%x、\n"、rxBuffer[i]);
        printf ("\n\n");
       }
       //重置数据包信标
       packetRecvSem= ISR_IDLE;
       trxSpiCmdStrobe (csName、CC120X_SRX);
     }
     }
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我已经获取了 cc120x_ease_link 示例并将其修改为使用 Studio 的500kbps 设置和固定数据包长度。

    以下是我的寄存器设置以及 修改后的 RX 和 TX 功能:

    静态常量寄存器 Setting_t preferredSettings[]=
    {
    CC120X_IOCFG2、 0x06}、
    {CC120X_SYNC_CFG1、 0xA8}、
    {CC120X_EX偏差_M、 0x47}、
    {CC120X_MODCFG_DEV_E、 0x2F}、
    {CC120X_DCFILT_CFG、 0x1E}、
    {CC120X_PREAMING_CFG0、 0x8A}、
    {CC120X_IQIC、 0x00}、
    {CC120X_CHAN_BW、 0x01}、
    {CC120X_MDMCFG1、 0x42}、
    {CC120X_MDMCFG0、 0x05}、
    {CC120X_symbol_Rate2、 0xC9}、
    {CC120X_symbol_rate1、 0x99}、
    {CC120X_symbol_RATE0、 0x99}、
    {CC120X_AGC_REF、 0x2F}、
    {CC120X_AGC_CS_THR、 0xf8}、
    {CC120X_AGC_CFG2、 0x60}、
    {CC120X_AGC_CFG1、 0x12}、
    {CC120X_AGC_CFG0、 0x84}、
    {CC120X_FIFO_CFG、 0x00}、
    {CC120X_FS_CFG、 0x12}、
    {CC120X_PKT_CFG2、 0x00}、
    {CC120X_PKT_CFG0、 0x00}、
    {CC120X_PKT_LEN、 0xFF}、
    {CC120X_FREQOFF_CFG、 0x23}、
    {CC120X_MDMCFG2、 0x00}、
    {CC120X_FREQ2、 0x56}、
    {CC120X_FREQ1、 0xCC}、
    {CC120X_FREQ0、 0xCC}、
    {CC120X_IF_ADC1、 0xEE}、
    {CC120X_IF_ADC0、 0x10}、
    {CC120X_FS_DIG1、 0x04}、
    {CC120X_FS_DIG0、 0xA3}、
    {CC120X_FS_CAL1、 0x40}、
    {CC120X_FS_CAL0、 0x0E}、
    {CC120X_FS_DIVTWO、 0x03}、
    {CC120X_FS_DSM0、 0x33}、
    {CC120X_FS_DVC1、 0xF7}、
    {CC120X_FS_DVC0、 0x0F}、
    {CC120X_FS_PFD、 0x00}、
    {CC120X_FS_PRE、 0x6E}、
    {CC120X_FS_REG_DIV_CML、0x1C}、
    {CC120X_FS_SPARE、 0xAC}、
    {CC120X_FS_VCO0、 0xB5}、
    {CC120X_IFAMP、 0x0D}、
    {CC120X_XOSC5、 0x0E}、
    {CC120X_XOSC1、 0x03}、
    };
    
    静态空 runTX (空)
    {
    //初始化大小为 PKTLEN 的数据包缓冲区
    uint8 txBuffer[PKTLEN]={0};
    
    //将固定数据包长度设置为 PKTLEN
    uint8 writeByte = PKTLEN;
    cc120xSpiWriteReg (CC120X_PKT_LEN、writeByte、1);
    
    //将 ISR 函数连接到 GPIO2
    ioPinIntRegister (IO_PIN_PORT_1、GPIO2、&radioTxISR);
    
    //下降沿上的中断
    ioPinIntTypeSet (IO_PIN_PORT_1、GPIO2、IO_PIN_FALLING_EDGE);
    
    //清除 ISR 标志
    ioPinIntClear (IO_PIN_PORT_1、GPIO2);
    
    //启用中断
    ioPinIntEnable (IO_PIN_PORT_1、GPIO2);
    
    //更新 LCD
    updateLcd();
    
    //无限循环
    while (true)
    {
    //等待按钮按压
    IF (bspKeyPushed (bsp_key_all))
    {
    //持续发送数据包,直到按下按钮
    操作
    {
    txBuffer[0]= packetCounter++;
    对于(uint8 I = 1;I < PKTLEN;I++)
    {
    txBuffer[i]= i;
    }
    
    //将数据包写入 TX FIFO
    cc120xSpiWriteTxFifo (txBuffer、sizeof (txBuffer));
    
    // Strobe TX 发送数据包
    TrxSpiCmdStrobe (CC120X_STX);
    
    //等待数据包已发送的中断。
    //(假设连接到 radioRxTxISR 函数的 GPIO 为
    //设置为 GPIOx_CFG = 0x06)
    while (packetSemaphore!= ISR_ACT_REQUIRED);
    
    //清除信号量标志
    packetSemaphore = ISR_IDLE;
    
    //更新 LCD
    updateLcd();
    
    //等待每个数据包之间的随机时间
    候补 Ms(3*(rand()%10+3);
    
    } while (!bspKeyPushed (bsp_key_all));
    }
    }
    
    
    
    静态 void runRX (void){
    
    uint8 rxBuffer[128]={0};
    uint8 rxBytes;
    uint8 marcState;
    
    //将 ISR 函数连接到 GPIO2
    ioPinIntRegister (IO_PIN_PORT_1、GPIO2、&radioRxISR);
    
    //下降沿上的中断
    ioPinIntTypeSet (IO_PIN_PORT_1、GPIO2、IO_PIN_FALLING_EDGE);
    
    //清除 ISR 标志
    ioPinIntClear (IO_PIN_PORT_1、GPIO2);
    
    //启用中断
    ioPinIntEnable (IO_PIN_PORT_1、GPIO2);
    
    //更新 LCD
    updateLcd();
    
    //将固定数据包长度设置为 PKTLEN
    uint8 writeByte = PKTLEN;
    cc120xSpiWriteReg (CC120X_PKT_LEN、writeByte、1);
    
    //在 RX 中设置无线电
    TrxSpiCmdStrobe (CC120X_SRX);
    
    //无限循环
    while (true){
    
    //等待数据包接收中断
    if (packetSemaphore = ISR_ACT_REQUIRED){
    
    //读取 RX FIFO 中的字节数
    cc120xSpiReadReg (CC120X_NUM_RXBYTES、&rxBytes、1);
    
    //检查 FIFO 中是否有字节
    if (rxBytes!= 0){
    
    //读取 MARCSTATE 以检查 RX FIFO 错误
    cc120xSpiReadReg (CC120X_MARCSTATE、&marcState、1);
    
    //屏蔽 MARCSTATE 位并检查我们是否有 RX FIFO 错误
    if ((marcState & 0x1F)= RX_FIFO_ERROR){
    
    //刷新 RX FIFO
    trxSpiCmdStrobe (CC120X_SFRX);
    } 否则{
    
    //从 RX FIFO 读取 n 个字节
    cc120xSpiReadRxFifo (rxBuffer、rxBytes);
    
    //检查 CRC OK (CRC_OK:第二个状态字节中的位7)
    //假设状态字节附加在 RX_FIFO 中
    //(PKT_CFG1.append_status = 1)
    //如果禁用 CRC,CRC_OK 字段将读为1
    if (rxBuffer[rxBytes - 1]和0x80){
    
    //更新数据包计数器
    packetCounter++;
    }
    }
    
    
    //更新 LCD
    updateLcd();
    
    //重置数据包信标
    packetSemaphore = ISR_IDLE;
    
    //将无线电设置回 RX
    trxSpiCmdStrobe (CC120X_SRX);
    }
    }
    

    BR

    Siri