📄 f280xpwmdac.c
字号:
/* ==================================================================================
File name: F280XPWMDAC.C
Originator: Digital Control Systems Group
Texas Instruments
Description: This file contains source for the Full Compare PWMDAC drivers for the F280x
Target: TMS320F280x family
=====================================================================================
History:
-------------------------------------------------------------------------------------
04-15-2005 Version 3.20: Using DSP280x v. 1.10 or higher
------------------------------------------------------------------------------------*/
#include "DSP280x_Device.h"
#include "f280xpwmdac.h"
void F280X_PWMDAC_Init(PWMDAC *p)
{
// Setup Sync
EPwm1Regs.TBCTL.bit.SYNCOSEL = 0; // Pass through
EPwm2Regs.TBCTL.bit.SYNCOSEL = 0; // Pass through
EPwm3Regs.TBCTL.bit.SYNCOSEL = 0; // Pass through
EPwm4Regs.TBCTL.bit.SYNCOSEL = 0; // Pass through
EPwm5Regs.TBCTL.bit.SYNCOSEL = 0; // Pass through
EPwm6Regs.TBCTL.bit.SYNCOSEL = 0; // Pass through
// Allow each timer to be sync'ed
EPwm1Regs.TBCTL.bit.PHSEN = 1;
EPwm2Regs.TBCTL.bit.PHSEN = 1;
EPwm3Regs.TBCTL.bit.PHSEN = 1;
EPwm4Regs.TBCTL.bit.PHSEN = 1;
EPwm5Regs.TBCTL.bit.PHSEN = 1;
EPwm6Regs.TBCTL.bit.PHSEN = 1;
// Init Timer-Base Period Register for EPWM4-EPWM6
EPwm4Regs.TBPRD = p->PeriodMax;
EPwm5Regs.TBPRD = p->PeriodMax;
EPwm6Regs.TBPRD = p->PeriodMax;
// Init Timer-Base Phase Register for EPWM4-EPWM6
EPwm4Regs.TBPHS.half.TBPHS = 0;
EPwm5Regs.TBPHS.half.TBPHS = 0;
EPwm6Regs.TBPHS.half.TBPHS = 0;
// Init Timer-Base Control Register for EPWM4-EPWM6
EPwm4Regs.TBCTL.all = PWMDAC_INIT_STATE;
EPwm5Regs.TBCTL.all = PWMDAC_INIT_STATE;
EPwm6Regs.TBCTL.all = PWMDAC_INIT_STATE;
// Init Compare Control Register for EPWM4-EPWM6
EPwm4Regs.CMPCTL.all = PWMDAC_CMPCTL_INIT_STATE;
EPwm5Regs.CMPCTL.all = PWMDAC_CMPCTL_INIT_STATE;
EPwm6Regs.CMPCTL.all = PWMDAC_CMPCTL_INIT_STATE;
// Init Action Qualifier Output A Register for EPWM4-EPWM6
EPwm4Regs.AQCTLA.all = PWMDAC_AQCTLA_INIT_STATE;
EPwm5Regs.AQCTLA.all = PWMDAC_AQCTLA_INIT_STATE;
EPwm6Regs.AQCTLA.all = PWMDAC_AQCTLA_INIT_STATE;
// Init Dead-Band Generator Control Register for EPWM4-EPWM6
EPwm4Regs.DBCTL.all = PWMDAC_DBCTL_INIT_STATE;
EPwm5Regs.DBCTL.all = PWMDAC_DBCTL_INIT_STATE;
EPwm6Regs.DBCTL.all = PWMDAC_DBCTL_INIT_STATE;
// Init Dead-Band Generator Falling/Rising Edge Delay Register for EPWM4-EPWM6
EPwm4Regs.DBFED = PWMDAC_DBCNT_INIT_STATE;
EPwm4Regs.DBRED = PWMDAC_DBCNT_INIT_STATE;
EPwm5Regs.DBFED = PWMDAC_DBCNT_INIT_STATE;
EPwm5Regs.DBRED = PWMDAC_DBCNT_INIT_STATE;
EPwm6Regs.DBFED = PWMDAC_DBCNT_INIT_STATE;
EPwm6Regs.DBRED = PWMDAC_DBCNT_INIT_STATE;
// Init PWM Chopper Control Register for EPWM4-EPWM6
EPwm4Regs.PCCTL.all = PWMDAC_PCCTL_INIT_STATE;
EPwm5Regs.PCCTL.all = PWMDAC_PCCTL_INIT_STATE;
EPwm6Regs.PCCTL.all = PWMDAC_PCCTL_INIT_STATE;
EALLOW; // Enable EALLOW
// Init Trip Zone Select Register
EPwm4Regs.TZSEL.all = PWMDAC_TZSEL_INIT_STATE;
EPwm5Regs.TZSEL.all = PWMDAC_TZSEL_INIT_STATE;
EPwm6Regs.TZSEL.all = PWMDAC_TZSEL_INIT_STATE;
// Init Trip Zone Control Register
EPwm4Regs.TZCTL.all = PWMDAC_TZCTL_INIT_STATE;
EPwm5Regs.TZCTL.all = PWMDAC_TZCTL_INIT_STATE;
EPwm6Regs.TZCTL.all = PWMDAC_TZCTL_INIT_STATE;
// Setting six EPWM as primary output pins
GpioCtrlRegs.GPAMUX1.bit.GPIO6 = 1; // EPWM4A pin
GpioCtrlRegs.GPAMUX1.bit.GPIO7 = 1; // EPWM4B pin
GpioCtrlRegs.GPAMUX1.bit.GPIO8 = 1; // EPWM5A pin
GpioCtrlRegs.GPAMUX1.bit.GPIO9 = 1; // EPWM5B pin
GpioCtrlRegs.GPAMUX1.bit.GPIO10 = 1; // EPWM6A pin
GpioCtrlRegs.GPAMUX1.bit.GPIO11 = 1; // EPWM6B pin
EDIS; // Disable EALLOW
}
void F280X_PWMDAC_Update(PWMDAC *p)
{
int32 Tmp;
// Update Timer-Base period Registers
EPwm4Regs.TBPRD = p->PeriodMax;
EPwm5Regs.TBPRD = p->PeriodMax;
EPwm6Regs.TBPRD = p->PeriodMax;
// Compute the compare A (Q0) from the EPWM4 A&B duty cycle ratio (Q15)
Tmp = (int32)p->PeriodMax*(int32)(*p->PwmDacInPointer0); // Q15 = Q0*Q15
EPwm4Regs.CMPA.half.CMPA = (int16)(Tmp>>16) + (int16)(p->PeriodMax>>1); // Q0 = (Q15->Q0)/2 + (Q0/2)
// Compute the compare A (Q0) from the EPWM5 A&B duty cycle ratio (Q15)
Tmp = (int32)p->PeriodMax*(int32)(*p->PwmDacInPointer1); // Q15 = Q0*Q15
EPwm5Regs.CMPA.half.CMPA = (int16)(Tmp>>16) + (int16)(p->PeriodMax>>1); // Q0 = (Q15->Q0)/2 + (Q0/2)
// Compute the compare A (Q0) from the EPWM6 A&B duty cycle ratio (Q15)
Tmp = (int32)p->PeriodMax*(int32)(*p->PwmDacInPointer2); // Q15 = Q0*Q15
EPwm6Regs.CMPA.half.CMPA = (int16)(Tmp>>16) + (int16)(p->PeriodMax>>1); // Q0 = (Q15->Q0)/2 + (Q0/2)
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -