NIOS II中用Interval Timer Core进行精确时间测量

在NIOS II中有时需要对程序进行精确地时间测量,这时便可以采用NIOS II提供的Interval Timer Core内核进行精确到单个时钟周期的时间测量,即Timestamp的方式。

关于该部分的基本使用,不想多赘述,可以参考http://www.cnblogs.com/yuphone/archive/2010/04/18/1714628.html
的博文。

在本人的具体使用中,由于使用的是Quartus Prime 15.1版本的软件,Qsys中模块的参数界面如下图所示:


Interval Timer模块界面

使用上图的设置在system.h生成的代码如下所示:

#define ALT_MODULE_CLASS_timerstamp altera_avalon_timer
#define TIMERSTAMP_ALWAYS_RUN 0
#define TIMERSTAMP_BASE 0x21000
#define TIMERSTAMP_COUNTER_SIZE 32
#define TIMERSTAMP_FIXED_PERIOD 0
#define TIMERSTAMP_FREQ 100000000
#define TIMERSTAMP_IRQ 1
#define TIMERSTAMP_IRQ_INTERRUPT_CONTROLLER_ID 0
#define TIMERSTAMP_LOAD_VALUE 99999
#define TIMERSTAMP_MULT 0.001
#define TIMERSTAMP_NAME "/dev/timerstamp"
#define TIMERSTAMP_PERIOD 1
#define TIMERSTAMP_PERIOD_UNITS "ms"
#define TIMERSTAMP_RESET_OUTPUT 0
#define TIMERSTAMP_SNAPSHOT 1
#define TIMERSTAMP_SPAN 32
#define TIMERSTAMP_TICKS_PER_SEC 1000
#define TIMERSTAMP_TIMEOUT_PULSE_OUTPUT 0
#define TIMERSTAMP_TYPE "altera_avalon_timer"

上面需要重点关注的是,TIMERSTAMP_ALWAYS_RUN 是0,表示该计数器不是连续运行的,只运行一次就结束了。
为了让计数器能够连续地运行,就需要自己写寄存器,


32位寄存器表
控制寄存器表

可以看到控制寄存器的bit1,即CONT位置一的时候,计数器连续运行;为零则只运行一次。

NIOS II中与寄存器的有关函数都在 altera_avalon_timer_regs.h 文件中。
NIOS II中timestamp的操作函数在 alt_timestamp.h中。

本文的参考手册包括:

《Nios II Gen2 Software Developer's Handbook》
《Embedded Peripherals IP User Guide》

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,832评论 19 139
  • 一个计数器通常是由一组触发器构成,该组触发器按照预先给定的顺序改变其状态,如果所有触发器的状态改变是在同一时钟脉冲...
    锦穗阅读 14,990评论 0 6
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,965评论 25 709
  • 给自己做一个菜 各种小菜记录片
    迷糊云阅读 1,369评论 0 0
  • [self.testTextField setValue : [UIColor redColor] forKeyP...
    Eafy阅读 1,409评论 0 0

友情链接更多精彩内容