This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TMS320C6678 - IPC Notify exception

Other Parts Discussed in Thread: TMS320C6678, SYSBIOS, MATHLIB

I'm currently working with TMS320C6678 simulator in CCS 5.5. I would like to provide communication between CORE0-3 using MessageQ (for transport data) and Notify (for synchronization). In my case Ipc.procSync is set to Ipc.ProcSync_PAIR. CORE0 is master and other cores works as slaves. Code in task of the CORE0:

...
while (Ipc_attach(1) < 0) { Task_sleep(1); } Notify_registerEvent(1, INTERRUPT_LINE, EVENTID, (Notify_FnNotifyCbck)cbFxn, NULL); Notify_registerEvent(2, INTERRUPT_LINE, EVENTID, (Notify_FnNotifyCbck)cbFxn, NULL); //exception Notify_registerEvent(3, INTERRUPT_LINE, EVENTID, (Notify_FnNotifyCbck)cbFxn, NULL);

...

Code in CORE1-3:

...
    while (Ipc_attach(0) < 0) {
       Task_sleep(1);
    }

    Notify_registerEvent(0, INTERRUPT_LINE, EVENTID, (Notify_FnNotifyCbck)cbFxn, NULL);
...

I have only one task per core. My problem is with Notify. My code works good with two cores (only one Notify_registerEvent in CORE0). If I would like to create communication with three or four cores I get exception after register Notify between CORE0 and CORE2. Exception:

[TMS320C66x_0] ti.sdo.ipc.Notify: line 338: assertion failure: A_notRegistered: Notify instance not yet registered for the processor/line
xdc.runtime.Error.raise: terminating execution


Here is my cfg file. It's the same for all cores.

var nameList = MultiProc.getDeviceProcNames();

MultiProc.setConfig(null, nameList);
                           
var System   = xdc.useModule('xdc.runtime.System');
System.extendedFormats = '%$L%$S%$F%f';
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 MessageQ    = xdc.useModule('ti.sdo.ipc.MessageQ');
var Ipc         = xdc.useModule('ti.sdo.ipc.Ipc');
var HeapBufMP   = xdc.useModule('ti.sdo.ipc.heaps.HeapBufMP');
var MultiProc   = xdc.useModule('ti.sdo.utils.MultiProc');

/* BIOS/XDC modules */
var BIOS        = xdc.useModule('ti.sysbios.BIOS');
BIOS.heapSize   = 0x8000;
var Task        = xdc.useModule('ti.sysbios.knl.Task');

var tsk0 = Task.create('&tsk0_func');
tsk0.instance.name = "tsk0";

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

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

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

var timer0Params = new Timer.Params();
timer0Params.instance.name = "timer0";
timer0Params.intNum = 9;
timer0Params.period = 10000;
Program.global.timer0 = Timer.create(-1, "&timer_interrupt", timer0Params);

My configuration is as follow:

IPC: 1.24.3.32

BIOS: 6.33.6.50

MATHLIB C66x: 3.1.0.0

  • I solved it. In CORE0 task I have to add Ipc_attach for cores 1 to 3.

    ...
        while (Ipc_attach(1) < 0)
        {
           Task_sleep(1);
        }
    
        while (Ipc_attach(2) < 0)
        {
           Task_sleep(1);
        }
    
        while (Ipc_attach(3) < 0)
        {
           Task_sleep(1);
        }
    
        Notify_registerEvent(1, INTERRUPT_LINE, EVENTID, (Notify_FnNotifyCbck)cbFxn, NULL);
        Notify_registerEvent(2, INTERRUPT_LINE, EVENTID, (Notify_FnNotifyCbck)cbFxn, NULL);
        Notify_registerEvent(3, INTERRUPT_LINE, EVENTID, (Notify_FnNotifyCbck)cbFxn, NULL);
    ...

  • Hi,

    We are glad that your issue is solved and thank you for letting us know.