I am attempting to trigger the ESM low interrupt when a SRAM single bit error occurs on a TMS470M06607.
In the eSRAM control register, I have ECC_ENABLE set to 0x0A, RMWCBPY also set to 0xA, SECINTEN set to 1.
RAMTHRESHOLD is set to 0x01. According to section 5.5.8.1 of the TRM, this should trigger SERR_INT, which is then connected to ESM channel 1.26.
In the ESM controller, ESMIESR1 is set to 0x4000040, to enable both the Flash ECC single bit interrupt (on channel 6) and the SRAM single bit interrupt on channel 26.
ESMILSR1 is set to 0x00 (all interrupts are low level, triggering IRQ2 on the VIM).
In the VIM, IRQ2 is enabled and triggers a ISR routine, which counts the number of flash and SRAM single bit errors.
All this works when I trigger a single-bit error in the Flash, using the -ecc:data_error parameter of the ARM linker.
A ESM interrupt is triggered on channel 6, which propagates through and my ISR is started.
I have a function to trigger an SRAM error, by disabling ECC, modifying a variable, re-enabling ECC and reading it back.
Whilst debugging this, I added code to clear RAMERRSTATUS (by writing 0x01) and read all the registers in case it is frozen, after disabling ECC, prior to re-enabling it.
This function causes RAMERRSTATUS (SECINTFLAG) in the eSRAM controller to change to 0x01, so the SECDED logic appears to be working.
However, no ESM interrupt is triggered.
There is no change to any of the ESM registers when SECINTFLAG changes to 1.
This setup should trigger a ESM low level interrupt via ESM channel 26.
Given the Flash ECC interrupt works and the SECINTFLAG is set in ESRAM, I'm at a loss as to what the problem could be.
It almost seems as if the SERR_INT output from the SRAM isn't connected to the ESM 1.26 input.