Hello.
I use F28M35H52C1 Concerto Control Card with dockStantion. Code Composer Studio Version: 5.5.0.00077.
Four days I tried launch PWM. And I got some result, but not finished. Help me please =(. I don't understand where I made mistake.
My scope show me next signal from PWM1A :
But I set PERIOD =1000 and DUTY_CYCLE=500.
Below I attached my code:
/*
* main.c
*/
#include "DSP28x_Project.h" // Device Headerfile and Examples Include File
#define DUTY_CYCLE 500
#define PERIOD 1000
void ConfigEpwm1( void );
int main(void)
{
// Step 1. Initialize System Control:
// Enable Peripheral Clocks
// This example function is found in the F28M35x_SysCtrl.c file.
InitSysCtrl();
// Step 2. Initalize GPIO:
InitEPwm1Gpio();
// Step 3. Clear all interrupts and initialize PIE vector table:
// Disable CPU interrupts
DINT;
// Disable CPU interrupts and clear all CPU interrupt flags:
IER = 0x0000;
IFR = 0x0000;
EALLOW;
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0; // Stop all the TB clocks
EDIS;
ConfigEpwm1();
EALLOW;
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1; // Start all the timers synced
EDIS;
for(;;)
{
asm (" NOP");
}
}
void ConfigEpwm1( void )
{
// Assumes ePWM1 clock is already enabled in InitSysCtrl();
EALLOW;
// Configure PWM timers
EPwm1Regs.TBPRD = PERIOD; // Period = 1201 TBCLK counts
EPwm1Regs.TBPHS.half.TBPHS = 0; // Set Phase register to zero
EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; // Asymmetrical mode
EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; // Phase loading disabled
EPwm1Regs.TBCTL.bit.PRDLD = TB_SHADOW;
EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_DISABLE;
EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO; // load on CTR=Zero
EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO; // load on CTR=Zero
EPwm1Regs.AQCTLA.bit.PRD = AQ_CLEAR;
EPwm1Regs.AQCTLA.bit.CAU = AQ_SET;
//EPwm1Regs.CMPC = DUTY_CYCLE;
EPwm1Regs.CMPA.half.CMPA=DUTY_CYCLE;
// EPwm1Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO; // Select INT on Zero event
// EPwm1Regs.ETSEL.bit.INTEN = PWM1_INT_ENABLE; // Enable INT
//EPwm1Regs.ETPS.bit.INTPRD = ET_1ST; // Generate INT on 1st event
EDIS;
}
And next code from M3:
int main(void)
{
int i = 0;
// Allow writes to protected registers.
HWREG(SYSCTL_MWRALLOW) = 0xA5A5A5A5;
// Sets up PLL, M3 running at 75MHz and C28 running at 150MHz
SysCtlClockConfigSet(SYSCTL_USE_PLL | (SYSCTL_SPLLIMULT_M & 0xF) |
SYSCTL_SYSDIV_1 | SYSCTL_M3SSDIV_2 |
SYSCTL_XCLKDIV_4);
// Enable all GPIOs
// PinoutSet();
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
// Enable Pullups on EPWM(1-8)A/B capable pins
GPIOPadConfigSet(GPIO_PORTA_BASE, 0xFF, GPIO_PIN_TYPE_STD_WPU);
// GPIOPadConfigSet(GPIO_PORTB_BASE, 0xFF, GPIO_PIN_TYPE_STD_WPU);
// Give C28 control of all GPIOs
GPIOPinConfigureCoreSelect(GPIO_PORTA_BASE, 0xFF, GPIO_PIN_C_CORE_SELECT);
// Unlock the register to change the commit register value for Port B Pin 7
// This disables the NMI functionality on the pin and allows other muxing
// options to be used
HWREG(GPIO_PORTB_BASE+GPIO_O_LOCK) = GPIO_LOCK_KEY_DD;
// Write to commit register
HWREG(GPIO_PORTB_BASE+GPIO_O_CR) |= 0x000000FF;
// Delay
for (i=0;i<20;i++){};
IPCMtoCBootControlSystem(CBROM_MTOC_BOOTMODE_BOOT_FROM_FLASH);
// Disable clock supply for the watchdog modules
SysCtlPeripheralDisable(SYSCTL_PERIPH_WDOG1);
SysCtlPeripheralDisable(SYSCTL_PERIPH_WDOG0);
//Enable processor interrupts.
IntMasterEnable();
// Main Code
while(1) ;
}
