TI中文支持网
TI专业的中文技术问题搜集分享网站

【C6670】descriptor 和中断

修改 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中有没有输出包。

赞(0)
未经允许不得转载:TI中文支持网 » 【C6670】descriptor 和中断
分享到: 更多 (0)