各位老师好,我用DSP2812 中EvaRegs的T2CNT计数器寄存器对脉冲进行计数,计数完后,需要清零如EvaRegs.T2CNT=0; 但是通过查看并不为零,而是一个不固定的值。求老师教我解决,如何对EvaRegs的T2CNT计数器寄存器清零。谢谢
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
各位老师好,我用DSP2812 中EvaRegs的T2CNT计数器寄存器对脉冲进行计数,计数完后,需要清零如EvaRegs.T2CNT=0; 但是通过查看并不为零,而是一个不固定的值。求老师教我解决,如何对EvaRegs的T2CNT计数器寄存器清零。谢谢
我也是新手,你是配置完成后生成PWM吗?我有个配置的代码,可以完整生成PWM,只改变红色部分就能改变PWM频率和占空比;
/****************************************************************************
*
*文件名:DSP28_Ev.c
*
*功 能:2812事件管理器的初始化函数,包括了EVA和EVB的初始化
*
*作 者:
*
****************************************************************************/
#include "DSP28_Device.h"
/****************************************************************************
*
*名 称:InitEv()
*
*功 能:初始化EVA或者EVB,本例中EVA和EVB均产生占空比为40%PWM波形,EVA下面的
* 定时器均工作于连续增模式,而EVB下面的定时器均工作于连续增/减模式,各
* 个全比较单元的死区时间为4.27us
*
*入口参数:无
*
*出口参数:无
*
****************************************************************************/
void InitEv(void)
{
//EVA模块
EvaRegs.T1CON.bit.TMODE=2; //连续增模式
EvaRegs.T1CON.bit.TPS=1; //T1CLK=HSPCLK/2=37.5M
EvaRegs.T1CON.bit.TENABLE=0; //暂时禁止T1计数
EvaRegs.T1CON.bit.TCLKS10=0; //使用内部时钟,T1CLK
EvaRegs.T1CON.bit.TECMPR=1; //使能定时器比较操作
EvaRegs.T2CON.bit.TMODE=2; //连续增模式
EvaRegs.T2CON.bit.TPS=1; //T2CLK=HSPCLK/2=37.5M
EvaRegs.T2CON.bit.TENABLE=0; //暂时禁止T2计数
EvaRegs.T2CON.bit.TCLKS10=0; //使用内部时钟,T2CLK
EvaRegs.T2CON.bit.TECMPR=1; //使能定时器比较操作
EvaRegs.GPTCONA.bit.TCOMPOE=1; //定时器比较输出T1PWM_T1CMPR和T2PWM_T2CMPR由各自的定时器比较逻辑驱动
EvaRegs.GPTCONA.bit.T1PIN=1; //低电平有效
EvaRegs.GPTCONA.bit.T2PIN=2; //高电平有效
EvaRegs.T1PR=0x927B; //1KHz的PWM,周期为1ms
EvaRegs.T1CMPR=0x3A98; //占空比为40%,低电平有效
EvaRegs.T1CNT=0;
EvaRegs.T2PR=0x927B; //1KHz的PWM,周期为1ms
EvaRegs.T2CMPR=0x57E4; //占空比为40%,高电平有效
EvaRegs.T2CNT=0;
EvaRegs.COMCONA.bit.CENABLE=1; //使能比较单元的比较操作
EvaRegs.COMCONA.bit.FCOMPOE=1; //全比较输出,PWM1-6引脚均由相应的比较逻辑驱动
EvaRegs.COMCONA.bit.CLD=2;
//死区时间为:4.27us
EvaRegs.DBTCONA.bit.DBT=10; //死区定时器周期,m=10
EvaRegs.DBTCONA.bit.EDBT1=1; //死区定时器1使能位
EvaRegs.DBTCONA.bit.EDBT2=1; //死区定时器2使能位
EvaRegs.DBTCONA.bit.EDBT3=1; //死区定时器3使能位
EvaRegs.DBTCONA.bit.DBTPS=4, //死区定时器预定标因子 Tdb=37.5M/16=2.34M
EvaRegs.ACTR.all=0x0999; //设定引脚PWM1-PWM6的动作属性
EvaRegs.CMPR1=0x3A98; //PWM1占空比为40%
EvaRegs.CMPR2=0x3A98; //PWM3占空比为40%
EvaRegs.CMPR3=0x3A98; //PWM5占空比为40%
//EVB模块
EvbRegs.T3CON.bit.TMODE=1; //连续增/减模式
EvbRegs.T3CON.bit.TPS=1; //T3CLK=HSPCLK/2=37.5M
EvbRegs.T3CON.bit.TENABLE=0; //暂时禁止T3计数
EvbRegs.T3CON.bit.TCLKS10=0; //使用内部时钟,T3CLK
EvbRegs.T3CON.bit.TECMPR=1; //使能定时器比较操作
EvbRegs.T4CON.bit.TMODE=1; //连续增/减模式
EvbRegs.T4CON.bit.TPS=1; //T4CLK=HSPCLK/2=37.5M
EvbRegs.T4CON.bit.TENABLE=0; //暂时禁止T4计数
EvbRegs.T4CON.bit.TCLKS10=0; //使用内部时钟,T4CLK
EvbRegs.T4CON.bit.TECMPR=1; //使能定时器比较操作
EvbRegs.GPTCONB.bit.TCOMPOE=1; //定时器比较输出T3PWM_T3CMPR和T4PWM_T4CMPR由各自的定时器比较逻辑驱动
EvbRegs.GPTCONB.bit.T3PIN=1; //低电平有效
EvbRegs.GPTCONB.bit.T4PIN=2; //高电平有效
EvbRegs.T3PR=0x493E; //1KHz的PWM,周期为1ms
EvbRegs.T3CMPR=0x1D4C; //占空比为40%,低电平有效
EvbRegs.T3CNT=0;
EvbRegs.T4PR=0x493E; //1KHz的PWM,周期为1ms
EvbRegs.T4CMPR=0x2BF2; //占空比为40%,高电平有效
EvbRegs.T4CNT=0;
EvbRegs.COMCONB.bit.CENABLE=1; //使能比较单元的比较操作
EvbRegs.COMCONB.bit.FCOMPOE=1; //全比较输出,PWM7-12引脚均由相应的比较逻辑驱动
EvbRegs.COMCONB.bit.CLD=2;
//死区时间为:4.27us
EvbRegs.DBTCONB.bit.DBT=10; //死区定时器周期,m=10
EvbRegs.DBTCONB.bit.EDBT1=1; //死区定时器1使能位
EvbRegs.DBTCONB.bit.EDBT2=1; //死区定时器2使能位
EvbRegs.DBTCONB.bit.EDBT3=1; //死区定时器3使能位
EvbRegs.DBTCONB.bit.DBTPS=4, //死区定时器预定标因子 Tdb=37.5M/16=2.34M
EvbRegs.ACTRB.all=0x0999; //设定引脚PWM7-PWM12的动作属性
EvbRegs.CMPR4=0x1D4C; //PWM7占空比为40%d4c
EvbRegs.CMPR5=0x1D4C; //PWM9占空比为40%
EvbRegs.CMPR6=0x1D4C; //PWM11占空比为40%
}