原创 [博客大赛]S3C6410时钟控制(2)PWM定时器设置

2014-4-21 21:46 2112 12 14 分类: MCU/ 嵌入式 文集: S3C6410

S3C6410时钟控制(2PWM定时器设置

1、    S3C6410定时器综述

20140421214046918001.png

(1)   定时器资源,参见上图,S3C6410532位定时器,其中定时器0和定时器1具有脉冲宽度调制(PWM)功能,定时器234仅供内部定时而没有输出引脚,定时器01具有死区生成器,可以用来控制大电流设备。

(2)   定时器时钟源为PCLK。首先通过两个8位预分频器降低频率,定时器01共用第一个预分频器,定时器234共用第二个预分频器;预分频器的输出进入第二级分频器,可以进行124816分频;每个定时器的工作时钟可以从第二级分频器和外部时钟TCLK0/TCLK1中选择。

 

2、    定时器初始化

(1)   设置定时器的时钟频率。每一个时钟周期定时器减1,定时器的时钟频率为每秒定时器的减少值。定时器输入时钟频率=PCLK/(prescaler value+1)/(divider value)其中prescaler value取值1~255TCFG0配置;divider value取值124816TCLKTCFG1配置

20140421214054520002.jpg

(2)   设置定时器的计数值。定时器的计数值和定时器的时钟频率决定定时器的触发时间。

(a)

20140421214105272003.png

TCNTBnTCMPBn中写入初始值;

(b) 使能定时器中断,并清除定时器中断标志;

(c) 设定manual-updata位为1(推荐也设定inverter on/off bit1),如果需要重复,则auto-reload置为1

(d) 启动定时器包括设定start bit1和清除manual-updata bit

说明:起始,容易被manual-updataauto-reload弄晕,我的理解是manual-updata只要置1,则对应缓充寄存器中的值立即写入对应的寄存器中,通常只有在最初启动定时器之前,写入初始值之后,置1,之后在启动之前立即置0auto-reload只要置1,则会在TCNTn计数值变为0的时候,自动的重新将对应缓冲寄存器的值写入对应寄存器中,则定时器会继续运行下去,如果置0,则定时器运行到TCNTn计数值变为0之后会停止。

 

(3)   定时器中断相关系统中断VIC的设置,包括关闭对应中断,设置中断类型,清除系统中断标志,写中断处理程序入口地址,使能中断等等。(参考以前的外部中断)

 

(4)   设置置定时器中断处理函数。定时发生,触发定时器中断,进入中断处理函数。中断程序中通常可以用来改变计数值和比较值,或者对auto-reload和中断允许之类的进行设定。

 

 

3、    定时器启动(直接付上用户手册的两个运行例子)

20140421214114196004.jpg

20140421214124410005.jpg

20140421214131640006.jpg

20140421214137667007.jpg

4、    定时器寄存器

1)定时器配置寄存器0(TCFG0)和定时器配置寄存器1TCFG1)。其中TCFG0用来配置两个8位预分频值和死区长度;TCFG1用来控制五个多路选择器和DMA模式选择;可读可写

20140421214143121008.jpg

20140421214149576009.jpg

20140421214154405010.jpg

20140421214200994011.png

20140421214206778012.png

2)定时器控制寄存器(TCON)。一般用来控制定时器的auto-reloadmanual-updatastart/stop这三位,然后还有定时器01ouput-inverter-on/off位,以及死区使能位。

20140421214212999013.png

(3) 定时器计数缓冲寄存器(TCNTBn)、定时器比较缓冲寄存器(TCMPBn)、定时器计数观察寄存器(TCNTO0),这里仅截定时器0的图。

20140421214219632014.png

(4) 定时器中断控制和状态寄存器TINT_CSTAT。可以用来使能某个寄存器的中断,也可用来判断是哪个寄存器发生中断,并写1清除该中断。

20140421214225704015.png

5、    系统中断VIC。与定时器相关的VIC知识,

20140421214231855016.png

1) 先关闭INT_TIMER

2) 设置系统中断类型

3) 清除系统中断标志

4) 写中断处理程序地址

5) 使能系统中断

具体的参照外部中断的内容,同样注意使能VICIRQ,在启动程序中。

文章评论2条评论)

登录后参与讨论

用户1651464 2014-4-25 11:06

主要还是记录自己的学习

用户403664 2014-4-23 10:27

博客大赛第一季:可编程测试测量。嘿嘿,你要等到下次的主题才可以参加哦
相关推荐阅读
用户1651464 2014-05-06 11:07
__asm__ __volatile__ 嵌入式内嵌汇编语法解构
再次对EDN的编辑功能表示无语,这篇文章竟然说超字数限制!...
用户1651464 2014-05-04 14:54
sourceinsight添加uboot时,部分文件无法搜索
Sourceinsight添加uboot时,部分文件无法搜索 在用sourceinsight查看uboot(或者linux内核源码等代码)的时候,突然发现不能使用搜索的方法查找源码中的.S文件,查找...
用户1651464 2014-04-25 11:20
ubuntu中vi使用大全
vi编辑器是任何Unix及Linux系统下标准的编辑器,他的强大不逊色于任何 最新的文本编辑器,这里只是简单地介绍一下他的用法和一小部分指令。由于对Unix及Linux系统的任何版本,vi编辑器是完全...
用户1651464 2014-04-21 21:47
[博客大赛]S3C6410时钟控制(1.2)系统时钟设定
S3C6410时钟控制(1.2)系统时钟设定 三、S3C6410时钟初始化的具体流程。 1:设定PLL_LOCK寄存器。参见上面的PLL_LOCK(1)。 对应代码:(C或者汇编)     //1-...
用户1651464 2014-04-21 21:43
[博客大赛]S3C6410时钟控制(1.1)系统时钟设定
S3C6410时钟控制(1.1)系统时钟设定 一、S3C6410系统时钟控制的概述 S3C6410系统有三个PLL(APLL/MPLL/EPLL)和四个CLK(ACLK/HCLK/PCLK/SCLK...
我要评论
2
12
关闭 站长推荐上一条 /2 下一条