dsp2812 pwm配置

肚子疼了好几天,今天稍微好点,简单写点东西。

 

好几个月前做的项目,有些地方已经记不清楚了,但是突然客户又来问关于代码配置的情况,重新查看了代码,把相关的知识也整理一下。

dsp2812中有好几个时钟相关的配置。首先是系统时钟SYSCLKOUT=15MHZ*PLL(PLL可以在代码中进行修改)。

我的代码中将PLL设置成7,所以SYSCLKOUT=105MHZ

 

还有两个时钟是外设时钟,分别是高速外设时钟和低速外设时钟,它们分别由HISPCP和LOSPCP这两个寄存器来控制。

高速外设时钟用于事件管理模块(EVA、EVB)和ADC。

低速外设时钟用于串口(SCIA、SCIB)、spi和McBSP。

当前代码是基于dsp2812官方库开发的,在函数InitPeripheralClocks中定义了下面的内容:

   SysCtrlRegs.HISPCP.all = 0x0007;     //高速外设
   SysCtrlRegs.LOSPCP.all = 0x0002;     //低速外设

根据HISPCP寄存器的说明,当HISPCP最低三位为0时,高速外设时钟频率=SYSCLKOUT。

当HISPCP最低三位为其他值时,高速外设时钟频率=SYSCLKOUT/(2*HISPCP[2:0])

所以当前配置下的高速外设时钟频率= 105MHZ/(2*7)=105/14 MHZ

LOSPCP寄存器定义和HISPCP寄存器定义很类似,详细可以查看:http://bbs.dzsc.com/space/viewspacepost.aspx?postid=28614

其实当前代码的配置很有意思的,高速外设配置的频率反而比低速外设的频率要小很多。

 

代码中有一部分功能是用于产生PWM信号(默认是200KHZ),其代码初始配置如下:

    EvbRegs.EXTCONB.bit.INDCOE = 1; //单独使能比较输出模式
    EvbRegs.GPTCONB.all = 0x0024;    //GP定时器4比较输出低有效
    EvbRegs.T4PR = 0x0025;           //定时周期为0.13us*(T1PR+1)
    EvbRegs.T4CMPR = 0x0013;//GP定时器的比较寄存器,调整该值可调节占空比
    EvbRegs.T4CNT = 0x0000; //定时器初值
    EvbRegs.T4CON.all = 0x1042 //连续增计数,不分频,使能比较,打开定时器

关于pwm定时器的计算可以参考文章http://blog.sina.com.cn/s/blog_8680cd7d0100wmwa.html

由于T4CON=0x1042,所以其对应TCLKS(按最低位为1开始计算,TCLKS对应T4CON的4、5位)=0,故TCLK=HSPCLK

本代码PWM频率与EvbRegs.T4PR有关,由于使用了连续增计数,所以其频率=TCLK/(T4PR+1)=105MHZ/(14*(0x25+1))=105MHZ/(532)

=197KHZ,大致上等于200KHZ.

posted on 2014-06-11 09:42  qiaoqiao2003  阅读(3113)  评论(0编辑  收藏  举报

导航