• AT91RM9200---定时器简介


    1.前言

    • 系统定时器模块集成了3个不同的定时器

    一个周期性间隔的定时器,用来为操作系统设置时基

    一个看门狗定时器,可用于软件死锁时进行系统复位

    一个实时时钟计数器用来记录流逝的时间

    •  系统定时器时钟

    这些定时器计数使用由PMC(电源管理控制器)提供的慢时钟,这个时钟的典型频率是32.768KHZ,系统定时器也可以配置成支持其它频率

    • 定时器中断

    系统定时器提供了一条中断线,连接到中断控制器,一般是作为终端控制器的中断源1,与debug单元和RTC共用一条中断线,需要通过寄存器进行区分。

    2.系统定时器框架

    • 硬件框架

     图 系统定时器框架

     

    • 定时器的用途

     图 定时器的用途

    3.功能介绍

    • 系统定时器时钟

    系统定时器只使用SCLK时钟

    • 周期性间隔定时器

    周期性间隔定时器用来为操作系统提供周期性的中断,PIT的reset值是0。

    它是基于一个16位的递减计数器。它是通过将一个值预加载到ST_PIMR中。

    当计数器达到0的时候,状态寄存器的PITS会被置位。如果使能中断,则会产生一个中断。计数器会自动加载初始值并启动。在任何时候加载ST_PIMR寄存器会立即采用新的初值并重新启动。

    注意:ST_PIMR的周期如果小于MCK周期,则会产生不可预料的问题

    • 看门狗定时器

    看门狗定时器是防止软件陷入死锁的时候造成系统卡死

    它是通过一个16位的递减寄存器实现,初始值由ST_WDMR进行设置。

    Reset时的值为0x00020000。它是使用了slow clock的128分频,来达到最大的周期为256s(典型slow clk为32.768khz情况下),也就是每隔128个slow clock周期,计数器加1.

    通常情况下,在看门狗定时器溢出之前,用户会通过设置ST_CR.WDRST重新加载看门狗定时器初值

    如果溢出发生,会做如下操作

    设置中断产生的 ST_SR ( 状态寄存器 ) 的 WDOVF 位
    l如果ST_WDMR .RSTEN被设置会产生内部reset信号
    l Reloads and restarts the down counter.

    写ST_WDMR寄存器不会加载并重启计数器。当ST_CR被写入,看门狗计数器会立即从ST_WDMR寄存器载入并重启,slow clock 128分频也会立即重置并重启。

    • 实时时钟

    实时时钟被用来计数流逝的秒数。它是基于一个20位的计数器,时钟是由slow clk用编程值进行分频。Reset时这个值分频值被设置为0x8000。

    当slow时钟采用32.768khz时,计数器则每隔1秒加1。20bit可以计数到1048576秒,多于12天的时间,然后回绕到0.

    实时时钟可以在任何时候从ST_CRTR 寄存器读出值。

    计数器的当前值和alarm寄存器ST_RTAR进行比较。如果计数值匹配,TC_SR寄存器的ALMS位被设置。

    Reset后alarm寄存器被设置成最大值0.
    20位计数器每次增加时,设置ST_SR中的RTTINC位,该位可用来启动中断,或产生一秒信号。
    写 ST_RTMR 将立即对时钟分频器载入新值并重启,这同样会导致 20 位计数器复位

     

  • 相关阅读:
    Redis数据持久化机制AOF原理分析一---转
    Linux中常用头文件的作用--转
    Signal Handling--ref
    Linux 信号signal处理函数--转
    深入redis内部--初始化服务器
    haproxy 503 service unavailable no server is avaible to handle this request
    linux下logrotate配置和理解---转
    extjs_09_定义自己的页面组件
    BZOJ 3211 弗洛拉前往国家 树阵+并检查集合
    atitit.无损传输二进制数据串传输网络
  • 原文地址:https://www.cnblogs.com/smartjourneys/p/7123183.html
Copyright © 2020-2023  润新知