历史上的今天
今天是:2024年10月18日(星期五)
2021年10月18日 | S3C2440裸机实验之timer(定时器)
2021-10-18 来源:eefocus
S3c2440 有5 个16 位的定时器。定时器0、1、2、3 有脉宽调制功能(PWM)。定时器4有一个没有输出引脚的内部定时器。定时器0 有一个用于大电流设备的死区生成器。
定时器0 和1 共享一个8 位的预分频器(预定标器),定时器2,3,4 共享另一个8 位预分
频器.
定时器的时钟源为PCLK,首先经过预分频器降低频率后,进入第二个分频.可以生成5 种不同的分频信号(1/2,1/4,1/8,1/16 和TCLK)
定时器启动后,TCNTn开始减一计数,当TCNTn 等于TCMPn时, TOUTn 反转, TCNTn继续减数.
当TCNTn= 0 时, TOUTn 再次反转,并触发中断(中断已经使能).
若TCON 设为自动加载, TNCTn/TCMPNn 的值被重装.
寄存器:
TCFG0: 配置两个8 位预分频器, [15:8] 此8 位决定定时器2,3,4 的预标定器值,[7:0] 此8 位决定定时器0,1 的预标定器值
输出频率: = PCLK / (prescaler value + 1)
TCFG1:
用于设置第二个分频.可以设置5 种不同的分频信号(1/2,1/4,1/8,1/16 和TCLK)
至此可得到
定时器工作频率=PCLK / (prescaler value + 1) / (divider value)
divider value = 2,4,8, 16
TCON: 定时器控制寄存器
TCNTBn :设置一个被装载到递减计数器中的初始值。
TCMPBn: 设置一个被装载到比较寄存器中用来和递减计数
器的值作比较的初始值。
TCNTOn : 通过读取其可以得到TCNTBn 的值
定时器初始化示例:
void timer0_init(void)
{
TCFG0 = 99; // 预分频器0 = 99
TCFG1 = 0x03; // 选择16分频
TCNTB0 = 31250; // 0.5秒钟触发一次中断
TCON |= (1<<1); // 手动更新
TCON = 0x09; // 自动加载,清“手动更新”位,启动定时器0
}
史海拾趣
|
贴片元件的MARK找起型号来很麻烦,不知道大家是不是有同感? 想知道大家都是怎么解决的? 借此想通过这里把高手们常用的贴片元件mark对应的型号整理和大家一起分享~~… 查看全部问答> |
|
(完全原创,转载就注明出处) 前几个月,我在网上发了一篇“痛批3G网络监控之三点害处”,引起了很多行业内人士对3G网络热烈讨论,有的朋友认为3G用于监控还不是很成熟,也有朋友对3G用于监控行业还是充满了希望。上次贴子中总结3G网络三个害处分 ...… 查看全部问答> |
|
请问大家一下,S3C2440的定时器如何使用,我想准确定时微妙级的。 我原来用了一个Delay()函数,发现在示波器上看Delay(100)和Delay(10000)没有什么差别,而且每次宽度不一样,请问你们怎么实现的较准确的定时? 请指教 void Delay(int time)// { int i; for(i=0;i… 查看全部问答> |
|
分在另外一个帖子里 wince触摸屏驱动问题 急! 多谢各位 wince: 输入为触摸屏 问题一: 当屏幕背光关闭后 将 第一次点击触摸屏产生的鼠标事件(WM_LBUTTONDOWN/WM_LBUTTONUP) 忽略 &nbs ...… 查看全部问答> |
|
各位哥哥姐姐,我想开发一个基于IBM HDAPS 的驱动,在网上查到已经有人在LINUX下开发出了这种程序,但是始终找不到WINDOWS底下的开发方法。具体的情况在以下网址有具体说明。希望各位哥哥姐姐多多指教 帮帮我 谢谢!!http: ...… 查看全部问答> |




