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(看门狗)