修改 BCP wimax 例程如下:
下行配置
rxQNum = 662(为了实现 qpendq 中断)
txCfg.txQNum = Bcp_QueueId_0;
分配 free descriptor 的函数修改为
allocate_settled_fdq (hGlblFDQ, RX_NUM_DESC, RX_BUFFER_SIZE_DL, 0, (UInt8*)g_enc_in, &hRxFDQ, NULL);
allocate_settled_fdq (hGlblFDQ, TX_NUM_DESC, TX_BUFFER_SIZE_DL, 0, g_tx_dl, &hTxFDQ, NULL);
两个全局数组用来做 Rx 和 Tx free descriptor 的 packet 空间
hRxFDQ 和 hTxFDQ 使用Starvation_MODE,第一次便是738,739
rxCfg.bUseInterrupts = 0; // Use polling
不使用 accumulator 中断方式,配置的 qpendq 中断希望是 RxQNum 收到数据便触发
Bcp_send (hTx, (Bcp_DrvBufferHandle) pCppiDesc, BCP_EXAMPLE_SIZE_HOST_DESC, NULL);
/* Wait on data to be received from BCP */
while ((numRxPackets = Bcp_rxGetNumOutputEntries (hRx)) == 0);
for (i = 0; i < numRxPackets; i ++)
{
Bcp_recv (hRx,
&hRxDrvBuffer,
&pRxDataBuffer,
&rxDataBufferLen,
&pRxPsInfo,
&rxPsInfoLen,
&rxFlowId,
&rxSrcId,
&rxDestnTag);}
qpendq 方式配置的中断未触发,但是当我将 bcp 的 function 放在一个task 里,跳出该task后,反而进中断的服务程序了,不知道什么原因
多核确实有点复杂,请TI工程师不吝赐教。
Andy Yin1:
查看BCP RxQueue中是否有描述符,确认BCP有输出packet,如果RxQ中没有输出,则说明BCP就没有输出,问题在BCP;如果RxQ中有描述符但是没有进中断,则是中断配置的问题。BCP的使用在task与非task没有影响,你先查一下RxQ中有没有输出包。