七、mini2440裸机程序之定时器中断(3)定时器简介

1.概览

        S3C2440A有516-bit的定时器 . 定时器0,1,2,3有PWM功能 , 定时器4只有一个内部定时没有关联上输出管脚 . 定时器0有一个dead-zone产生器 ,用于大电流设备 .

       

        定时器 0 和 1 共享这一个8-bit的预分频器 , 定时器2,3,4共享另一个8-bit的预分频器 . 每一个定时器都有一个时钟分频器 , 用于产生5个不同的分频信号(1/2 ,1/4  , 1/8  , 1/16 , TCLK) . 每一个定时器模块从时钟分频器(clock divider)(输入到时钟分配器的信号是来自于对应的8-bit预分频器)接收自己的时钟信号 . 这个8-bit的预分频器是可编程的并且分频PCLK根据设置的值(TCFG0TCFG1寄存器里的值) .

 

        定时计数缓冲寄存器(timer count buffer :TCNTBn):在定时器启动时 , TCNTBn里的值 会被加载到递减计数器(down-counter)里 . 而对于定时比较缓冲寄存器(timer compare buffer : TCMPBn)里的值会被加载到比较寄存器(compare register)来跟递减计数器进行比较. 

 

        每一个定时器都有一个属于自己的16-bit的递减计数器,这个计数器的计数由定时器时钟驱动. 但递减计数器到达0时 , 定时器中断请求产生通知CPU定时器运行完成 .

 

        TCMPBn的值通常用于PWM . 定时器控制逻辑改变输出逻辑当递减计数器和比较寄存器相匹配时 , 所以比较寄存器决定了PWM输出的开启时间(或者说关闭时间) .

 

特征:

------5个16-bit定时器

------两个8-bit预分频和两个4-bit分频器

------可编程PWM占空比

------重装载模式或者一次性脉冲模式

------dead-zone产生器

 

2.16-bit PWM 定时器模块框架图

 

3.PWM定时器的运行时序如下:


注:

          一个定时器(除了定时器通道5)都有TCNBn , TCNTn, TCMPBn 和 TCMPn . (TCNTn和TCMPn都为内部寄存器 . 其中TCNTn的值可以从TXCNTOn寄存器里读到) 当定时器到达 0 时 , TCNTBn和TCMPBn的内容被装载到TCNTn和TCMPn . 当TCNTn到达0 , 一个中断请求将会出现  (假如中断使能)  .  当TCNTn = TCMPn时 , TOUTn逻辑电平翻转.

 

4.自动重载(auto reload)和双重缓冲器

        S3C2440A的PWM定时器有一个双重缓冲功能 , 使能重载内容给下一个定时操作而不需要停止当前的定时操作 . 所以 , 尽管性的定时器值被设置 , 当前定时器操作都能正确完成 .

       

        定时器的内容可以写入TCNTBn , 并且可以从TCNTOn寄存器里读取定时器的当前计数值 . 假如TCNTBn被读取 , 这个值是用于下次定时操作的重载值而不是当前计数器的值 .

 

        一旦TCNTn到达 0 之后 , 自动重载操作拷贝TCNTBn的值到TCNTn . 写在TCNTBn里的值只有在TCNTn到达 0 并且使能自动重载才会被加载到TCNTn . 假如TCNTn计数到0并且自动重载位被设置为 0 ,那么TCNTn不做任何操作  .

     

       以下是一个例子:

 七、mini2440裸机程序之定时器中断(3)定时器简介_第1张图片

5.定时器初始化使用manual update 和 inverter bit(反相位)

        一个定时器的自动重载操作会在递减计数器计数到 0 时发生  . 所以 , 一个TCNTn的初始值必须提前被定义 . 在这种情况下 , 初始值需要手动加载到进TCNTn通过manual update位. 具体步骤如下:

        1)把初始值写入TCNTBn和TCMPBn

        2)设置相应定时器的manual update位 .  (推荐也配置反相器开关位)

        3)设置相应定时器的启动位来启动定时器(并且清除手动更新位)

 

如果定时器被迫停止 ,TCNTn保持计数值并且不从TCNTBn重载数据 . 如果希望设置一个新的计数值 , 则需要手动更新 .

 

注意:

        一旦TOUT反相器开关位被改变了 , TOUTn逻辑值也被改变不管定时器有没有工作 , 所以 , 在设置手动配置位时也配置反相器开关位是合适的 .

 

        1)输出电平控制

                 如果反相器被关闭 , 那么定时器的输出管脚初始值为高电平在定时器启动后 , TCNTn>TCMPn期间 , 输出为  ' 0 ' , TCNTn < TCMPn期间 , 输出为1 ' .  如果反相器被打开 , 情况与上述相反 .

 

 

 

 

 

 

 


你可能感兴趣的:(七、mini2440裸机程序之定时器中断(3)定时器简介)