微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > mini2440定时器学习笔记

mini2440定时器学习笔记

时间:11-21 来源:互联网 点击:
S3C2440有5个16位定时器,定时器0、1、2和3有PWM功能(因此这4个定时器也被称为PWM定时器),都有一个输出引脚,定时器4是一个内部定时器,无外部输出引脚。
定时器的时钟源是PCLK,然后通过内部的两级分频器分频得到定时器工作所需要的频率。其中,定时器0、1公用一个8位的第一级预分频器prescaler 0,定时器2、3、4公用另一个8位的第一级预分频器prescaler 1;每个定时器都有一个与之对应的第二级分频器clock divider如下图所示

虽然定时器较多,但工作原理都是相同的,只需要理解一个定时器的工作原理即可。对于某一个定时器,其内部结构原理图如图二所示。缓存寄存器TCMPBn和TCNTBn用于缓存定时器n的比较值和初始值;TCON用于控制定时器的开启与关闭;通过读取寄存器TCNTOn得到定时器当前计数值。



定时器工作原理概述:
①首先,将定时器的比较值和初始值装入寄存器TCMPBn和TCMPBn中
②然后,设置定时器控制寄存器TCON,启动定时器。此时,TCMPBn和TCNTBn中的值会加载到寄存器TCMPn和TCNTn中。
③此时,定时器会减1计数,即TCNTn进行减1计数,当TCMPn=TCNTn时,TOUTn引脚输出相反。

定时器初始化
① 定时器时钟频率(比如定时器时钟频率为50,则1秒钟计数寄存器减去50;为100,则1秒钟计数寄存器减去100);
② 设置定时器计数值(比如计数初值为100,而定时器时钟频率为50,则两秒后会产生中断,比如引脚输出相反电平);
③ 设置中断处理函数



①时钟频率初始化:定时器的时钟频率=PCLK/(prescaler+1)/(divider value)
其中: prescaler value=0~255 (它的值由TCFG0寄存器设置,如下图)
divider value=2,4,8,16 (它的值由TCFG1寄存器设置,如下图)

TCFG0描述初始值
保留[31:24]0x00
Dead zone length[23:16]此8位决定死区长度。死区长度的单位时间等于定时器0的单位时间

0x00
Prescaler 1[15:8]此8位决定定时器2,3,4的预标定器值0x00
Prescaler 0[7:0]此8位决定定时器0,1的预标定器值0x00





②计数值初始化:这两个寄存器存放的是设定的计数比较值,直接对其赋值即可.下面以定时器0为例:
TCMPB0描述初始值
Timer 0 computer buffer register[15:0]Set compare buffer value for Timer00x00000000


TCNTB0描述初始值
Timer 0 count buffer register[15:0]Set count buffer value for Timer 00x00000000

③设置中断处理函数,自己编写。

例1:结合上面讲解可知,定时器0的输入时钟是经过PCLK分频的得到的,下图展示了其产生过程。

-------------------------------------分割线---------------------------------------------------

分析:在上题中出现了TCFG1和TCFG0两个定时器配置寄存器,其中TCFG0配置寄存器控制第一级分频器prescaler的分频系数,TCFG1配置寄存器控制多路选择开关,选择第二级分频器divider的分频系数。具体如下图所示:


-----------------------------------------分割线---------------------------------------------------




-----------------------------------------分割线--------------------------------------------------
例2:PCLK为50MHz,请设置适当的分频系数,使定时器0的输入时钟为62.5kHz。
答:已知PCLK为50MHz,则50MHz/62.5kHz=800,即需要对PCLK进行800分频。所以,使第一级分频器的分频系数为100,第2级的分频系数为8即可满足要求。最后,只需要将分频系数写入定时器控制寄存器中相应的位即可,代码如下:
1 rTCFG0&=~(0xFF);将TCFG0的低8位清零
2 rTCFG0|=99;因为分频系数=prescaler+1,即prescaler+1=100,所以,prescaler value=99
3 rTCFG1&=~(0xF);将TCFG1的低4位清零

4 rTCFG1|=0x02;将TCFG1的低4位赋值为0x02,即选择8分频输出

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top