S3C6410X中有5个定时器,这些定时器产生内部中断。其中,Timer0和Timer1具有PWM功能,而Timer2,3,4没有此功能。

The S3C6410X RISC microprocessorcomprises of five 32-bit timers. These timers are used to generate internal interruptsto the ARM subsystem. In addition, Timers 0 and 1 include a PWM function (PulseWidth Modulation),which can drive an external I/O signal. The PWM for timer 0and 1 have an optional dead-zone generator capability, which can be utilized tosupport a large current device. Timer 2, 3 and 4 are internal timers with no outputpins.

PWM具有两种操作模式:自动装载模式,一次触发模式。为实现PWM功能,芯片提供了16个功能寄存器。这些功能寄存器都连接APB总线。

总体架构图如下:

S3C6410X中有5个定时器,这些定时器产生内部中断。其中,Timer0和Timer1具有PWM功能,而Timer2,3,4没有此功能。定时器具有双缓冲特性,这样就能在不停止当前定时器操作的情况下,为下次定时器运行装入新的数值。尽管为定时器设置了新数值,但当前的定时操作能够成功完成。定时器从TCNTBn读取的值是为下次延时定时用的,并不影响当前定时器的运行。当TCNTn减小到0的时候,TCNTBn的值会自动复制到TCNTn中,这就是说的自动装载操作。定时器的当前技术数值可以从定时计数观察寄存器中TCNTOn读取。如果TCNTn为0且从装载也为0的话则TCNTn不在进行下次操作。

寄存器介绍:

1、总寄存器映射图

2、TCFG0寄存器:

3、TCFG1寄存器:

4、TCON控制寄存器:

mini6410蜂鸣器原理图:

定义寄存器:

[cpp] view plaincopyprint?
  1. /* PWM Timer */
  2. #define rTCFG0       (*(volatile unsigned *)(0x7F006000))
  3. #define rTCFG1       (*(volatile unsigned *)(0x7F006004))
  4. #define rTCON        (*(volatile unsigned *)(0x7F006008))
  5. #define rTCNTB0      (*(volatile unsigned *)(0x7F00600C))
  6. #define rTCMPB0      (*(volatile unsigned *)(0x7F006010))
  7. #define rTCNTO0      (*(volatile unsigned *)(0x7F006014))
  8. #define rTCNTB1      (*(volatile unsigned *)(0x7F006018))
  9. #define rTCMPB1      (*(volatile unsigned *)(0x7F00601c))
  10. #define rTCNTO1      (*(volatile unsigned *)(0x7F006020))
  11. #define rTCNTB2      (*(volatile unsigned *)(0x7F006024))
  12. #define rTCNTO2      (*(volatile unsigned *)(0x7F00602c))
  13. #define rTCNTB3      (*(volatile unsigned *)(0x7F006030))
  14. #define rTCNTO3      (*(volatile unsigned *)(0x7F006038))
  15. #define rTCNTB4      (*(volatile unsigned *)(0x7F00603c))
  16. #define rTCNTO4      (*(volatile unsigned *)(0x7F006040))
  17. #define rTINT_CSTAT  (*(volatile unsigned *)(0x7F006044))

编写初始化函数:

[cpp] view plaincopyprint?
  1. void init_pwm()
  2. {
  3. rGPFCON &= ~(0x3U << 28);
  4. rGPFCON |=  (0x2U << 28);
  5. rTCFG0 &= ~0xff;
  6. rTCFG0 |= (50 - 1);
  7. rTCFG1 = 0x4;
  8. #define freq 800
  9. rTCNTB0 = (133000000/50/16)/freq;
  10. rTCMPB0 = rTCNTB0/2;
  11. rTCON &= ~0x1f;
  12. rTCON |= 0xb;       //disable deadzone, auto-reload, inv-off, update TCNTB0&TCMPB0, start timer 0
  13. rTCON &= ~2;            //clear manual update bit
  14. }

在main函数中:

[cpp] view plaincopyprint?
  1. init_pwm();
  2. while(1);

深入理解ARM体系架构(S3C6410)---PWM实例相关推荐

  1. 深入理解ARM体系架构(S3C6410)---认识S3C6410

    芯片架构如图 S3C64xx系列的应用处理器芯片是三星主推的16/32 RISC 微处理器,三星目前推出了S3C6400和S3C6410,都是基于ARM11架构的,而且硬件管脚兼容,应该说大致的功能基 ...

  2. 深入理解ARM体系架构(S3C6410)---arm7,arm9,arm11区别

    本系列文章由muge0913编写,转载请注明出处:http://blog.csdn.net/muge0913/article/details/7350789 1. 时钟频率的提高 虽然内核架构相同,但 ...

  3. 深入理解ARM体系架构(S3C6410)---lcd 显示图片

    本系列文章由张同浩编写,转载请注明出处:http://blog.csdn.net/muge0913/article/details/7437153 邮箱:muge0913@sina.com S3C64 ...

  4. ARM体系架构—ARMv7-A指令集:内存操作指令

    ARM体系架构-ARMv7-A指令集 一.ARMv7-A指令集 一.ARMv7-A内存操作指令 二.单寄存器寻址内存操作指令 三.多寄存器寻址内存操作指令 四.SWP,SWPB 一.ARMv7-A指令 ...

  5. 硬件安全之ARM体系架构的演进

    安全从业者脑中有一系列的安全名词,比如安全三要素Confidenciality .Integrity.Availability,比如硬件安全品牌TPM.TrustZone.SGX.Titan-M,比如 ...

  6. ARM体系架构—ARMv7-A指令集:协处理器指令

    ARM体系架构-ARMv7-A指令集 一.ARMv7-A指令集 二.ARMv7-A协处理器 二.ARMv7-A协处理器指令 三.读懂Linux Kernel协处理器指令 一.ARMv7-A指令集 AR ...

  7. 单片机ARM体系架构知识你知道多少?

    想学习单片机的同学可以关注.私信我或者在评论区回复我要入门.在嵌入式领域中ARM可谓一家独大,所以我们要学习嵌入式开发,一定要了解ARM体系,只有在了解ARM体系的基础上才能理解ARM汇编(GNU汇编 ...

  8. Hadoop:HDFS的概念理解和体系架构-成都加米谷大数据分享

    HDFS是什么? HDFS 全称 Hadoop Distributed File System ,简称HDFS,是一个分布式文件系统.它是谷歌的GFS提出之后出现的另外一种文件系统.它有一定高度的容错 ...

  9. ARM体系结构与编程(篇二):ARM体系架构与寄存器介绍

    文章目录 前言 一.ARM内核与架构 1.1 ARM芯片的组成 1.2 ARM指令集与架构 二.ARM处理器模式与寄存器 2.1 ARM处理器模式 2.2 ARM寄存器 前言 该文章是通过学习< ...

最新文章

  1. mfc cef cefsettings 单进程 退出_PyTorch 64.进程池Pool的imap方法
  2. 这样保养让你皮肤变水嫩 - 健康程序员,至尚生活!
  3. 怎样在python代码中输入π_鼠标自动点击、键盘自动输入?几行Python代码搞定
  4. windows下安装mysql教程
  5. 再谈初学者关心的ssh应用方方面面
  6. 使用JDBC增删改查
  7. 廖雪峰Python学习
  8. 大数据技术原理与应用----大数据概述
  9. 分享一个VS2010插件 GBackupSolution Add-in for Visual Studio 2008/2010
  10. 详谈AI芯片架构、分类和关键技术
  11. 虚拟服务器欠费是什么原因,辟谣:Elysium解释近期服务器崩溃的原因 非服务器欠费 而是闪电...
  12. 今年过年不送礼,送礼就送......
  13. Java中split的用法
  14. Linux红帽8.2系统中引导过程及引导修复
  15. BPF-JIT中bug归类
  16. 武汉大学计算机学院李明,第一届CSIG全国SLAM技术论坛成功举办
  17. 关于Twitter Card的一个巨坑
  18. 【软件】[Qt\C++] 冒泡、希尔、堆排、基数、快排 5种排序Gui界面带对比——使用Qt实现
  19. 手持振弦传感器VH03读数仪测读仪频率仪地质灾害土木工程自动化监测
  20. 项目经理是如何做到每月“0”电话费的

热门文章

  1. java守护线程与用户线程_详解Java线程-守护线程与用户线程
  2. pytorch搭建TextRNN与使用案例
  3. python使用正则化预处理数据
  4. mysql上一条语句成功_mysql : 获取上一条insert语句
  5. python初学者经验总结_Python 初学者的经验总结
  6. 定期存款可以提前取出来吗_定期存款、约定转存、自动转存和自己取出来转存有什么不同?...
  7. 清除mysql数据碎片_MySQL 清除表空间碎片方法总结
  8. PySide: 信号、槽
  9. python简说(十八)导入模块
  10. eclipse Jsp 自创建tags问题