(5.3)uboot详解——PWM定时器(番外)

来源:互联网 发布:手机移动数据自动连接 编辑:程序博客网 时间:2024/05/17 00:02

这篇文章是一些拓展内容,如果想了解uboot的启动过程,可以先跳过本章,如果需要掌握一些编写裸机程序或者内核与计时器相关的驱动的知识,可以了解一下。

PWM定时器

1.概述

脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在测量、通信到功率控制与变换的许多领域中——百科上如是说,科学语言总是这样的严谨却又不好理解,这里用草根语言解释一下:PWM是改变输出波形的一种方法,包括改变波形的频率和占空比。

模拟信号的值可以连续变化,其时间和幅度的分辨率都没有限制。9V电池就是一种模拟器件,因为它的输出电压并不精确地等于9V,而是随时间发生变化,并可取任何实数值。与此类似,从电池吸收的电流也不限定在一组可能的取值范围之内。模拟信号与数字信号的区别在于后者的取值通常只能属于预先确定的可能取值集合之内,例如在{0V, 5V}这一集合中取值。

模拟电压和电流可直接用来进行控制,如对汽车收音机的音量进行控制。在简单的模拟收音机中,音量旋钮被连接到一个可变电阻。拧动旋钮时,电阻值变大或变小;流经这个电阻的电流也随之增加或减少,从而改变了驱动扬声器的电流值,使音量相应变大或变小。与收音机一样,模拟电路的输出与输入成线性比例。

尽管模拟控制看起来可能直观而简单,但它并不总是非常经济或可行的。其中一点就是,模拟电路容易随时间漂移,因而难以调节。能够解决这个问题的精密模拟电路可能非常庞大、笨重(如老式的家庭立体声设备)和昂贵。模拟电路还有可能严重发热,其功耗相对于工作元件两端电压与电流的乘积成正比。模拟电路还可能对噪声很敏感,任何扰动或噪声都肯定会改变电流值的大小。

通过以数字方式控制模拟电路,可以大幅度降低系统的成本和功耗。此外,许多微控制器和DSP已经在芯片上包含了PWM控制器,这使数字控制的实现变得更加容易。

总的来说,数字信号的波形比模拟信号的波形规则稳定,而且方便便宜,便于操作,可以用pwm控制器进行管理,比如我们人眼对光比声音敏感,也许可以用模拟电路产生的时钟来驱动音频,但是用来驱动显示器是不好的,稍微有点偏差就会影响我们的观看质量。

我们知道,模拟电路中的波形常常是正弦形式的,有波峰有波谷,但是数字电路中的波形常常是锯齿形式的,有高电平有低电平,所以一个波形的上升沿到下一个波形的上升沿这段区间就是一个周期,然而这中间的下降沿的位置就决定了该波的占空比,这个下降沿可能位一一个波的中间,也可能位于一个波的前三分之一的位置,芯片中的pwm就是用编程的方式来改变这两个量的。

下面将分析怎么使用s3c2440的pwm产生想要的时钟。

s3c2440有5个16比特的计时器,0,1,2,4具有pwm功能,但是4没有输出引脚,用作内部时钟,计时器0有死区发生器,用于大电流的设备。

计时器0和1共用一个8比特的预分频器,计时器2,3,4共用另外一个8位的预分频器,每一个计时器有一个时钟除法器,可以分出5种不同等分的时钟信号(1/2,1/4,1/8,1/16和TCLK),每一个定时器从相应的除法器得到自己的时钟信号,这个8位的预分频器是可编程的,它可以将PCLK进行分频,具体分频的值可以通过设置TCFG0和TCFG1来完成。

定时计数缓冲寄存器(TCNTBn)包含了一个当使能了定时器时的被加载到递减计数器中的初始值。

定时比较缓冲寄存器(TCMPBn)包含了一个被加载到比较寄存器中的与递减计数器相比较的初始值。这种 TCNTBn 和CMPBn的双缓冲特征保证了改变频率和占空比时定时器产生稳定的输出。

每个定时器有它自己的由定时器时钟驱动的 16 位递减计数器。当递减计数器到达零时,产生定时器中断请求通知CPU定时器操作已经完成。当定时器计数器到达零时,相应的TCNTBn的值将自动被加载到递减计数器以继续下一次操作。然而,如果定时器停止了,例如,在定时器运行模式期间清除 TCONn 的定时器使能位,TCNTBn的值将不会

被重新加载到计数器中。
TCMPBn的值是用于脉宽调制(PWM)。当递减计数器的值与定时器控制逻辑中的比较寄存器的值相匹配时定时器控制逻辑改变输出电平。因此,比较寄存器决定PWM输出的开启时间(或关闭时间)。

定时器专用寄存器有6种共17个寄存器
TCFG0  配置寄存器0
TCFG1 配置寄存器1
TCON 控制寄存器
TCNTBn  计数初值寄存器(5个)
TCMPBn 比较寄存器(4个)
TCNTOn 观察寄存器(5个)

从上图可以看出,要配置一个定时器,必须要配置下面这些寄存器:

1.TCON(定时器控制寄存器):这个寄存器是用来配置每个寄存器的工作模式的,包括自动加载,手动配置或者死区等

2.TCFG0(定时器配置寄存0):这个寄存器是用来配置prescaler的,设置prescaler0预分频的大小是0~7bit,最大值是255,16~23bit用来设置死区的长度

3.TCFG1(定时器配置寄存1):这个寄存器用来配置clock divider,包括设置哪个除数和DMA模式选择

4.TCMPB和TCNTB:用来设置比较寄存器和计数初值寄存器

5.TCNTOn: 观察寄存器

设置完这些寄存器以后,就可以在对应的输出口上获取到想要的波形了


关于pwm定时器和实时时钟用途虽然比较广泛,但是在uboot的启动过程却影响不大,这里只是概述一下。


0 0
原创粉丝点击