请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:66AK2E05 好的、那么简单的问题。 我无法完全了解 PA_EMAC 示例(接收设置)中的流控制是如何发生的、即 RX_fdq (1-3)_qnum/qmgr 的用法是什么
我的印象是、如果由于某种原因、自由描述符不足以处理大量传入的数据包、那么我可以制作多个自由描述符、这些描述符将并行运行、并在描述符不能为时充当冗余 传入数据包的数量。
因此、我创建了多个"rxFreeQInfo"、如以下代码所示、用于实现上述理念
rxFlowCfg.flowIdNum = CPPI_PARAM_NOT _specified;
rxFlowCfg.rx_dest_qmgr = rxQInfo.qMgr;
rxFlowCfg.rx_dest_qnum = rxQInfo.qNum;
rxFlowCfg.rx_desc_type = Cppi_DescType_host;
rxFlowCfg.rx_ps_location = Cppi_PSLoc_PS_in_Desc;
rxFlowCfg.rx_psinfo_present = 1;/*启用 PS 信息*/
rxFlowCfg.rx_error_handling = 1;默认情况下、//在饥饿时重试
rxFlowCfg.rx_einfo_present = 1;/* EPIB 信息存在*/
rxFlowCfg.rx_dest_tag_lo_SEL = 0;//禁用标记
rxFlowCfg.rx_dest_tag_hi_SEL = 0;
rxFlowCfg.rx_src_tag_lo_SEL = 0;
rxFlowCfg.rx_src_tag_hi_SEL = 0;
rxFlowCfg.rx_size_thresh_en = 0;//默认情况下,我们禁用 Rx 阈值*
rxFlowCfg.rx_size_thresh1_en = 0;//默认情况下,我们禁用 Rx 阈值*
rxFlowCfg.rx_size_thresh2_en = 0;//默认情况下,我们禁用 Rx 阈值*/
rxFlowCfg.rx_size_thresh0 = 0x0;
rxFlowCfg.rx_size_thresh1 = 0x0;
rxFlowCfg.rx_size_thresh2 = 0x0;
rxFlowCfg.rx_fdq0_sz0_qmgr = rxFreeQInfo.qMgr;//设置流程的接收空闲队列*/
rxFlowCfg.rx_fdq0_sz0_qnum = rxFreeQInfo.qNum;
rxFlowCfg.rx_fdq0_sz1_qnum = 0x0;
rxFlowCfg.rx_fdq0_sz1_qmgr = 0x0;
rxFlowCfg.rx_fdq0_sz2_qnum = 0x0;
rxFlowCfg.rx_fdq0_sz2_qmgr = 0x0;
rxFlowCfg.rx_fdq0_sz3_qnum = 0x0;
rxFlowCfg.rx_fdq0_sz3_qmgr = 0x0;
rxFlowCfg.rx_fdq1_qnum = rxFreeQInfo1.qNum;//使用 Rx Queue 选择描述符*/
rxFlowCfg.rx_fdq1_qmgr = rxFreeQInfo1.qMgr;
rxFlowCfg.rx_fdq2_qnum = rxFreeQInfo2.qNum;//使用 Rx Queue 选择描述符*/
rxFlowCfg.rx_fdq2_qmgr = rxFreeQInfo2.qMgr;
rxFlowCfg.rx_fdq3_qnum = rxFreeQInfo3.qNum;//使用 Rx Queue 选择描述符*/
rxFlowCfg.rx_fdq3_qmgr = rxFreeQInfo3.qMgr;
/*配置 Rx 流*/
if ((gRxFlowHnd = Cppi_configureRxFlow (gCpdmaHnd、&rxFlowCfg、&isAllocated))= NULL)
{
UART_printf ("配置 Rx 流时出错\n");
返回-1;
}
我的假设和实施是否正确、如果是、我为什么无法正确接收数据、我会如何以及在何处推送使用过的描述符