你好,我现在正在调试6678网络模块(硬件平台是C6678),在配置PDSP0接收指定MAC地址数据包时遇到问题,代码大致流程如下:
ret = Pa_addMac(pa_inst_hdl,
pa_LUT1_INDEX_NOT_SPECIFIED,
ðInfo,
&routeInfo,
&nFailInfo,
&handle,
buf,
&size,
&cmdReplyInfo, //cmdReplyInfo.queue = 712 接收应答队列
&cmdDest);
然后获取并填充描述符,对应代码如下:
Cppi_setData(Cppi_DescType_HOST, txPkt, buf, size);
Cppi_setPacketLen(Cppi_DescType_HOST, txPkt, size);
Cppi_setReturnQueue(Cppi_DescType_HOST, txPkt, inQueue);
//inQueue申请代码如下
//Qmss_queueOpen (Qmss_QueueType_GENERAL_PURPOSE_QUEUE, QMSS_PARAM_NOT_SPECIFIED, &isAllocated)
cmdDest获取的数值为0,也就是发送通道0,因为发送通道0对应PDSP0,描述符设置好后,压入对应的发送队列(640号),压入前进行cache回写,
Qmss_queuePushDescSize(txQueHnd, desc, desc_size);
目前存在的问题是:
1.push完成后,监听inQueue队列,没有获取任何表述符,712号队列也没有获取任何描述符。
2.正常情况下,应该可以在inQueue队列中获取到发送完成的描述符,并且在712号队列中接收到应答。
3.我故意将txQueHnd改为641-648其余队列,虽然此时操作有问题,因为并没有配置PDSP0,但是在inQueue可以监听到发送完成的描述符,712队列监听不到应答描述符(属于正常,因为PDSP0只能通过640队列发送)。
问题总结:
我在利用640号队列配置PDSP0时,将描述符压入640号队列后,在返回队列中接收不到发送完成描述符,但是换成641~648都可以,虽然这种方法操作不正确,但至少发送队列将描述符发送出去了,但是640号队列始终不行,请问造成这种问题的原因可能有哪些呢?
Andy Yin1:
发送队列640时,查看640中是否有描述符,如果依然在640中,则说明通道没使能,如果没有堵塞在640中,但是没有返回完成队列中,这说明可能跟配置有关,建议check一下配置,另外PDSP中需要先下载相应的firmware。
xin he2:
回复 Andy Yin1:
感谢您的回复,我测试时发现,同样的代码有时好使,有时不好使,请问一般出现这种问题原因有哪些?没有头绪了,请指点
xin he2:
回复 Andy Yin1:
我刚才又测试了下,将通道禁能,进行push操作后,640队列中确实存在描述符,将通道开启后,描述符就不存在,但是返回队列也没获取到描述符,不知道描述符哪里去了,PDSP中固件已经下载了。