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.
- 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 ?
- Is my interpretation of the register values correct (in comment) ?
- 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.