Other Parts Discussed in Thread: CC1311P3
器件型号: CC1311P3
我正在使用 CC1311P3 并尝试持续传输 1024 字节 每一次 1 秒 AT 19 200 波特 。
每一秒、我使用准备两个 TX 数据包 循环缓冲器 然后将它们邮寄到射频驱动器RF_postCmd()、以进行背对背传输。
几个周期后、开始接收数据 RF_ALLOC_ERROR 从。 RF_postCmd()发生这种情况后、无法对新的射频命令排队、射频驱动程序似乎停止响应。
下面是传输代码的简化版本:
// Copy UART data into RF circular buffer
rf_ctrl_isr_store_data(&input[RF_DATA_RD_POS], RF_cmdPropTxAdv_cst.pktLen);
uint8_t index = rf_circ_buffer.read_index;
if (rf_circ_buffer.slots[index].state != SLOT_EMPTY)
{
RF_cmdPropTxAdv_cst.pPkt = &rf_circ_buffer.slots[index].data;
}
rf_circ_buffer.slots[index].state = SLOT_EMPTY;
rf_circ_buffer.read_index = (rf_circ_buffer.read_index + 1) % BUFFER_SLOT_COUNT;
// Post TX command
RF_CmdHandle cmdHandle = RF_postCmd(rfHandle,
(RF_Op*)&RF_cmdPropTxAdv_cst,
RF_PriorityNormal,
NULL,
0);
START_TYPE = TRIG_NOW;
-
消息流
CMD_PROP_TX_ADV -
每个数据包使用唯一的缓冲槽
-
未使用回调处理程序—TX 每秒重复一次
-
射频驱动器最终返回 RF_ALLOC_ERROR
检测到错误后、我会尝试通过清除并生成射频核心平稳恢复:
RF_cancelCmd(rfHandle, RF_CMDHANDLE_FLUSH_ALL, 1);
RF_yield(rfHandle);
但是、这并不总是能恢复无线电—有时器件会保持卡滞状态(无法再继续恢复 TX)、直到完整的 RF_Close/RF_open 周期或系统复位为止。
您能否帮助提供有关此问题的解决方案?
谢谢、
四 B