您好!
使用 ePWM 死区示例进行即时消息传递。 设置如下:
EPwm1Regs.TBPRD = 5555;//设置定时器周期
EPwm1Regs.TBPHS.bit.TBPHS = 0x0000;//相位为0
EPwm1Regs.TBCTR = 0x0000;//清除计数器
//
//设置 TBCLK
//
EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;//向上计数
EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE;//禁用相位加载
EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;//时钟与 SYSCLKOUT 的比率
EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1;
EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADODE;//每0加载一次寄存器
EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;
//
//设置比较
//
EPwm1Regs.CMPA.bit.CMPA = 2777;
//
//设置操作
//
EPwm1Regs.AQCTLA.bit.CAU = AQ_SET;//将 PWM1A 设置为零
EPwm1Regs.AQCTLA.bit.CAD = AQ_CLEAR;
EPwm1Regs.AQCTLB.bit.CAU = AQ_CLEAR;//将 PWM1A 设置为零
EPwm1Regs.AQCTLB.bit.CAD = AQ_SET;
//
//低电平有效 PWM -设置死区
//
EPwm1Regs.DBCTL.bit.OUT_MODE = DB_FUL_ENABLE;
EPwm1Regs.DBCTL.bit.POLSEL = DB_ACTV_LO;
EPwm1Regs.DBCTL.bit.IN_MODE = DBA_ALL;
EPwm1Regs.DBRED.bit.DBRED = EPWM1_MIN_DB;
EPwm1Regs.DBFED.bit.DBFED = EPWM1_MIN_DB;
EPwm1_DB_DIRECTION = DB_UP;
//
//中断,我们将在其中更改死区
//
EPwm1Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO;//选择零事件时的 INT
EPwm1Regs.ETSEL.bit.INTEN = 1;//启用 INT
EPwm1Regs.ETPS.bit.INTPRD = et_1st;//在第三个事件发生时生成 INT
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
从将 TBPRD 设置为200MHz 开始、我应该得到18kHz ePWM。
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
PLL 设置
//乘法器和除法器、用于配置25MHz XTAL 的200MHz SYSPLL 输出
//
#define SYS_IMULT IMULT_32
#define SYS_REFDIV REFDIV_2
#define SYS_ODIV ODIV_2
#define SYS_DIV PLLCLK_By_1
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
但我得到的是9kHz 频率 ePWM。 因此、我认为 PLL 输出是100MHz、而不是200MHz。
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
变化
#define SYS_IMULT IMULT_32
#define SYS_REFDIV REFDIV_1
#define SYS_ODIV ODIV_2
#define SYS_DIV PLLCLK_By_1
或
#define SYS_IMULT IMULT_32
#define SYS_REFDIV REFDIV_2
#define SYS_ODIV ODIV_1
#define SYS_DIV PLLCLK_By_1
我将获得18kHz 的 ePWM、我认为 PLL 时钟为200MHz
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
InitSysPll (XTAL_OSC、SYS_IMULT、SYS_REFDIV、SYS_ODIV、SYS_DIV、 SYSCTL_DCC_BASE0);
第二个问题: SYSCTL_DCC_BASE0的用途是什么。
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
请帮助我理解这一点。 通过设置 PLL、Im 不获得所需的 ePWM 频率。