主题中讨论的其他器件:C2000WARE
工具/软件:Code Composer Studio
您好!
我使用 C:\ti\c2000\C2000Ware_1_00_03_00\device_support\f2837xs\examples\CPU1\ePWM_死 区中的示例配置了 ePWM2、但我遇到了问题。 当我将 ePWM2A 连接到示波器时、我没有看到波形。 示波器上的 ePWM2A 始终为高电平。
#include "F28x_Project.h"
#define EPWM1_MAX_DB 0x03FF
#define EPWM2_MAX_DB 0x03FF
#define EPWM3_MAX_DB 0x03FF
#define EPWM1_MIN_DB 0
#define EPWM2_MIN_DB 0
#define EPWM3_MIN_DB 0
#define EPWM3_UP 1
#define DB_DOWN 0
uint32 EPwm2TimerIntCount;
uint16 EPwm2_DB_DIRECTION;
void InitEPwm2Example (void);
__interrupt void epwm2_ISR (void);
void main (void)
{
InitSysCtrl();
CpuSysRegs.PCLKCR2.bit.EPWM2=1;
InitEPwm2Gpio();
Dint;
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
EALLOW;//这是写入 EALLOW 受保护寄存器所必需的
PieVectTable.EPWM2_INT =&epwm2_ISR;
EDIS;
EALLOW;
CpuSysRegs.PCLKCR0.bit.TBCLKSYNC =0;
EDIS;
InitEPwm2Examples();
EALLOW;
CpuSysRegs.PCLKCR0.bit.TBCLKSYNC=1;
EDIS;
EPwm2TimerIntCount = 0;
IER |= M_INT3;
PieCtrlRegs.PIEIER3.bit.INTx2 = 1;
EINT;//启用全局中断 INTM
ERTM;//启用全局实时中断 DBGM
for (;;)
{
ASM (" NOP");
}
}
// epwm2_ISR - EPWM2 ISR
__interrupt void epwm2_ISR (void)
{
if (EPwm2_DB_DIRECTION = DB_UP)
{
if (EPwm2Regs.DBFED.bit.DBFED < EPWM2_MAX_DB)
{
EPwm2Regs.DBFED.bit.DBFED++;
EPwm2Regs.DBRED.bit.DBRED++;
}
其他
{
EPwm2_DB_DIRECTION = DB_DOWN;
EPwm2Regs.DBFED.bit.DBFED--;
EPwm2Regs.DBRED.bit.DBRED--;
}
}
其他
{
if (EPwm2Regs.DBFED.bit.DBFED = EPWM2_MIN_DB)
{
EPwm2_DB_DIRECTION = DB_UP;
EPwm2Regs.DBFED.bit.DBFED++;
EPwm2Regs.DBRED.bit.DBRED++;
}
其他
{
EPwm2Regs.DBFED.bit.DBFED--;
EPwm2Regs.DBRED.bit.DBRED--;
}
}
EPwm2TimerIntCount++;
EPwm2Regs.ETCLR.bit.INT = 1;
PieCtrlRegs.PIEACX.ALL = PIEACK_Group3;
}
void InitEPwm2Examples()
{
EPwm2Regs.TBPRD = 6000; //设置计时器周期
EPwm2Regs.TBPHS.bit.TBPHS = 0x0000; //相位为0
EPwm2Regs.TBCTR = 0x0000; //清除计数器
EPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;//向上计数
EPwm2Regs.TBCTL.bit.PHSEN = TB_DISABLE; //禁用相位加载
EPwm2Regs.TBCTL.bit.HSPCLKDIV = TB_DIV4; //时钟与 SYSCLKOUT 的比率
EPwm2Regs.TBCTL.bit.CLKDIV = TB_DIV4; //慢,只观察一下
//范围
EPwm2Regs.CMPA.bit.CMPA = 3000;
EPwm2Regs.AQCTLA.bit.CAU = AQ_SET; //将 PWM2A 设置为零
EPwm2Regs.AQCTLA.bit.CAD = AQ_CLEAR;
EPwm2Regs.AQCTLB.bit.CAU = AQ_CLEAR; //将 PWM2A 设置为零
EPwm2Regs.AQCTLB.bit.CAD = AQ_SET;
EPwm2Regs.DBCTL.bit.OUT_MODE = DB_FUL_ENABLE;
EPwm2Regs.DBCTL.bit.POLSEL = DB_ACTV_LOC;
EPwm2Regs.DBCTL.bit.IN_MODE = DBA_ALL;
EPwm2Regs.DBRED.bit.DBRED = EPWM2_MIN_DB;
EPwm2Regs.DBFED.bit.DBFED = EPWM2_MIN_DB;
EPwm2_DB_DIRECTION = DB_UP;
EPwm2Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO; //选择“零时 INT”事件
EPwm2Regs.ETSEL.bit.INTEN = 1; //启用 INT
EPwm2Regs.ETPS.bit.INTPRD = et_3rd; //生成第3个事件的 INT
}
提前感谢您的帮助
此致
Szymon
