Linux驱动01 - Timer

一、概述

1. 功能原理和应用场景
Timer(定时器/计数器)以一定的频率计数;到规定数值后,产生中断标志Timer任务的完成。(如:Timer为子系统产生内部中断,实现精准有效的系统时间管理。)
定时器控制器组成部分
  • 可编程的分频器(一级、二级…)

    • Timer的时钟源一般为芯片内部时钟,可使用分频器分频
  • 数值缓冲器(TCNTBx)

    • 数值缓冲器的工作模式:
      • 自动装载模式。减法计数器减为零时,计数缓冲器自动装载数值到减法计数器中;
      • 手动装载模式。
    • 提示:
      • 一般每个Timer对应两个数值缓冲器结构,这是为了可以在一个周期内更新Timer的值。但需在当前周期结束后,更新的值才会生效。
  • 减法计数器(down-counter)

    • 计数器由Timer的时钟来驱动
    • 当在“数值缓冲器”中的值被减到零时,如果设置了中断使能位,Timer将会在对应信号线上产生中断,同时置位相关寄存器的中断标志位;
2. 典型电路
a. 执行逻辑图(Allwinner - H8)

Allwinner-H8-Timer-blockDiagram

b. 使用步骤
使用步骤 + 目的操作对象(所属寄存器+位域)功能描述
FunctionA01 暂停TimerCTRL -> bit0(0: 停止/暂定, 1:开始)
*. 当计数器被启动后,它会重新装载数值缓冲器的值到减法计数器中;
*. 当在减法计数器的值减到零之前,暂停的计数器需要等到两个周期以后才能再次启动;
*. 在暂停状态,数值缓冲器的值可以被修改,如果需要在再次启动计数器的时候使用新的数值缓冲器的值,则需要在启动计数器之前,设置Reload位
FunctionA02 设置Timer1的时钟源CTRL -> bit[3:2]00: 32K
01: OSC24M.
10: /
11: /.
FunctionA03 设置Timer1分频CTRL -> bit[6:4]000: /1
001: /2
010: /4
011: /8
100: /16
101: /32
110: /64
111: /128
FunctionA04 设置Timer1单触发模式CTRL -> bit7当减法计数器完成工作,定时器自动停止
FunctionA05 使能Timer IRQIRQ -> bit1(0: 无影响; 1: 减法计数器完成后中断使能)
FunctionB01 设置计数值INTV -> bit[31:0]需要考虑系统和计数器的时钟
FunctionB02 重新装在计数缓冲器的数值到减法计数器中CTRL -> bit1(0: 无影响, 1: 重新装载减法计数器的数值
*. 在该位被设置并完成任务自动归位后,才能再次设置该位为1
FunctionB03 启动计数器CTRL -> bit0(0: 停止/暂停, 1: 启动.)

二、Linux应用和驱动Demo程序示例

github链接: interfaceDriver-Timer(by Henry)

三、注意:

  • 不足之处还望指正,多多留言
  • 如需转载,请注明出处,谢谢~
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值