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

SRIO doorbell和IPC中断同时使用的问题

本人在6678中同时使用SRIO doorbell中断和IPC中断时遇到一些问题,

dsp间的doorbell中断可正常接受发送,

0核可以向1~7核正常发送Notify_sendEvent,1~7核也可成功触发相关的回调函数,单向通信没问题,

1~7核向0核发送Notiy_sendEvent也显示成功,但是0核却未触发相应的回调函数

不知是不是doorbell和IPC中断存在冲突,请问各位是否能够提供相关解决方案?

cfg文件内容如下:

//———————————————
var BIOS = xdc.useModule('ti.sysbios.BIOS');

var Task = xdc.useModule('ti.sysbios.knl.Task');

var HeapBuf = xdc.useModule('ti.sysbios.heaps.HeapBuf');

var Log = xdc.useModule('xdc.runtime.Log');
var ti_sysbios_hal_Cache = xdc.useModule('ti.sysbios.hal.Cache');
var LoggingSetup = xdc.useModule('ti.uia.sysbios.LoggingSetup');
var Timer = xdc.useModule('ti.sysbios.hal.Timer');

Task.common$.namedInstance = true;

var Clock = xdc.useModule ('ti.sysbios.knl.Clock');

var Sem = xdc.useModule ('ti.sysbios.knl.Semaphore');

var Hwi = xdc.useModule ('ti.sysbios.hal.Hwi');

var Ecm = xdc.useModule ('ti.sysbios.family.c64p.EventCombiner');

var Diags = xdc.useModule('xdc.runtime.Diags');
/* Load the CSL package */
var Csl = xdc.useModule('ti.csl.Settings');

/* Load the CPPI package */
var Cppi = xdc.loadPackage('ti.drv.cppi');

/* Load the QMSS package */
var Qmss = xdc.loadPackage('ti.drv.qmss');

/* Load the PA package */
var Pa = xdc.useModule('ti.drv.pa.Settings');

/* Load the Platform/NDK Transport packages */
var PlatformLib = xdc.loadPackage('ti.platform.evmc6678l');
var NdkTransport = xdc.loadPackage('ti.transport.ndk');

var Global = xdc.useModule('ti.ndk.config.Global');
Global.enableCodeGeneration = false;

var Cache = xdc.useModule('ti.sysbios.family.c66.Cache');

var Startup = xdc.useModule('xdc.runtime.Startup');

BIOS.taskEnabled = true;

Ecm.eventGroupHwiNum[0] = 7;
Ecm.eventGroupHwiNum[1] = 8;
Ecm.eventGroupHwiNum[2] = 9;
Ecm.eventGroupHwiNum[3] = 10;
//————————————–

var MultiProc = xdc.useModule('ti.sdo.utils.MultiProc');

var nameList = ["CORE0", "CORE1", "CORE2", "CORE3", "CORE4", "CORE5", "CORE6", "CORE7"];//MultiProc.getDeviceProcNames();

MultiProc.setConfig(null, nameList);

var System = xdc.useModule('xdc.runtime.System');
var SysStd = xdc.useModule('xdc.runtime.SysStd');
System.SupportProxy = SysStd;

/* Modules explicitly used in the application */
var Notify = xdc.useModule('ti.sdo.ipc.Notify');
var Ipc = xdc.useModule('ti.sdo.ipc.Ipc');
var BIOS = xdc.useModule('ti.sysbios.BIOS');
BIOS.heapSize = 0x8000;
var Task = xdc.useModule('ti.sysbios.knl.Task');

/* To avoid wasting shared memory for MessageQ transports */
for (var i = 0; i < MultiProc.numProcessors; i++) {
Ipc.setEntryMeta({
remoteProcId: i,
setupMessageQ: false,
});
}

/* Synchronize all processors (this will be done in Ipc_start) */
Ipc.procSync = Ipc.ProcSync_ALL;

/* Shared Memory base address and length */
var SHAREDMEM = 0x0C000000;
var SHAREDMEMSIZE = 0x00400000;

var SharedRegion = xdc.useModule('ti.sdo.ipc.SharedRegion');
SharedRegion.setEntryMeta(0,
{ base: SHAREDMEM, len: SHAREDMEMSIZE,
ownerProcId: 0,
isValid: true,
name: "DDR2_RAM",
});

Program.sectMap[".csl_vect"] = "DDR3";
Program.sectMap[".vector"] = "DDR3";
Program.sectMap[".text"] = "DDR3";
Program.sectMap[".switch"] = "DDR3";
Program.sectMap[".const"] = "DDR3";
Program.sectMap[".cinit"] = "DDR3";

Program.sectMap[".neardata"] = "DDR3";
Program.sectMap[".rodata"] = "DDR3";
Program.sectMap[".bss"] = "DDR3";

Program.sectMap[".far"] = "DDR3";
Program.sectMap[".stack"] = "DDR3";
Program.sectMap[".system"] = "DDR3";

Program.sectMap[".extData"] = "DDR3";
Program.sectMap[".cio"] = "DDR3";
Program.sectMap[".fardata"] = "DDR3";

Program.sectMap[".code"] = "DDR3";
Program.sectMap[".args"] = "DDR3";
Program.sectMap[".vecs"] = "DDR3";
Program.sectMap["platform_lib"] = "DDR3";

Shine:

”1~7核向0核发送Notiy_sendEvent也显示成功,但是0核却未触发相应的回调函数“ 这时doorbell中断正常吗?

看一下IPC寄存器中断标志位有没有置1?

Yu Hao:

回复 Shine:

您好,doorbell中断一直都在正常接收;
IPC寄存器指的是IPCGR和IPCAR吗?如果是这两个的话,通过ccs观察,各个核都没有发生过变化,不知是刷新太慢无法显示还是观察的寄存器位置不对;
另外,屏蔽掉srio相关部分IPC就可以正常使用,加上srio部分就会失败

Shine:

回复 Yu Hao:

是这两个寄存器。

可以尝试先不要把所有的核都打开,先使能1,2个核,看IPC能否成功?

Yu Hao:

回复 Shine:

0核里添加了srio初始化部分,除了0核,其他几个核都可以正常通信

Shine:

回复 Yu Hao:

"1~7核向0核发送Notiy_sendEvent也显示成功",先不要1~7核同时向0核发送Notiy_sendEvent,先使能1,2个核,看IPC能否成功?

Yu Hao:

回复 Shine:

1 2核之间可以正常通信,但是1 2核不能向0核成功通信

Shine:

回复 Yu Hao:

也就是说1~7核只使能单个核的时候就不能向核0 IPC通信是么?

Yu Hao:

回复 Shine:

是的,当SRIO和IPC同时使用时,0核可以完成向1核的通信,但是1核无法和0核通信。是不是因为SRIO和IPC进行初始化时,二者存在一些冲突?现在找不到问题所在。

Shine:

回复 Yu Hao:

为更加有效地解决您的问题,我们建议您将问题发布在E2E英文技术论坛上,将由资深的英文论坛工程师为您提供帮助。
e2e.ti.com/…/929814

Shine:

回复 Shine:

建议使用ROV来查看一下stack, heap是否有溢出,请回答一下下面的问题。
•what the IPC interrupt number and SRIO interrupt number?
•are they second level interrupt or primary interrupt?
•if event combiner used?
•Interrupt vector Id and priority

赞(0)
未经允许不得转载:TI中文支持网 » SRIO doorbell和IPC中断同时使用的问题
分享到: 更多 (0)