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.

[参考译文] LP-CC1312R7:发送2个不同的 TX_Entry 数据

Guru**** 2478765 points


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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1340878/lp-cc1312r7-transmit-2-different-tx_entry-data

器件型号:LP-CC1312R7

大家好!

我正在尝试通过定义2个不同的 txEntry、一个260bit/32字节和另一个255byte 来创建一个结构、其中一个发送50次、另一个发送一次。 这正是我要做的:

sync_entry[33]={1、2、3、4、5、6、7、8、9、10、11、12、13、14、15、16、17、18、19、20、21、23、24 、25、26、27、28、29、30、31,333}--> 发送1次。  当50个发送(SYNC_DATA_ENTRY)完成时

data_entry[255]={0};--> 发送50次  

执行上述操作;

 1.首先,我定义了两个不同的实体。

 2.我将使用 RF_runCmd 运行 RF_EventTxEntryDone 回调。

 3.每次回调处于活动状态时,我都会保留一个计数器。

 4.我根据该计数器的状态更改 txQueu.pCurrent Entry。   

相关代码如下:

rfc_dataEntryPointer_t txEntry;
rfc_dataEntryPointer_t sync_txEntry;
dataQueue_t txQueue;

void *rf_transmitThread(void *arg0)
{
txEntry.pNextEntry = (uint8_t*)&txEntry;
txEntry.status = DATA_ENTRY_PENDING;
txEntry.config.type = DATA_ENTRY_TYPE_PTR;
txEntry.pData = (uint8_t*)data_entry;
txEntry.length = sizeof(data_entry);

sync_txEntry.pNextEntry = (uint8_t*)&sync_txEntry;
sync_txEntry.status = DATA_ENTRY_PENDING;
sync_txEntry.config.type = DATA_ENTRY_TYPE_PTR;
sync_txEntry.pData = (uint8_t*)sync_entry;
sync_txEntry.length = sizeof(sync_entry);

txQueue.pCurrEntry = (uint8_t*)&sync_txEntry;
txQueue.pLastEntry = NULL;

    while(1)
    {
        RF_runCmd(rfHandle, (RF_Op*)&RF_cmdPropTxAdv, RF_PriorityNormal, &callback, RF_EventTxEntryDone);
    }

}

void callback(RF_Handle h, RF_CmdHandle ch, RF_EventMask e)
{
   if ( e & RF_EventTxEntryDone)
   {
       tx_entry_counter++;
   }
   if(tx_entry_counter % 50 == 0)
   {
      txQueue.pCurrEntry = (uint8_t*)&sync_txEntry;
   }
   else
   {
      txQueue.pCurrEntry = (uint8_t*)&txEntry;
   }
}



当我在频谱分析仪中对数据进行解码时、我观察到同步数据包根本没有发送。

我想知道的是这一点。 RF_EventTxEntryDone 是否告知我们要的块已离开射频? 当我读取说明时、我看到它只通知队列已经接收到数据包。 你认为我给出的示例中有任何问题吗?

辛塞莱里

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

    您好、Faruk、

    看看您要尝试执行的操作、我建议您使用 cmd_count_branch rfcore 命令。

    如果您看看发布的代码: https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1201184/cc1352p-radio-command-chain-for-tdma/4530400#4530400

    例如、您可以看到、您可以从50启动计数器、并在达到0时分支到您的同步 TX 条目。

    此致、

    亚瑟

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

    您好@Arthur R:

    感谢您的回复。

    "你想说什么?" 但我不确定如何使用 CMD_COUNT_BRANCH?
    例如:
    -先发送 sync_Byte 还是 data byte_be ?
    -我可以将其配置为发送 data_byte 50次,然后发送 sync_Byte 一次吗?

    - RF_cmdCountBrach.counter 变量是否会自动递减?

    辛塞莱里

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

    您好、Faruk、

    这里有一个 CMD_COUNT_BRANCH 的示例。

        RF_cmdNop.startTrigger.triggerType = TRIG_NOW;
        RF_cmdNop.pNextOp = (RF_Op*)&RF_cmdPropTx;
    
        RF_cmdPropTx.pktConf.bUseCrc = 0;
        RF_cmdPropTx.startTrigger.triggerType = TRIG_NOW;
        RF_cmdPropTx.condition.rule = COND_ALWAYS;
        RF_cmdPropTx.pNextOp = (RF_Op*)&RF_cmdCountBranch;
    
        RF_cmdCountBranch.counter = 49;
        RF_cmdCountBranch.startTrigger.triggerType = TRIG_NOW;
        RF_cmdCountBranch.pNextOpIfOk = (RF_Op*)&RF_cmdPropTx;
        RF_cmdCountBranch.condition.rule = COND_ALWAYS;
    
        /* Send packet 50 times using chaining */
        RF_EventMask terminationReason = RF_runCmd(rfHandle, (RF_Op*)&RF_cmdNop,
                                                       RF_PriorityNormal, NULL, 0);


    如果希望启动 sync_BYTE、只需将其放在链中的第一个位置、然后将 pNextOP 配置为 CMD_COUNT_BRANCH (此处为 RF_cmdCountBranch)。
    只要计数器值大于0、RF_cmdCountBranch 将执行 pNextOpIfOk 指向的命令。
    当计数器(由 CMD_COUNT_BRANCH 本身自动递减)达到0时、它将执行 pNextOP 指向的命令。

    在本例中、pNextOp 必须是数据字节 TX 命令。 数据字节的 pNextOp 必须指向 TX 同步字节。

    如果不清楚、敬请告知。

    此致、

    亚瑟