5.1PWM 概述

4412时钟为我们提供了PWM定时器,在4412中共有5个32位的定时器,这些定时器可发送中断信号给ARM子系统。另外,定时器0、1、2、3包含了脉冲宽度调制(PWM),并可驱动其拓展的I/O。PWM对定时器0有可选的dead-zone功能,以支持大电流设备。要注意的是定时器4是内置不接外部引脚的。一般用于定时器功能。

定时器0与定时器1共用一个8位预分频器,定时器2、定时器3与定时器4共用一另一个8位预分频器,每个定时器都有一个时钟分频器,时钟分频器有5种分频输出(1/2、1/4、 1/8 、1/16和外部时钟TCLK)。另外,定时器可选择时钟源,定时器0-4都可以选择外部的时钟源,如PWM_TCLK。

当时钟被使能后,定时器计数缓冲寄存器(TCNTBn)把计数器初始值下载到递减计数器中。定时器比较缓冲寄存器(TCMPBn)把其初始值下载到比较寄存器中,并将该值与递减计数器的值进行比较。当递减计数器和比较寄存器值相同时,输出电平翻转。递减计数器减至0后,输出电平再次翻转,完成一个输出周期。这种基于TCNTBn和TCMPBn的双缓冲特性使定时器在频率和占空比变化时能产生稳定的输出。

每个定时器都有一个专用的由定时器时钟驱动的16位递减计数器。当递减计数器的计数值达到0时,就会产生定时器中断请求来通知CPU定时器操作完成。当定时器递减计数器达到0的时候,如果设置了Auto-Reload 功能,相应的TCNTBn的值会自动重载到递减计数器中以继续下次操作。然而,如果定时器停止了,比如在定时器运行时清除TCON中定时器使能位,TCNTBn的值不会被重载到递减计数器中。

TCMPBn 的值用于脉冲宽度调制(PWM)。当定时器的递减计数器的值和比较寄存器的值相匹配的时候,定时器控制逻辑将改变输出电平。因此,比较寄存器决定了PWM 输出的开关时间。

PWM定时器的特点如下:
 5个32位定时器;
 2个8位PCLK分频器提供一级预分,5个2级分频器用来预分外部时钟;
 可编程选择PWM独立通道。
 4个独立的可编程的控制及支持校验的PWM通道。
 静态配置:PWM停止;
 动态配置:PWM启动;
 支持自动重装模式及触发脉冲模式;
 一个外部启动引脚。
 两个PWM输出可带Dead-Zone 发生器。
 中断发生器。

图 1 PWM TIMER Clock Tree Diagram

5.2相关寄存器

5.2.1定时器配置寄存器0(TCFG0)

表1 TFCG0

Timer Input Clock Frequency = PCLK/({prescaler value + 1})/{divider value}
{prescaler value} = 1 to 255
{divider value} = 1, 2, 4, 8, 16
Dead zone length = 0 to 254
NOTE: If deadzone length is set as “n”, real Dead Zone length is “n + 1” (n = 0 to 254)

5.2.2定时器配置寄存器1(TCFG1)

主要用于PWM定时器的MUX输入。

表2 TCFG1

5.2.3 TCNTB0

表3 TCNTB0

5.2.4 TCMPB0

表4 TCMPB0

5.2.5 TCNTO0

表5 TCNTO0

5.2.6 TCON

表6 TCON

5.3 PWM程序设计

4412的PWM定时器具有双缓冲功能,能在不停止当前定时器运行的情况下,重载定时器下次运行的参数。所以尽管新的定时器的值被设置好了,但是当前操作仍能成功完成。

定时器的值可以被写入定时器n 计数缓冲寄存器(TCNTBn),当前的计数器的值可以从定时器计数观察寄存器(TCNTOn)读出。读出的TCNTBn值并不是当前的计数值,而是下次将重载的计数值。

TCNTn的值等于0的时候,自动重载操作把TCNTBn的值装入TCNTn,只有当自动重载功能被使能并且TCNTn 的值等于0的时候才会自动重载。如果TCNTn等于0,自动重载控制位为0,则定时器停止运行。

使用手动更新位(Manual Update)和反转位(Inverter)完成定时器的初始化。当递减计数器的值达到0的时候会发生定时器自动重载操作,所以TCNTn的初始值必须由用户提前定义好,在这种情况下就需要手动更新位重载初始值。一下几个步骤给出如何启动定时器。

1)向TCNTBn 和 TCMPBn写入初始值。
2)置位相应定时器的手动更新为,不管是否使用翻转功能,推荐设置反转位。
3)置位相应定时器的启动位启动定时器,清除手动更新位。
如果定时器被强制停止,TCNTn保持原来的值而不是TCNTBn的重载值。如果要设置一个新的值,必须执行手动更新操作。

图2蜂鸣器电路图

该开发板的蜂鸣器是无源蜂鸣器,所有我们不能用该端口输出高低电平来控制蜂鸣器的播放,必须要使用PWM定时器来控制。

 头文件定义

typedef struct {  unsigned int    TCFG0;  unsigned int    TCFG1;  unsigned int    TCON;  unsigned int    TCNTB0;  unsigned int    TCMPB0;  unsigned int    TCNTO0;  unsigned int    TCNTB1;  unsigned int    TCMPB1;  unsigned int    TCNTO1;  unsigned int    TCNTB2;  unsigned int    TCMPB2;  unsigned int    TCNTO2;  unsigned int    TCNTB3;  unsigned int    TCMPB3;  unsigned int    TCNTO3;  unsigned int    TCNTB4;  unsigned int    TCNTO4;  unsigned int    TINT_CSTAT;
}pwm;
#define PWM (* (volatile pwm *)0x139D0000)

 控制部分

void pwm_init(void)
{  GPD0.CON = GPD0.CON & (~(0xf))| 0x2;  GPD0.PUD = GPD0.PUD & (~(0xf)) ;  PWM.TCFG0 = PWM.TCFG0 & (~(0xff))|0xf9;  PWM.TCFG1 = PWM.TCFG1 & (~(0xf)) | 0x2;  PWM.TCMPB0 = 50;  PWM.TCNTB0 = 100;  PWM.TCON = PWM.TCON & (~(0xff)) | (1 << 0) | (1 << 1) ;  //第一次要手动设置
}
void beep_on(void)
{  PWM.TCON = PWM.TCON & (~(0xff)) | (1 << 0) | (1 << 3) ;
}
void beep_off(void)
{  PWM.TCON = PWM.TCON & (~(1 << 0)) ;
}

完整程序清参考附件。

本章参考附件

点击进入

《嵌入式 - ARM》第5章 ARM PWM相关推荐

  1. 嵌入式学习硬件篇------初识ARM

    ARM体系结构的演变与发展 ARM公司简介 ARM(Advanced RISC Machine Limited)于1991年成立于英国剑桥,最早由Acorn.Apple和VLSI合资成立,主要出售芯片 ...

  2. 计算机原理与应用 第二章——ARM处理器

    第二章--ARM微处理器 文章目录 第二章--ARM微处理器 一.ARM微处理器特点及功能结构 1.ARM微处理器主要特点 2.指令集方面的主要特点 3.Cortex系列处理器特点 4.ARM处理器功 ...

  3. arm分支指令c语言,ARM嵌入式系统教与学(教学大纲)

    原标题:ARM嵌入式系统教与学(教学大纲) <ARM 嵌入式系统结构与编程> 课程教学大纲 学分 3 学时 32+24 01 课程说明 通过本课程的学习,培养学生掌握 ARM 体系结构,A ...

  4. 嵌入式工程师到底要不要学习ARM汇编指令?arm学习文章汇总

    嵌入式工程师到底要不要学习ARM汇编指令? 网上搜索这个问题,答案很多,大部分的建议是不要学汇编,只要学C语言. 而一口君作为一个十几年经验的驱动工程师,个人认为,汇编语言还是需要掌握的,想要搞精.搞 ...

  5. 嵌入式系统的组成、嵌入式处理器分类总结、ARM处理器系列总结、ARM Cortex-M3体系结构总结!

    一.嵌入式系统的组成 嵌入式系统的组成主要由:嵌入式硬件系统.嵌入式软件系统. (1)嵌入式硬件系统主要包括:嵌入式处理器.存储器.模拟电路.电源.接口控制器.接插件等 1)嵌入式处理器:是嵌入式系统 ...

  6. 【STM32F429的DSP教程】第6章 ARM DSP源码和库移植方法(MDK5的AC5和AC6)

    完整版教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=94547 第6章   ARM DSP源码和库移植方法(MDK5的AC5 ...

  7. 第一章 Arm 架构科普解读(2023新)

    第一章 启发式 Arm 科普解读 第二章 CPU微架构 第三章 系统微架构 第四章 总线微架构 第五章 监控微架构 第六章 安全微架构 第七章 虚拟化微架构 第八章 Armv9-A 架构 第九章 Ar ...

  8. oracle arm服务器_Oracle和ARM合作优化嵌入式Java

    oracle arm服务器 Oracle和ARM已达成多年合作伙伴关系,两家公司将致力于优化ARM处理器的Java编程语言. 这项工作将主要致力于在ARM的多核系统上提供更高的吞吐量和更大的可伸缩性. ...

  9. 嵌入式设备启动过程(ARM )

    嵌入式设备启动过程(ARM ) 1.SOC内部IROM固化代码,在上电后,被加载到内部IRAM上运行:(此部分做基本的硬件初始化,判断从TF卡/USB/EMMC哪一个存储设备中启动,硬件上通过拨码开关 ...

  10. 嵌入式开发入门之经典 ARM开发板

    嵌入式开发入门之经典 开始进入嵌入式世界,真是一头雾水,不知道如何入手!也不知道该如何学习,学习什么,最近从网上转载这篇文章,对我启发很大,对于初始进入嵌入式的人们很有帮组,好多嵌入式大侠都说这是入门 ...

最新文章

  1. HDU(1847)Good Luck in CET-4 Everybody!
  2. key可以重复的map集合:IdentityHashMap
  3. 华为存储服务器v3存储协议,华为oceanstor v3融合存储介绍.pdf
  4. 开源项目管理软件禅道使用帮助下载
  5. Python PEP8 编码规范中文版
  6. 文件后缀可见的设置 强转文件类型
  7. mybatis + spring boot + yml 配置,告别XML
  8. TARS 微服务开源生态
  9. Ubuntu18.04开机后图像界面消失解决(千万不要使用autoremove卸载软件!!!)
  10. 罗振宇2021“时间的朋友”跨年演讲精华版全文
  11. 店铺数据分析很重要吗?分析拼多多数据重要性,店铺引流效果有效提升。
  12. 开源自主导航小车MickX4(一)ROS底盘硬件
  13. 图解AUTOSAR(六)——服务层(Service Layer)、复杂驱动(Complex Drivers)
  14. SAP 科目的 未清项管理的理解
  15. Android Adb命令(5) - find 查找设备文件
  16. 操作系统之操作系统的作用、目标、发展过程、特性和主要功能
  17. 云服务器建站教程专栏汇总
  18. ping: www.xxx.com: 未知的名称或服务
  19. C语言计算礼炮声响次数(穷举和递推)
  20. 中国省份城市级联选择--JavaScript

热门文章

  1. 走进黑客工具箱:使用 Whatweb 和 Acunetix 加固您的 Web 应用程序
  2. 免费GIF动图制作,简简单单一招搞定
  3. 网络互联技术(1)——前篇—【转载】计算机发展史
  4. CentOS 7安装squid代理服务器
  5. 点击a标签,返回上一页
  6. 认证管理(锐捷网关篇)
  7. PyCharm中的iCCP: known incorrect sRGB profile报错问题
  8. UE风格化Day7-maya的AO烘焙和SP绘制材质
  9. C++中using的四大用法总结
  10. 杨绛谈读书:乐在其中,读书好比串门儿