首页 > 编程知识 正文

dsp历程,6713芯片手册

时间:2023-05-04 01:30:53 阅读:30943 作者:1476

# include ' ds p28 x _ project.h '/configuretheperiodforeachtimer # defineepwm1_ timer _ TB prd 3750///period register defineepwm1_ start _ cmpa 1900//PWM通道a初始占空比# defineepwm1_ start _ cmpb 1900//PWM通道b初始占空比voidchangeduty () EPwm1Regs.CMPA.half.CMPA=Duty; //setcompareavalueepwm1regs.cmpb=duty; //setcomparebvalue } void PWM1_ init (//PWM (/*的初始化首先进行PWM1引脚的初始化。 由于PWM1引脚是GPIO0和GPIO1,因此这两个引脚也可以在常规IO端口上复用输出PWM。 在此选择复用功能*:gpioctrlregs.gp apud.bit.gpio0=0; //enablepull-upongpio0(EPWM1a ) gpioctrlregs.gp apud.bit.gpio1=0; //enablepull-upongpio1(EPWM1b ) gpioctrlregs.GPA mux1. bit.gpio0=1; //Configure GPIO0 as EPWM1A复用功能设置,0为常规IO端口gpioctrlregs.GPA mux1. bit.gpio1=1; //Configure GPIO1 as EPWM1B EDIS; EALLOW; sysctrlregs.pclk Cr0. bit.tbclksync=0; //Stop all the TB clocks EDIS; //setuptbclkepwm1regs.TB prd=EP wm1 _ timer _ TB prd-1; //设定周期EP wm1 regs.TB PHS.half.TB PHS=0x 0000; //这表示相位,不知道EPwm1Regs.TBCTR=0x0000; //clear counter//setcomparevaluesepwm1regs.cmpa.half.cmpa=EP wm1 _ start _ cmpa; //setcompareavalueepwm1regs.cmpb=EP wm1 _ start _ cmpb; //setcomparebvalue//setupcountermodeepwm1regs.TB CTL.bit.CTR mode=TB _ count _ up down; //计数模式EP wm1 regs.TB CTL.bit.PHS en=TB _ disable; //disablephaseloadingepwm1regs.TB CTL.bit.hspclkdiv=TB _ div 2; //这里是2分频EP wm1 regs.TB CTL.bit.clk div=TB _ div 2; //这里也是2分频//setupshadowingepwm1regs.CMP CTL.bit.shdwamode=cc _ shadow; //阴影寄存器和新EP wm1 regs.CMP CTL.bit.shdwbmode=cc _ shadow; EP wm1 regs.CMP CTL.bit.load amode=cc _ CTR _ zero; //loadonzeroepwm1regs.CMP CTL.bit.loadbmode=cc _ CTR _ zero; //setaction sepwm1regs.aqct la.bit.cau=AQ _ clear; //Set PWM1A on event A,upcountepwm1regs.aqct la.bit.CAD=AQ _ set; //Clear PWM1A on event A,downcountepwm1regs.aqct lb.bit.cbu=AQ _ set; //Set PWM1B on event B,upcountepwm1regs.aqct lb.bit.CBD=AQ _ clear; //Clear PWM1B on event B,down count EALLOW; sysctrlregs.pclk Cr0. bit.tbclksync=1;//开始所有时间同步编辑; }void All_Init () { InitSysCtrl ); 丁宁; InitPieCtrl (; IER=0x0000; IFR=0x0000; InitPieVectTable (; PWM1_Init (; EINT; //enableglobalinterruptintmertm; //enableglobalrealtimeinterruptdbgm } uint 16占空比=1900; 语音主(语音) { All_Init ); while(1) changeduty ) duty; 产生PWM主要需要三个部件,

第一个是周期PRD,通过设定EPwm1Regs.TBPRD的值得到周期。 我的代码设置为3750,系统时钟为150 M hz,经过四分频得到的是37.5Mhz,也就是1/(37.5M )秒,计数器每隔一个时间间隔加1,与3750相加所需的时间为3750

第二个是计数器CTR,计数器根据设定的时钟频率进行累计。 我设定了每当计数时钟频率超过10K,即0.00001s时,计数器自动加1。 我在这里设定的计数模式是增减模式,当计数器加到EPwm1Regs.TBPRD上时,它开始自动减少,减到0时,它开始增加。

第三个是比较器COMPA。 COMPA是我们自己设定的比较值。 如果在此设定初始值1900,则计数器计数到1900时发生事件。 例如,将输出引脚设置为1或清除为0。

其中阴影映射寄存器(EP wm1 regs.CMP CTL.bit.shdwamode=cc _ shadow; 在中,映射提供了一种与硬件同步更新寄存器的方法。 映射模式允许更新当前仅在特定事件中运行的寄存器。 这样,可以防止软件异步更改寄存器内容而导致的错误。

累计计数器,使计数器的值与比较值相等时输出1,计数器的值与周期值相等时输出0。 方波的周期和占空比从图中也可以简单地看出。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。