Nios II 定时器内核

  定时器是一个非常重要的外围设备。它可以作为系统的周期性时钟源(Tick); 也可以作为一个计时器,测定事件发生的时间;还可以对外输出周期性脉冲或作为一条监管系统正常运行的"看门狗"(Watchdog) 。

  定时器是挂载在 Avanlon 总线上的32位定时器,它提供以下特性:

  > 两种计数模式:单次减 1和连续减 1计数模式(软件设置,见控制寄存器CONT位);

  > 定时器达到 0 时产生中断请求(IRQ);

  > 可选择设定为看门狗定时器,当为看门狗时,定时器计算达到 0 时复位系统;

  > 可选择输出周期性脉冲,在定时器计算达到 0 时输出脉冲;

  > 可由软件启动、停止和复位定时器;

  > 可由软件使能或屏蔽定时器中断。

  定时器内核的结构图:

    

  其中,period_n 包括 periodh 和 periodl 两个寄存器,它们是装入定时器的初值寄存器,在每个时刻计数值可由 snaph 和 snapl 寄存器读出。定时器可以输出中断请求信号( IRQ)和看门狗复位信号(Reset) 到片内逻辑,还可以输出周期脉冲( Timeout Pulse) 到片外。

  定时器可进行的基本操作如下:

  -> Avalon 主控制器(如 Nios II 处理器) 通过控制寄存器执行不同的写操作来控制:

    · 启动和停止定时器;

    · 使能/禁止 IRQ; 

    · 指定单次减 1 计数 或 连续减 1 计数模式

  -> 处理器读状态寄存器获取当前定时器的运行信息。

  -> 处理器内部可通过写数据到 periodl 和 periodh 寄存器来设定定时器周期。 

  -> 内部计数器计数减到 0 ,立即从周期寄存器开始重新装载。

  -> 处理器可以通过写 snapl 或 snaph 获取计数器的当前值。

  -> 当计数器达到 0 时:

    · 如果IRQ 被使能,产生一个 IRQ;

    ·(可选的)脉冲发生器输出有效持续一个时钟周期。

    ·(可选的)看门狗输出复位系统。

 

  定时器寄存器的描述:

  

  这是32位的定时器,也可以配置成64位的,其相关的寄存器查阅Altera文档。可以看出有6个用户可以访问的16位寄存器映射和相关信息。

  1, 状态寄存器

  状态寄存器(Status)有 2 个定义位

  

  TO:   当内部计数器减到0时,TO(TimeOut)位被置为1。一旦发生 timeout 事件,TO 位保持置位直到被主控制器清除。向 TO 位写零即可清除置位状态。

  RUN: 当内部计数器运行时,RUN 位为1;否则该位为0,对RUN位的写操作无效。

 

  2, 控制寄存器

   控制寄存器(Control)有4个定义位

  

  

  ITO: 如果 ITO 位为1,则使能定时器中断;如果 ITO 位为 0 ;则屏蔽定时器中断。

  CONT: CONT(连续方式)位决定内部计数器减到 0 时的操作。如果 CONT 位为1 ,则计数器连续运行,直到用STOP来将其停止。如果 CONT 位为0,则计数器在减到 0 后停止。当计数器减到0时,不管CONT位的值如何,都会自动装载 periodl 和 periodh 寄存器中的32位计数器。

  START: 写1到START 位启动内部计数器运行(减1计数),写0 到起始位无效。

  STOP: 写1到停止位停止内部计数器,写0到停止位无效。如果定时器硬件配置为"关闭Start/Stop control bits",则写停止位无效。

  

  3, periodl & periodh 寄存器

  periodl 和 periodh寄存器一起存储超时周期的计数值。在以下任意一种情况发生时,保存在 periodl 和 periodh 中的值会装载到内部计数器中:

  -> 对periodl 或 periodh 寄存器进行写操作

  -> 内部计数器减0

 

  4, snapl & snaph 寄存器

  可通过对snapl 或 snaph 寄存器的写操作(写数据任意)来获得32为内部计数器的当前值。 当对snapl 或 snaph 执行写操作时,计数器的当前值会被复制到 snapl 和 snaph 中,不管计数器是否在执行,这个过程都会执行,并且不改变内部计数器的运行状态。

 

  5,中断操作

  只要内部计数器减到0 且控制寄存器的 ITO 位设置为1,定时器内核就会产生 IRQ。 要用以下的任意一种方式应答 IRQ:

  -> 清除状态寄存器的 TO 位,等待下一个超时事件的发生

  -> 通过将控制寄存器的 ITO 位清零来禁止中断

 

  定时器内核配置选项:

  

  Timeout Period -> 设置 periodl 和 periodh 寄存器的初始值,这个值可以根据系统输入时钟和Initial period 中的设定值获得。当Writeable period 设置关闭时,周期保持固定且不能在运行中修改。

  Initial period -> 用于预设硬件生成后的定时器周期,如果不用软件更改的话,那么定时器将按照这个周期产生 timeout 事件

  Presets -> 为方便使用,提供几个预定义的硬件配置:

    simple periodic interrupt (简单的周期中断):用于仅要求周期性 IRQ 发生器的系统。周期固定且不能停止定时器,但可以禁止 IRQ。

    full-feaured(完整特性)

    watchdog(看门狗)

posted on 2011-01-09 22:45  zxl2431  阅读(2765)  评论(2编辑  收藏  举报

导航