网站导航: 首页 > 设计参考 > 正文 文章搜索
s3c2410 Timer工作原理[图]
 
文章编号:
081209211843
文章分类: 单片机 ARM
点 击:
...
关 键 词: s3c2410,Timer,时钟
文章来源:
网络,作者:蔡于清
摘 要:
s3c2410提供了5个16位的Timer(Timer0~Timer4),其中Timer0~Timer3支持Pulse Width Modulation—— PWM(脉宽调制 )。Timer4是一个内部定时器(internal timer),他没有输出引脚(output pins)...

    s3c2410提供了5个16位的Timer(Timer0~Timer4),其中Timer0~Timer3支持Pulse Width Modulation—— PWM(脉宽调制 )。Timer4是一个内部定时器(internal timer),他没有输出引脚(output pins)。
    下面是Timer的工作原理图。
 
    如上图所示,PCLK是Timer的信号源,我们通过设置每个Timer相应的Prescaler和Clock Divider把PCLK转换成输入时钟信号传送给各个Timer的逻辑控制单元(Control Logic),事实上每个Timer都有一个称为输入时钟频率(Timer input clock Frequency)的参数,这个频率就是通过PCLK,Prescaler和Clock Divider确定下来的,每个Timer 的逻辑控制单元就是以这个频率在工作。下面给出输入时钟频率的公式:

 
  1. Timer input clock Frequency = PCLK / {prescaler value+1} / {clock divider }   
  2. {prescaler value} = 0~255   
  3. { clock divider } = 2, 4, 8, 16  

    然而并不是每一个Timer都有对应的Prescaler和Clock Divider,从上面的原理图我们可以看到Timer0,Timer1共用一对Prescaler和Clock Divider,Timer2,Timer3,Timer4共用另一对Prescaler和Clock Divider,s3c2410的整个时钟系统模块只存在两对Prescaler和Clock Divider。
    我曾经在讨论watchdog的文章中提到,watchdog也是一种定时器,他的工作就是在一个单位时间内对一个给定的数值进行递减和比较的操作,而我们这篇文章讨论的定时器他的工作内容和watchdog在本质上是一样的。定时器在一个工作周期(Timer input clock cycle)内的具体工作内容主要有3个。分别是:

  1. 对一个数值进行递减操作
  2. 把递减后的数值和另一个数值进行比较操作
  3. 产生中断或执行DMA操作

     在启用Timer之前我们会对Timer进行一系列初始化操作,这些操作包括上面提到的设置Prescaler和Clock Divider,其中还有一个非常重要的就是要给Timer两个数值,我们分别称之为Counter(变量,用于递减)和Comparer(定值,用于比较),Counter会被Timer 加载到COUNT BUFFER REGISTER(TCNTB),而Comparer会被Timer 加载到和COMPARE BUFFER REGISTER(TCMPB),每个Timer都有这样两个寄存器。当我们设置完毕启动Timer之后,Timer在一个工作周期内所做的就是先把TCNTB中的数值(Counter)减1,之后把TCNTB中的数值和TCMPB中的数值(Comparer)进行对比,若Counter已经被递减到等于Comparer,发生计数超出,则Timer产生中断信号(或是执行DMA操作)并自动把Counter重新装入TCNTB(刷新TCNTB以重新进行递减)。以上就是Timer的工作原理。

下面我们结合代码具体说明如何对Timer0进行初始化并开启它。
首先我假设我的PCLK是50700000Hz

 
  1. // define Timer register   
  2. #define rTCFG0 (*(volatile unsigned int *)0x51000000)   
  3. #define rTCFG1 (*(volatile unsigned int *)0x51000004)   
  4. #define rTCON (*(volatile unsigned int *)0x51000008)   
  5. #define rTCNTB0 (*(volatile unsigned int *)0x5100000C)   
  6. #define rTCMPB0 (*(volatile unsigned int *)0x51000010)   
  7. #define rTCNTO0 (*(volatile unsigned int *)0x51000014)   
  8. #define rTCNTB1 (*(volatile unsigned int *)0x51000018)   
  9. #define rTCMPB1 (*(volatile unsigned int *)0x5100001C)   
  10. #define rTCNTO1 (*(volatile unsigned int *)0x51000020)   
  11. #define rTCNTB2 (*(volatile unsigned int *)0x51000024)   
  12. #define rTCMPB2 (*(volatile unsigned int *)0x51000028)   
  13. #define rTCNTO2 (*(volatile unsigned int *)0x5100002C)   
  14. #define rTCNTB3 (*(volatile unsigned int *)0x51000030)   
  15. #define rTCMPB3 (*(volatile unsigned int *)0x51000034)   
  16. #define rTCNTO3 (*(volatile unsigned int *)0x51000038)   
  17. #define rTCNTB4 (*(volatile unsigned int *)0x5100003C)   
  18. #define rTCNTO4 (*(volatile unsigned int *)0x51000040)   
  19.   
  20. void timer0_config()   
  21. {   
  22.     /*  
  23.     Timer0的prescaler由rTCFG0 的 0~7 bit决定  
  24.     Prescaler=119  
  25.     */  
  26.     rTCFG0=119           
  27.     /*  
  28.     Timer0的divider value由TCFG1的 0~3 bit决定,设置为3表示divider value = 1/16  
  29.     rTCFG1的第20~23bit用于决定Timer计数超出后所采取的响应,我们使用了中断模式(20~23bit全部为0),  
  30.     即计数超出后产生中断  
  31.     */  
  32.     rTCFG1=3;   
  33.        
  34.     rTCNTB0=26406;   
  35.     rTCMPB0=0;   
  36. }  
 
相关文章:
虚拟SPI时序在TC77与S3C2410通信中的应用[图]
s3c2410 MMU(存储器管理单元)讲解[图]
s3c2410 CACHES,WRITE BUFFER讲解[图]
S3C2410中的脉宽调制定时器(PWM)
S3C2410 中断程序的实现
s3c2410 watchdog详解
s3c2410 中断异常处理[图]
基于ARM9芯片S3C2410a的GPRS数据终端设计
ARM系统中DMA方式在数据采集中的应用[图]
AD7888与S3C2410的SPI接口及Linux下嵌入式驱动的实现[图]
基于s3c2410的ARMer9开发平台的使用
ARM S3C2410硬件手册重点
基于ARM S3C2410与TMS320C6416的接口设计[图]
S3C2410上Jffs2的移植
ARM S3C2410驱动TFT-LCD的研究[图]
MINIGUI在S3C2410开发板的移植
mplayer在S3C2410上的移植
在S3C2410上移植yaffs2文件系统
S3C2410 bootloader(vivi)阅读笔记
s3c2410 LCD图片显示
S3C2410 LCD 驱动程序移植及GUI程序编写[图]
S3C2410X开发总结及心得
U-Boot在S3C2410开发板上的移植
S3C2410初始化
S3C2410通过IIS总线与音频芯片UDA1380进行通信
在S3C2410上移植bluetooth(蓝牙)
S3c2410软件调试总结
S3C2410上触摸屏的应用实例
S3c2410的触摸屏及模数转换
S3C2410的快速启动技术
基于嵌入式linux和s3c2410平台的视频采集
S3c2410 LCD驱动学习心得
s3c2410移植MPlayer到linux2.6

12 下一页
 
最新开源项目
 
 
  查看更多...  
 
本站相关产品   淘宝网店
 




 
  查看更多...  

 

本站程序由百合电子工作室开发和维护
Copyright @ baihe electric studio
渝ICP备09006681号-4