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.

dsp2812 pwm配置,布布扣,bubuko.com

时间: 2024-10-15 11:33:46

dsp2812 pwm配置的相关文章

STM32 PWM配置

一:配置TIM3的ARR寄存器和PSC寄存器,确定PWM频率. 这里配置的这两个定时器确定了PWM的频率,我的理解是:PWM的周期(频率)就是ARR寄存器值与PSC寄存器值相乘得来,但不是简单意义上的相乘,例如要设置PWM的频率参考上次通用定时器中设置溢出时间的算法,例如输出100HZ频率的PWM,首先,确定TIMx的时钟,除非APB1的时钟分频数设置为1,否则通用定时器TIMx的时钟是APB1时钟的2倍,这时的TIMx时钟为72MHz,用这个TIMx时钟72MHz除以(PSC+1),得到定时器

wiringPi库的pwm配置及使用说明

本文介绍树莓派(raspberry pi)在linux c 环境下的硬件pwm配置及使用方法. 1. 下载安装wiringPi 此步骤建议参考官网指南 http://wiringpi.com/download-and-install/,wiringPi提供了对树莓派的硬件IO访问,包括GPIO/I2C/PWM等下载安装后,本地会出现wiringpI文件夹,根目录下有/examples 可供参考. 2. 树莓派PWM硬件 以raspberry pi 3b 为例,尝试在命令行下输入 pinout,可

STM32F0xx_TIM输出PWM配置详细过程

前言 前面我说过STM32的定时器功能很强大,今天就来总结一下它的另外一个“强大”功能:TIM的比较输出功能,输出可调PWM波形.直接调用函数接口“TIM2_CH1_PWM(uint32_t Freq, uint16_t Dutycycle)”传入频率和占空比就能输出指定的波形. 我提供的软件工程直接调用是比较简单就能实现想要的PWM波形.但是,如果你是学习者,建议还是进去函数把每一个细节了解清楚,里面的东西可能对你掌握TIM很有帮助. 本着免费分享的原则,如果你觉得分享的内容对你有用,认可我分

STM32基础问题分析——PWM配置

在使用STM32F103产生固定频率.固定占空比的PWM波时,虽然有官方以及众多开发板提供的例程,但是关于有点问题并没有说的很清晰,并且<STM32F10X参考手册>的中文翻译可能容易造成歧义,所以一开始并没有理解,这里就梳理一下我的理解,如果有误解的情况,希望交流指正. 1. 遇到的问题 先直接上段配置代码,这段代码是产生一个20kHz固定频率,50%固定占空比的方波信号,典型的配置过程,一般来说也不会有什么太多的疑问.但是我逐步了解背后的定时器工作逻辑的时候,就产生了一些疑问,也没有找到合

不同频率下的pwm配置

200k //PWM1 PWMPERDL1=0xb3; PWMPERDH1= 0x00; PWMCCNTL1=0x6B; PWMCCNTH1= 0; PWMDBDY1=0x2B; //死区延时计时器 //PWM0 PWMPERDL0=pwm_per_L ; PWMPERDH0=pwm_per_H ; PWMCCNTL0=0x6B ; PWMCCNTH0=0x00 ; PWMDBDY0=0x2B; //死区延时计时器 500k

stm32寄存器版学习笔记05 PWM

STM32除TIM6和TIM7外都可以产生PWM输出.高级定时器TIM1和TIM8可以同时产生7路PWM,通用定时器可以产生4路PWM输出. 1.TIM1 CH1输出PWM配置步骤 ①开启TIM1时钟,配置PA8为复用输出 APB2外设时钟使能寄存器(RCC_APB2ENR) APB1外设复位寄存器 (RCC_APB1RSTR) 置1开启.清0关闭. Eg:RCC->APB2ENR|=1<<11; //使能TIM1时钟 配置I/O口: 参见stm32寄存器版学习笔记01 GPIO口的配置

BeagleBone学习之——PWM

开篇先吐槽下BeagleBone....版本各种乱,驱动各种乱=.= 1. 关于驱动乱,,笔者想用pwm模块,虽说beaglebone自带了,但没给个说明文件啊..全靠摸索!而且有些地方还不对. 2. 关于版本...beaglebone就没有向下兼容这一说么?先后装了Debian 7.5,Debian 7.8,Debian 7.9,Debian 8.3.7.5的pwm驱动和后面完全不一样,不能兼容啊喂! PS.强烈建议装7.5.因为网上教程大部分都基于Debian 7.5的,,,适合新手 3.

[ZigBee] 13、ZigBee基础阶段性回顾与加深理解——用定时器1产生PWM来控制LED亮度(七色灯)

引言:PWM对于很多软件工程师可能又熟悉又陌生,以PWM调节LED亮度为例,其本质是在每个周期都偷工减料一些,整体表现出LED欠压亮度不同的效果.像大家看到的七色彩灯其原理也类似,只是用3路PWM分别控制红.绿.蓝三种颜色的灯输出亮度,再结合混色原理表现出丰富多彩的炫光效果~ 写在前面:前十几篇介绍了CC2530的一些外设的基本用法,接下来几篇拿几个例子回顾并加深一下之前的知识点,上面引言是普及.下面高能预警! 第一个例子:用定时器1产生PWM来控制LED亮度 我们在<[ZigBee] 5.Zi

stm32cube 产生PWM波形

1. 2. 配置好PWM配置后,再调用库函数 HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_3);打开了PWM输出, HAL_StatusTypeDef HAL_TIM_PWM_Stop(&htim2,TIM_CHANNEL_3);关闭PWM输出