浅析嵌入式系统之uboot详解(5.3)—PWM定时器(番外)

bootloader详解目录—废铁是怎么产生价值的

浅析嵌入式系统之uboot详解(1)—板子上电后uboot做了什么
浅析嵌入式系统之uboot详解(2)—CPU工作模式
浅析嵌入式系统之uboot详解(3)—看门狗
浅析嵌入式系统之uboot详解(4.1)—内部中断
浅析嵌入式系统之uboot详解(4.2)—外部中断(GPIO)
浅析嵌入式系统之uboot详解(4.3)—异常和异常向量
浅析嵌入式系统之uboot详解(5.1)—时钟分频
浅析嵌入式系统之uboot详解(5.2)—省电模式(番外)
浅析嵌入式系统之uboot详解(5.3)—PWM定时器(番外)
浅析嵌入式系统之uboot详解(6)—关闭缓存和mmu
浅析嵌入式系统之uboot详解(7)—初始化SDRAM


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

1. 前言

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

2. PWM定时器

2.1 概述

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

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

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

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

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

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

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

2.2 实例

  下面将分析怎么使用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: 观察寄存器

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

3. 小结

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ʚ兔子的先森ɞ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值