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.

F29H850TU: F29H850TU (SOM-EVM) multi-CPU: CPU3 main loop stops progressing when calling EPWM/GPIO driverlib APIs (works when single-stepping)

Part Number: F29H850TU

Hello,

I am using F29H850TU on the SOM-EVM in a multi-CPU project (CPU1 + CPU3).

The CPU-to-peripheral configuration appears to be correct: I can configure PWM and GPIO independently for CPU1 and CPU3, and I can also control them via the debugger/watch window (e.g., changing PWM period, toggling GPIO).

However, I am seeing an unusual runtime behavior on CPU3:

When I call driverlib functions such as: 
EPWM_setTimeBasePeriod(EPWM1XLINK_BASE, period_cnt2); 
GPIO_writePin(myGPIO0_test_CPU3, 1); 

from CPU3 main.c (inside the main while(1) loop), the software appears to “stick” and the main loop no longer progresses (e.g., a dummy variable increment inside while(1) stops updating). 

Observations

  • I have an RTDMA interrupt ISR configured. The ISR runs as intended.
  • When the issue occurs and I halt CPU3, the program counter is always inside the RTDMA ISR (not in NMI).
  • After halting, if I use Step Over, CPU3 is able to execute the driverlib call and proceed.
  • If I then press Continue/Resume, the issue returns: CPU3 appears stuck again and the code in while(1) does not execute.

What I tried

  • Compiler optimization is disabled for both CPUs.
  • I tested the led_ex1_blinky_cpu1_cpu3_multi example. That example runs fine, even after I add additional code.
  • I compared my project settings with the example but could not find the root cause so far.

Could you please advise what might cause CPU3 to stop making progress in the main loop only when calling certain driverlib APIs (EPWM/GPIO), while the RTDMA ISR continues to run? I suspect I am missing a configuration/setting (ownership, protection, interrupt/ack, etc.), but I’m currently stuck.

Best regards,
Gökhan

  • Hello,

    Let's first start with checking a few things regarding the RTDMA:

    • Can you confirm you are clearing the trigger in your DMA ISR? Or please add DMA_clearTriggerFlag() to your ISR if not present.
    • Can you also please verify the RTDMA ISR execution frequency? e.g. if you added a volatile counter in the ISR and halted after ~a second or so and check the count, what is the counter value?

    Best Regards,

    Allison