发 帖  
原厂入驻New

[经验] 定时器的工作流程和操作概要【附带样例代码,S3C2440数据手册】

2020-9-1 09:52:17  206 定时器 ARM S3C2440
分享
1
这篇文章是参考S3C2440的数据手册的第10章《PWM定时器》做的笔记,想要了解地更深入,需要多看手册多写代码验证。

概述
S3C2440A 有 5 个 16 位定时器。其中定时器 0、1、2 和 3 具有脉宽调制(PWM)功能。定时器 4 是一个无输出引脚的内部定时器。定时器 0 还包含用于大电流驱动的死区发生器。
S3C2440有两个8 位预分频器。定时器 0 和 1 共用一个 8 位预分频器,定时器 2、3 和 4 共用另外的 8 位预分频器。使得PCLK分频进入下一步操作。8 位预分频器由TCFG0寄存器设置。
每个定时器都有一个可以生成 5 种不同分频信号(1/2,1/4,1/8,1/16 和 TCLK)的时钟分频器。使得经过8 位预分频器的时钟再次分频。由TCFG1寄存器设置。
看一下PWM定时器的方框图:
1.jpg

从方框图仅能看出定时器的时钟频率,具体如何工作还需看内部结构。

下图为内部控制逻辑图:
2.png

定时器的工作流程为:
  • 设置TCMPBn和TCNTBn,分别为比较值和初值。
  • 随之设置TCON启动定时器,这时,TCMPBn和TCNTBn的值被装载至TCMPn和TCNTn。定时器的TCNTn开始减1计数
  • 当TCNTn的值等于TCMPn的值时,定时器的输出管脚TOUTn的输出电平反转。定时器的TCNTn继续减1计数。
  • 当TCNTn的值减到0时,输出管脚TOUTn的输出电平再次反转。并处罚中断。
  • 当TCNTn的值减到0时,如果TCON寄存器中设置为自动重载,则TCMPBn和TCNTBn的值被自动装载至TCMPn和TCNTn,开始下一个计数流程。

对于定时器的操作:
1、设置时钟
2、设置初值
3、加载初值,启动timer
4、设置自动加载
5、中断相关


编程
具体代码如下:

  1. #include "timer.h"
  2. extern flag;

  3. void interrupt_init(void)
  4. {

  5.         INTMSK &= ~(1<<10);                /* Service available */
  6.        
  7. }


  8. /* 定时器输入时钟频率 = PCLK / {预分频值+1} / {分频值} */
  9. /* 31250 = 50000000/(99+1)/16  */
  10. void timer_init(void)
  11. {
  12.         TCFG0 = 99;                        //定时器0和1的预分频值为99
  13.         TCFG1 &= ~(0xf<<0);
  14.         TCFG1 |= (3<<0);        //定时器1的分频值为1/16
  15.         TCNTB0 = 31250;                //定时周期设为1s
  16.         TCON |= (1<<1);                //手动更新
  17.        
  18.         TCON &= ~(1<<1);
  19.         TCON |= ((1<<0) | (1<<3));                //开启自动重载,开启定时器
  20. }

  21. void timer_isr(void)
  22. {       
  23.         if (flag)
  24.         {
  25.                 GPFDAT |= (1<<4);
  26.                 GPFDAT |= (1<<5);
  27.                 GPFDAT |= (1<<6);
  28.                
  29.                 flag = 0;
  30.         }
  31.         else
  32.         {
  33.                 GPFDAT &= ~(1<<4);
  34.                 GPFDAT &= ~(1<<5);
  35.                 GPFDAT &= ~(1<<6);

  36.                 flag = 1;               
  37.         }
  38.         SRCPND |= (1<<10);                        //清中断
  39.         INTPND |= (1<<10);       
  40. }
复制代码
授人以鱼不如授人以渔,文档奉上。

S3C2440全套中文手册.pdf

下载积分: 积分 -1 分

12.84 MB, 下载次数: 2, 下载积分: 积分 -1 分

相关经验

xiaojiujiu 2020-9-3 17:54:44
感谢分享,学习学习,真的太棒了,写的很详细
回复

举报

评论

高级模式
您需要登录后才可以回帖 登录 | 注册

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
发经验
关闭

站长推荐 上一条 /7 下一条

快速回复 返回顶部 返回列表