Part Number: TMS320F28379D
We have our system set up for dual core with PWMs enabled and controlled on separate cores. For some reason PWMs only output on CPU2 and not CPU1. Here's a list of PWMs we are using on each core:
PWMs (CPU1):
- EPWM2 (channel A & B)
- EPWM3 (channel A & B) --> also used by the TI BiSS-C Position Manager Library (needed for CLB used by BiSS-C library, shouldn't conflict as far as we know)
- EPWM4 (channel A & B) --> also used by the TI BiSS-C Position Manager Library (needs to be enabled for BiSS-C library internal clock generation, shouldn't conflict as far as we know)
- EPWM5 (channel A & B)
- EPWM10 (channel A & B)
- EPWM11 (channel B)
PWMs (CPU2):
- EPWM1 (channel A)
- EPWM11 (channel A) --> currently disabled so CPU1 may use EPWM11 channel B
- EPWM12 (channel A)
We used the TI examples provided for PWM initialization. All PWMs work fine on a single core (CPU1), but after the dual core split only CPU2 PWMs seem to work.
At first I thought it might be related to a GTBCLKSYNC issue, so I implemented the recommended PWM initialization flow found in the following TI post, but it doesn't seem to fix the issue:

Currently our PWM initialization flow goes like this:
On CPU1:
- Enable CPU1 PWM peripherals (EPWM2, EPWM3, EPWM4, EPWM5, EPWM10, EPWM11)
- Give access to CPU2 for any CPU2 PWM peripherals (EPWM1 and EPWM12)
- Set EPWM clock divider to SYSCTL_EPWMCLK_DIV_2
- Disable GTBCLKSYNC
- Initialize each CPU1 PWM (except EPWM4):
- set time base period
- set phase shift to 0
- set time base counter to 0
- set emulation mode to EPWM_EMULATION_FREE_RUN
- set time base counter mode to EPWM_COUNTER_MODE_UP
- disable phase shift load
- set clock prescaler to EPWM_CLOCK_DIVIDER_1 and EPWM_HSCLOCK_DIVIDER_1
- for each channel set counter compare value to 0 (CMPA or CMPB)
- for each channel set action qualifier to EPWM_AQ_OUTPUT_ON_TIMEBASE_ZERO and EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPA (or CMPB)
- set period load event to EPWM_SHADOW_LOAD_MODE_COUNTER_ZERO
- Initialize EPWM4 (based on BiSS-C Position Manager Library example)
- set TZCTL TZA = 1
- set TZCTL TZB = 1
- set TZFRC OST = 1
- Kickoff CPU2 PWM init and wait for it to finish
- Enable GTBCLKSYNC
On CPU2:
- Set EPWM clock divider to SYSCTL_EPWMCLK_DIV_2
- Initialize each CPU2 PWM (same process as above)
- Let CPU1 know CPU2 PWM init is complete
The PWMs that I've checked on CPU1 that do not output anything but I see some register values changed are EPWM3 and EPWM10. The working PWM I've checked on CPU2 is EPWM1. Is there any registers I might check to ensure that at least the PWM module itself is functioning as normal on CPU1 when I go to set the duty cycle (CMPA and CMPB values)?
Also is setting the EPWM clock divider necessary on both cores?

