TCP传输协议中Interval Timer核的设置及其使用

时间:2021-10-27 21:30:15

一、摘要

  在博文“DIY_DE2之DM9000A网卡调试系列例程(四)——基于NicheStack协议栈的TCP/IP实现”中提到,通过SOPC搭建NIOS II软核时候,需要一个Interval Timer核,以供uC/OS II系统所用。Interval Timer核有多种模式,当时随手选了一个 Simple periodic interrupt模式,数据传输倒也正常。只是,在完成基于UDP协议的视频传输的基础上,进行基于TCP协议的视频传输时(二者的硬件配置完全相同),网络传输不能工作,最后断定了Interval Timer核的问题,选择了Full-featured模式,网络正常工作。下面描述一下Interval Timer核。

 

二、Interval Timer核概述

该时间计数器是基于Avalon架构的处理器设计的时间计数器。该计数器有如下特点:

(1)32位和64位计数;

(2)具有计数开始、计数停止、和复位计数器功能;

(3)两种技术模式:单次计数、连续计数;

(4)计数周期寄存器;

(5)当计数器计数到0时,可以选择使能或者禁止触发中断(IRQ);

(6)可选作为看门狗,即当计数器从不达到0,产生系统复位;

(7)可选产生周期脉冲,当计数器计数到0时;

(8)可用于32位或者16位处理器中。如16位的NIOS和32位的NIOS II。

 

三、在SOPC Builder中实例化Interval Timer核

TCP传输协议中Interval Timer核的设置及其使用

 

3.1 计数周期(Timeout Period

  计数周期决定了周期计数器(period registers)的值。处理器可以通过写周期计数器(period registers)改变计数器值。或者当禁止可写周期(Writeable period),周期计数器(period registers)不可通过处理器的写操作而改变;此时周期计数器只能是一个不可改变的固定周期计数值。

Interval  Timer的计数周期是系统时钟周期的整数倍。实际的时钟周期可以这样求:

(1)求出系统的时钟。指驱动Interval Timer 的时钟。一般与NIOS II时钟一致。

(2)将周期计数器里面高16位和低16位的值乘与时钟时期即得计数周期。

3.2 计数大小(Counter Size

  该设定决定了计数器的位宽。可以设定为32位或者64位。32位位宽的计数器包含有2个16位的寄存器;而64位位宽的计数器包含有4个16位宽的寄存器。该设定同样应用至snap单元。

3.3 硬件选项(hardware counter size)

(1)Simple periodic interrupt—该设定用于只需要一个带有中断(IRQ)的计数器。该方式下,计数周期是固定不可软件更改的,且计数不能停止但中断(IRQ)可禁止。

(2)Full-featured—该配置适用于一个可被处理器更改,可变计数周期,且其开始、停止均可被更改的计数器。

(3)Watchdog—适用于系统需要看门狗的情况。当系统停止响应,该配置能使系统复位。

(4)Custom—自定义。

3.4 寄存器(register)设定说明

(1)Writeable period——当选中此项,则主外设(NIOS II)可通过写周期寄存器(period registers)达到修改计数周期的目的。若未选中此项,则计数周期被确定为(Timeout Period),不可更改;同时周期寄存器(period registers)不再存在。

(2)Readable snapshot——当选中此项,则主外设(NIOS II)可以读取当前计数值。若未选中此项,则主外设只能依靠查询状态寄存器(status register)或者中断(IRQ)标志来得知计数状态;此时(snap registers)并不存在,读取该寄存器会有不确定的数值。

(3)Start/Stop control bits——当选中此项,则主外设(NIOS II)可以通过写控制寄存器(control register)来 启动、停止计数器。若未选中此项,则计数器默认为连续计数模式。值得注意的是,当系统看门狗复位(System reset on timeout (watchdog))是使能状态,则控制寄存器(control register)中的(start)位被置位,而不管Start/Stop 控制位的状态。

3.5 信号输出选项(Output signals

(1)Timeout pulse (1 clock wide)——当选中该项,则计数器产生一个信号端口(timeout_pulse),该信号端口在计数器减计数至0时产生一个系统时钟周期的高电平。若未选中该项,则计数器不产生该信号端口。

(2)System reset on timeout (watchdog)——当选中该项,则计数器产生一个复位信号端口(resetrequest port)该信号在计数器减计数至0时产生一个系统时钟周期的高电平。若未选中该项,则该信号端口不存在。

3.6 配置计数器为看门狗

若要使用看门狗,则应作如下选择。

(1)presets:选择Watchdog;

(2)Timeout Period修改成所需要的时间

(3)Writeable period禁止;

(4)Readable snapshot禁止;

(5)Start/Stop control bits禁止;

(6)Timeout pulse禁止;

(7)System reset on timeout (watchdog)使能。

  复位之后看门狗是禁止的。随后,处理器往控制寄存器(control register)的START位写1,开启看门狗计数。看门狗一旦开启,就不能结束。为了不使系统复位,处理器应该定时地复位计数值。

   

  PS:更详细的文档可以参考官方的datasheet。