ARM定时器

来源:互联网 发布:手机浏览器 知乎 编辑:程序博客网 时间:2024/05/27 20:52

第一、S3C2440共有516位的定时器。其中定时器0123PWM(脉冲宽度调制:利用处理器的数字输出控制模拟电路)功能,他们都有一个输出引脚,可以通过定时器来控制引脚周期性的高、低电平变化;定时器4没有输出引脚。

第二、定时器部件的时钟源为PCLK,首先通过两个8位的预分频器降低频率:定时器01共用第一个预分频器,定时器234公用第二个预分频器。预分频器的输出将进入第二级分频器,它们输出5种频率的时钟:2分频、4分频、8分频、16分频或者外部的TCLK0/TCLK1,每个定时器的工作时钟也可以从这5种频率中选择。

第三、定时器启动流程

1. 定时器初始化

(1) 初始化定时器时钟频率

 

根据前面“第二”可以知道,5个定时器(0,1,2,3,4)都要进预分频和二级分频。

定时器分频的公式为:

定时器分频后时钟频率=PCLK时钟源频率/prescaler(预分频值)/divider(二级分频值)

Prescaler的值由上面表中可知是通过寄存器TCFG0来配置的,如果是定时器2,3,4,那么Prescaler的值 = TCFG0[15:8]中设置的值;如果是定时器0,1,那么

Prescaler的值 = TCFG0[7:0]中设置的值。

Divider的值由寄存器TCFG1来设置的,如果是定时器0,那么

Divider的值由TCFG1[3:0]设置确定,如果是定时器1,那么

Divider的值由TCFG1[7:4]设置确定,如果是定时器2,那么

Divider的值由TCFG1[11:8]设置确定,如果是定时器3,那么

Divider的值由TCFG1[15:12]设置确定,如果是定时器4,那么

Divider的值由TCFG1[19:16]设置确定。   

(2) 初始化设置定时器计数值

   即对寄存器TCMPBnTCNTBn进行初始化(意思见后面讲的定时器工作流程

   其中TCMPBnTCNTBn两个单词最后一个字母n可取值为0,1,2,3,4,分别表示定时器

0,1,2,3,4。如TCMPB2TCNTB2表示配置定时器2的寄存器。

(3) 初始化设置中断处理函数

2. 定时器启动

设置寄存器TCON[0]值为1即可启动定时器,设置TCON[0]值为0关闭定时器

TCON[3]值为0表示定时器启动后只执行一个周期,TCON[3]值为1表示定时器启动后会循环执行定时器

第四、定时器工作过程,下图表示的是定时器0的寄存器

  

假设 TCMPB0值设置为50, TCNTB0设置值为100,

当启动定时器0

第(1)步TCMPB0会把值复制给TCMP0,TCNTB0把值复制给TCNT0

第(2)步TCNT0的值开始循环减1,当TCNT0的值被减到50时,TCNT0的值

  与TCMP0的值相同,此时会触发一个中断。(我们就可以设置一个

监听中断的中断处理函数,如果处理函数为播放音乐,那么就是相当于做了一个

闹钟了。

第(3)步TCNT0继承重复减1,TCNT0的值被减到0时,有两种可能的的执行流程:

A.再次执行上面的“第(1)步”;

B.结束;

具体是再次执行上面的“第(1)步”,还是执行“结束”,由寄存器TCON的设置还判断.

(如果要想实时的取出TCNT0的值,可以通过TCNTO0寄存器。)

原创粉丝点击