You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

99 lines
2.4 KiB
C

/* Gerardo Marx
21/Oct/2026
Objective:
- ePWM1 (ePWM1A and ePWM1A) and ePWM2 will be controlled CPU1
- ePWM4 and ePWM5 will be controlled CPU2
- CPU1: ePWM1 (GPIO0 and GPIO1 outputs), up-count, 10KHz, and D=0.4
- CPU1: ePWM2 (GPIO2 and GPIO3), up-down, 5KHz, and m=-0.3
- CPU2: ePWM4 (GPIO6 and GPIO7), up-count, 15KHz, and D=0.6
- CPU2: ePWM5 (GPIO8 and GPIO8), up-down, 4KHz, and m=+0.7
*/
// libreries
#include "F28x_Project.h"
#include "driverlib.h"
#include "device.h"
// interrupts
//main
void main(void)
{
// 1. Initialize the system and interrupts
InitSysCtrl();
EALLOW;
ClkCfgRegs.PERCLKDIVSEL.bit.EPWMCLKDIV = 1; // 50MHz
EDIS;
// 2. Select the ePWM clocks and assign CPU ownership
EALLOW;
DevCfgRegs.CPUSEL0.bit.EPWM1 = 0; //cpu1
DevCfgRegs.CPUSEL0.bit.EPWM2 = 0; //cpu1
DevCfgRegs.CPUSEL0.bit.EPWM4 = 1; //cpu2
DevCfgRegs.CPUSEL0.bit.EPWM5 = 1; //cpu2
EDIS;
// 3. Enable ePWM1 and ePWM2 clocks
EALLOW;
CpuSysRegs.PCLKCR2.bit.EPWM1 = 1; //Module clock on
CpuSysRegs.PCLKCR2.bit.EPWM2 = 1; //Module clock on
EDIS;
// 4. Stop time-base synchronization
EALLOW;
CpuSysRegs.PCLKCR0.bit.TBCLKSYNC = 0; // stop time base counter
EDIS;
// 5. Configure TB and CC.
// Configure epwm 1 and 2
//Time base sub-module ePWM1
// 100MHz -> TBCLK = 100MHz/(HSPCLKDIV*CLKDIV) -> 50MHz
// 2 * 1
EPwm1Regs.TBCTL.bit.FREE_SOFT = 2; // free run
EPwm1Regs.TBCTL.bit.CLKDIV = 0; // 1
EPwm1Regs.TBCTL.bit.HSPCLKDIV = 1; // 2
EPwm1Regs.TBCTL.bit.PRDLD = 0; //shadow mode
EPwm1Regs.TBCTL.bit.CTRMODE = 0; //up-count mode
//Time base sub-module ePWM2
// 100MHz -> TBCLK = 100MHz/(HSPCLKDIV*CLKDIV) -> 50MHz
// 2 * 1
EPwm2Regs.TBCTL.bit.FREE_SOFT = 2; // free run
EPwm2Regs.TBCTL.bit.CLKDIV = 0; // 1
EPwm2Regs.TBCTL.bit.HSPCLKDIV = 1; // 2
EPwm2Regs.TBCTL.bit.PRDLD = 0; //shadow mode
EPwm2Regs.TBCTL.bit.CTRMODE = 2; //up-down count mode
// Period registers:
EPwm1Regs.TBPRD = 5000-1; // 10KHz sawtooth
EPwm2Regs.TBPRD = 5000; // 5KHz triangular
// 6. Configure AQ and dead band.
// 7. Configure event trigger and trip-zones.
// 8. Register and enable interrupts.
// 9. Configure PWM GPIOs, diagnostic pin, and X-BAR
// 10. Confirm fault condition and syncronize startup.
for(;;) { }
}