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.

Generating software interrupt on Hyperlink peripheral

Other Parts Discussed in Thread: TMS320C6678

Hi everyone,

I am currently working with two TMS320C6678 EVM boards, connected with a  Hyperlink cable.

What I am trying to do is to generated a software interruption from local DSP (let's say Core 2) and transmit it to remote DSP (Core 2 of the other C6678) via Hyperlink. I am using Hyperlink LLD for Hyperlink configuration and I am setting up Hwi and CPINTC with SYS/BIOS API.

If I understand correctly Hyperlink UG at "2.7.5.1 Interrupt Detection", it is possible to do so by writing in the Generate Soft interrupt register

"Xxxx_00MN: When 0xMN is between 0x00 and 0x3F, it triggers a software interrupt
by setting HW_event[0xMN] if the SIEN bit of the interrupt control value for
HW_event[0xMN] is set to 1."

So here is some of my settings on local side :

control.intLocal        = 0; /* Transmit interrupt packet to remote side */
control.int2cfg          = 1; /* Does not matter in this side, forward interrupt packet to Interrupt Pending/Set Register */


intCtrlIdx.intCtrlIdx = 0x02; /* We use HW_event[2] as example */
intCtrlVal.intEn = 1;        /* Enable hardware interrupt for this event */
intCtrlVal.intType = 0;     /* level sensitive */
intCtrlVal.intPol = 0x0;   /* active high */
intCtrlVal.iSec = 0;         /* don't care about security */
intCtrlVal.mps = 0x02;  /* microcontroller select*/
intCtrlVal.SIEN = 1;       /* software interrupt enable */
intCtrlVal.vector = 2;     /* Set bit 2 of remote Interrupt Pending/Set Register */

On remote side I have :

control.intLocal        = 1; /* Does not matter but I don't want to forward IT from remote to local */
control.int2cfg          = 1; /* Forward interrupt packet to Interrupt Pending/Set Register */

Same settings then :

    intCtrlIdx.intCtrlIdx = 0x02;
    intCtrlVal.intEn = 1;  
    intCtrlVal.intType = 0;
    intCtrlVal.intPol = 0x0;
    intCtrlVal.iSec = 0
    intCtrlVal.mps = 0x02;
    intCtrlVal.SIEN = 1; 
    intCtrlVal.vector = 2;

Then in my local application, I have a simple task that should periodically trigger a software IT on local side.

genSoftInt.eoiFlag     = 0x00;  // soft trigger
genSoftInt.iVector     = 0x02;    // software trigger of HW_event[2]

On remote, hooked ISR should release a semaphore when IT has been correctly transmitted through Hyperlink. But I never see nothing on Interrupt Pending/Set register field. So it seems that these settings fail to perform interrupt transmission through Hyperlink.


While debugging I have checked that host event and hwi have been correctly setup by directly writing into remote Interrupt Pending/Set register. It resulted in the semaphore release as expected.

  1. I understand that most of my Interrupt Control Value register is useless since I want software interrupt. Should I clear intEn on local side and clear SIEN on remote side ?
  2. Is my interpretation of the register values correct (in comment) ?
  3. As far as I understand, I also have to set Interrupt Pointer Index & Value registers. Is this way correct ?

    intPtrIdx.intPtrIdx = 0x02;
    intPtrVal.intPtr     = 0x14;

Thanks for the help.

Tim.