• s3c2440定时器简介


    S3c2440 有5 个16 位的定时器。定时器0、1、2、3 有脉宽调制功能(PWM)。定时器4有一个没有输出引脚的内部定时器。定时器0 有一个用于大电流设备的死区生成器。
     
    定时器0 和1 共享一个8 位的预分频器(预定标器),定时器2,3,4 共享另一个8 位预分
    频器.
     
     
    定时器的时钟源为PCLK,首先经过预分频器降低频率后,进入第二个分频.可以生成5 种不同的分频信号(1/2,1/4,1/8,1/16 和TCLK)
     
    定时器启动后,TCNTn开始减一计数,当TCNTn 等于TCMPn时, TOUTn 反转, TCNTn继续减数.
    当TCNTn= 0 时, TOUTn 再次反转,并触发中断(中断已经使能).
    若TCON 设为自动加载, TNCTn/TCMPNn 的值被重装.
     
    寄存器:
    TCFG0: 配置两个8 位预分频器, [15:8] 此8 位决定定时器2,3,4 的预标定器值,[7:0] 此8 位决定定时器0,1 的预标定器值
    输出频率: = PCLK / (prescaler value + 1)
     
    TCFG1:
    用于设置第二个分频.可以设置5 种不同的分频信号(1/2,1/4,1/8,1/16 和TCLK)
     
    至此可得到
    定时器工作频率=PCLK / (prescaler value + 1) / (divider value)
     
    divider value = 2,4,8, 16
     
    TCON: 定时器控制寄存器
     
    TCNTBn :设置一个被装载到递减计数器中的初始值。
     
    TCMPBn: 设置一个被装载到比较寄存器中用来和递减计数
    器的值作比较的初始值。
     
    TCNTOn  : 通过读取其可以得到TCNTBn 的值
     
    定时器初始化示例:
    void timer0_init(void)
    {
        TCFG0  = 99;        // 预分频器0 = 99        
        TCFG1  = 0x03;      // 选择16分频
        TCNTB0 = 31250;     // 0.5秒钟触发一次中断
        TCON   |= (1<<1);   // 手动更新
        TCON   = 0x09;      // 自动加载,清“手动更新”位,启动定时器0
    }
  • 相关阅读:
    POJ_3104_Drying_(二分,最小化最大值)
    POJ_3273_Monthly_Expense_(二分,最小化最大值)
    POJ_3185_The_Water_Bowls_(反转)
    POJ_2566_Bound_Found_(尺取法+前缀和)
    POJ_3061_Subsequence_(尺取法)
    POJ_3258_River_Hopscotch_[NOIP2015]_(二分,最大化最小值)
    POJ_1064_Cable_master_(二分,假定一个解并判断是否可行)
    POJ_2456_Agressive_cows_(二分,最大化最小值)
    背包九讲之三(多重背包)
    背包九讲之二(完全背包)
  • 原文地址:https://www.cnblogs.com/hnrainll/p/2092292.html
Copyright © 2020-2023  润新知