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
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(;;) { }
|
|
|
|
}
|