Haawking DSC28027 经验贴
向上计数时
一、说明:
作者:覃陆奥
板卡版本:HX320F28027
IDE版本:Haawking IDE V0.5.3
编译器版本:HK100V1
二,寄存器设置
这个例程中 我们将PWM4设置为 递增计数模式(TBCTL 中的CTRMODE 设置为00), 周期设置为 300(TBPRD 设置为300), 使用GPIO6和GPIO7作为pwm输出管脚, 让当时间基准计数器的值等于CMPA的值,且正在增计数时,使EPWMxA电平翻转,输出高电平(EPwm4Regs.AQCTLA.bit.CAU=2;)(CAU=2时执行置位操作,使ePWMxA输出高电平)。 当时间基准计数器的值等于CMPB的值,且正在增计数时,使EPWMxB电平翻转输出高电平,输出高电平(EPwm4Regs.AQCTLB.bit.CBU=2;)(CBU=2时执行置位操作,使ePWMxA 输出高电平)。
时基计数器从0开始向上计数,当增加到周期寄存器的值(这个历程设为300),GPIO6 GPIO7产生下降沿,清零,继续这个操作。
三、程序编写 1.打开工程模板,
2.设定pwm波输出的gpio口初始化。
/* * 函数名:EpwmGpioInt * 入口参数:无 * 返回值:无 * 作用:gpio口初始化配置,输出一组pwm波形
复制代码
- {
- EALLOW;
- /*GPIO6禁止上拉*/
- GpioCtrlRegs.GPAPUD.bit.GPIO6=0;
- /*GPIO6复用为ePWM*/
- GpioCtrlRegs.GPAMUX1.bit.GPIO6=1;
- /*GPIO7禁止上拉*/
- GpioCtrlRegs.GPAPUD.bit.GPIO7=0;
- /*GPIO7复用为ePWM*/
- GpioCtrlRegs.GPAMUX1.bit.GPIO7=1;
- GpioDataRegs.GPASET.bit.GPIO6=1;
- EDIS;
- }
复制代码
3.设定时基寄存器中CTRMODE的工作方式和动作寄存器中cau,cbu等于计数值的操作.
/* * 函数名:Epwm4Init * 入口参数:无 * 返回值:无 * 作用:对pwm波形进行设置,设置时基寄存器动作寄存器的工作方式。
复制代码
- {
- EPwm4Regs.TBPRD=300;//周期=300*2*TBCLK counts
- EPwm4Regs.TBPHS.half.TBPHS=0x0000;//epwm时基计数器相位=0
- EPwm4Regs.TBCTR=0x0000;//当时基计数器等于零(TBCTR = 0x0000)时,影子寄存器的内容将传输到活动寄存器(TBPRD←TBPRD)
- EPwm4Regs.TBCTL.bit.CTRMODE=0;//上下计数模式
- EPwm4Regs.TBCTL.bit.PHSEN=1;/*禁止TBCTR加载相位寄存器TBPHS中的值*/
- EPwm4Regs.TBCTL.bit.HSPCLKDIV=0;//1分频
- EPwm4Regs.TBCTL.bit.CLKDIV=0;//1分频
- EPwm4Regs.CMPA.half.CMPA=105;//设置CMPA值为150,改变CMPA可改变占空比
- EPwm4Regs.CMPB=105;//设置CMPB值为150改变CMPB可改变占空比
- EPwm4Regs.CMPCTL.bit.SHDWAMODE=0;//CMPA寄存器工作模式选择:映射模式
- EPwm4Regs.AQCTLA.bit.CAU=0;//当时间基准计数器的值等于CMPA的值,且正在增计数时,使EPWMxA输出低电平 0不做操作,1清零,2置位
- EPwm4Regs.AQCTLA.bit.CAD=2;//时基计数器等于CMPA时,且正在减计数时,强制EPWMxA输出高电平
- EPwm4Regs.AQCTLB.bit.CBU=0;//当时间基准计数器的值等于CMPB的值,且正在增计数时,使EPWMxB输出低电平 0不做操作,1清零,2置位
- EPwm4Regs.AQCTLB.bit.CBD=2;//时基计数器等于CMPB时,且正在减计数时,强制EPWMxB输出高电平
- Cputimer0Regs.TCR.bit.SOFT = 0;
- CpuTimer0Regs.TCR.bit.FREE = 1;
- }
复制代码
- int main(void)
- {
- InitSysCtrl();//初始化系统控制:PLL,WatchDog,使能外设时钟。
- EPwm4Regs.ETSEL.bit.INTEN=0;//禁止epwm4
- EALLOW;
- SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC=0;//每个启用的ePWM模块中的TBCLK(时基时钟)均已停止
- EDIS;
- Epwm4Init();//初始化Epwm4
- EpwmGpioInt();//epwm引脚配置
- EALLOW;
- SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC=1;//所有使能的ePWM模块同步使用TBCLK
- EDIS;
- EINT;
- ERTM;
- while(1)
- {
- }
- return 0;
- }
复制代码
四、程序现象 最小系统板上的gpio6和gpio7连接示波器,显示一组相同的占空比为50%周期为1980kHZ的pwm波形。
|