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

关于C6678核间通讯的几个问题

HI,

      关于C6678,我有几个问题

    (1)IPC中的notify模块,我理解是不是占用了C6678的核间中断资源,使用了IPG? 也就是说如果我挂接了自己的IPG中断处理程序的话,IPC功能也就没法使用了。

      (2)第二个问题是关于QMSS中的accumulator的。

      我使用的软件包是:ti-processor-sdk-rtos-c667x-evm-02.00.01.07-Windows-x86-Install.  

qmInfraMCExampleProject  这个工程中有些代码不是太明白

  文件:infrastructure_multicoremode.c

下面是其中的部分代码:

     CORE0 调用send_data函数给每个核(CORE0,1,2,3)都发送了报文。

     if (coreNum == SYSINIT)
{
for (index = 0; index < NUMBER_OF_CORES; index++)
{
if (send_data (channel + index, index) < 0)
{
errorCount++;
System_printf ("Error Core %d : Sending data on channel %d core: %d\n", coreNum, channel + index, index);
return; 
}
/* Close Rx/Tx queues, channels and flows used in this data transfer */
cleanup ();
}

}

send_data函数,每次都会去配置accumulator的PDSP。 并且配置的位单队列模式,每次只监控一个通道。

我的疑问是 :

(1)PDSP是不是能够保持住每次配置的命令,也就是说core 0调用了4次send_data,会给pdsp配置了4次命令,每次都是监控 一个单独的队列,最后获得结果是不是就是PDSP监控了4个 队列?

 (2)因为每个核都挂接了中断处理,PDSP是如何将各个核上的RX 队列接收到报文的事件 分别触发到指定的核上的呢。

  (3)各个核公共的中断处理函数中获取buffer的地址部分代码也不清楚,像是从hiPrioList从获取的,比如为啥取第一个单元 ,以及为啥要和 temp &= 0xf0ffffff;进行操作

(4)不知道是否有更详细点介绍accumulator配置和工作流程的文档,那篇QMSS的文档中的描述,让人看得点云山雾罩,没法把工作流程串起来。

       能否能够简单讲讲:accumulator如何检测到各个队列,并且把中断传递给对应的核,对应的核如何从accumulator中获取对应于自己描述符地址。

谢谢  

下面是代码

cfg.channel = channel;
cfg.command = Qmss_AccCmd_ENABLE_CHANNEL;
cfg.queueEnMask = 0;
cfg.listAddress = l2_global_address ((uint32_t) hiPrioList);
/* Get queue manager and queue number from handle */
cfg.queMgrIndex = Qmss_getQIDFromHandle (rxQueHnd);
cfg.maxPageEntries = NUM_PACKETS + 1;
cfg.timerLoadCount = 0;
cfg.interruptPacingMode = Qmss_AccPacingMode_NONE;
cfg.listEntrySize = Qmss_AccEntrySize_REG_D;
cfg.listCountMode = Qmss_AccCountMode_ENTRY_COUNT;
cfg.multiQueueMode = Qmss_AccQueueMode_SINGLE_QUEUE;

 

中断处理函数

void hiPrioInterruptHandler (uint32_t eventId)
{
uint32_t channel, index, temp, count;
uint32_t *buf;
void *desc;

channel = (eventId – 48) * 4 + coreNum;

#if !RM /* RM uses IPC which doesn't get along with printf's in an ISR context */
System_printf ("Core %d : HIGH PRIORITY Rx ISR – channel %d\n", coreNum, channel);
#endif

/* Process ISR. Read accumulator list */
temp = l2_global_address ((uint32_t) hiPrioList);
temp &= 0xf0ffffff;
buf = (uint32_t *) temp;
count = buf[0];

    

Andy Yin1:

1 IPC software底层使用的是IPCGR触发核间中断;

2 你看的这个Navigator例程是由core0通过Infrastructure PKTDMA向其他core发送packet,每个接收core都申请了一个highQ作为接收队列,都是在core0上进行highQ申请及配置,具体见下面配置材料中Exp4_MCSDK.pdf,其中有关于这个例程流程说明。

http://www.deyisupport.com/question_answer/dsp_arm/c6000_multicore/f/53/t/4899.aspx

赞(0)
未经允许不得转载:TI中文支持网 » 关于C6678核间通讯的几个问题
分享到: 更多 (0)