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

关于BCP在处理完毕后采用中断方式来获取数据出现的问题(例程中给的是采用polling方式)

各位工程师:

   我最近在跑BCP的相关例程,现在原有程序已经基本跑通,现在因为实际需要将例程中获取数据的方式改为中断方式(原例程中采用的是polling方式:即rxcfg.buseinterrrupts=0),我查看相关的说明文档,修改了程序,修改完跑程序发现调用bcp_send()不能向core产生中断,进一步观察寄存器发现QMSS中intr_status寄存器中我设置的channel对应的Bit位没有变为1,程序中存放descriptor list的数组hiPrioList在bcp_send之后数组值没变化。程序修改部分如下:

#data_align(hiPrioList,16)

Uint32 hiPrioList[(Num_Packets+1)*2];

rxcfg.rxqnum=704;

//修改为1

rxcfg.buseinterrrupts=1;

//添加了accumCfg

rxcfg.accumCfg.channel=0;

rxcfg.accumCfg.cmmand=Qmss_AccCmd_ENALBE_CHANNEL;

rxcfg.accumCfg.interruptPacingMode=Qmss_AccPacingMode_NONE;

rxcfg.accumCfg.listAddress=convert_coreLocalToGlobalAddr((Uint32)hiPrioList);

rxcfg.accumCfg.listCountMode=Qmss_AccountMode_NULL_TERMINATE;

rxcfg.accumCfg.listEntrySize=Qmss_AccEntrySize_REG_D;

rrxcfg.accumCfg.MaxPageEntries=9;

rxcfg.accumCfg.multiQueueMode=Qmss_AccQueueMode_SINGLE_QUEUE;

rxcfg.accumCfg.queMgrIndex=704;

rxcfg.accumCfg.queueEnMask=0;

rxcfg.accumCfg.timerLoadCount=0;

hrx=Bcp_rxOpen(hBcp,&rxcfg,NULL);

另外在cfg文件中创建了一个Hwi对象,将49号事件与5号中断相关联。

请各位工程师帮忙看看,多谢了~

Andy Yin1:

您好,

1. 你配置MaxPageEntries=9,需要等到有8个包从BCP出来送到RxQ=704后,Accumulator才会将descriptor搬到相应的AccListbuf中,所以首先确认是否有8个包从BCP中出来,可以首先按照查询方式配置,查看RxQ704中描述符的个数;

2. 在查询方式下确认有8个包送到RxQ中后,再改为中断方式,正常情况下在RxQ中看到描述符个数为0,看Listbuff中有连续8个descriptor地址,如果此时在RxQ中看到描述符则说明Accmulator配置有问题,可以看看QMSS firmware是否下载正确,并进到代码Bcp_rxOpen中看看Accu channel的配置是否成功;

3. 如果Linstbuffer中看到8个连续的descriptor地址,此时还没有中断的话,就跟中断映射配置有关,你上述使用的高优先级channel 0,对应的DSP中断事件是48,而非49,这个地方需要修改,还有5号事件需要与相应的ISR函数映射。

赞(0)
未经允许不得转载:TI中文支持网 » 关于BCP在处理完毕后采用中断方式来获取数据出现的问题(例程中给的是采用polling方式)
分享到: 更多 (0)