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.

TDA3: EDMA not triggering ISR after some transfers

Part Number: TDA3

Hi,

we are developing a SYS/BIOS bootloader for our customer on the M4_0 core of the TDA3. It's based on the starteware bootloader, but uses interrupts for the EDMA.

While distributing the sections of the flash image to DDR and IPU_RAM, the EDMA stops triggering the EDMA ISR.

This seems to only happen when copying the resetVecs section to the IPU_RAM. If the sections is not copied, everything works as expected.

  • The bootloader is running in OCMC with heap in DDR (memory map for applications is the same, except DDR is used instead of OCMC)
  • Only the EDMA and Timer interrupts are enabled
  • Only one task is used

More precise (stepping through the code):

  1. resetVecs are copied to the IPU_RAM
  2. other sections are copied to DDR
  3. the next section that should get copied is a valid DDR address
  4. EDMA transfer is triggered (manual mode)
  5. interrupt is shown as "pending" in ROV
  6. Semaphore_pend is called
  7. ISR does NOT get called
  8. When pausing, the system hangs on an unused DDR address with a instruction to branch to itself
  9. The timer interrupt shows "active" in ROV

What we already tried:

  1. Moving only the distribution function to a standalone application to get rid of other dependencies - same behavior
  2. Disabling cache - same behavior
  3. Separating bootloader and application heap - same behavior
  4. increasing the priority of the EDMA HWI interrupt to eliminate the impact of the timer interrupt - same behavior
  5. checked if pointers to Hwi_dispatchTable and Hwi_Module__root__V get overwritten - they don't
  6. changed from hal/timer to dmtimer - same behavior
  7. many things more...

Questions:

  1. How can we debug, why the ISR isn't called anymore?
  2. Where is the start address or register with the ISR address?
  3. Why is the timer interrupt active when the system has stopped working?

We are thankful for every tip to get this solved!

Best Regards,

Simon