在NIOS II中有時(shí)需要對(duì)程序進(jìn)行精確地時(shí)間測(cè)量奠涌,這時(shí)便可以采用NIOS II提供的Interval Timer Core內(nèi)核進(jìn)行精確到單個(gè)時(shí)鐘周期的時(shí)間測(cè)量宪巨,即Timestamp的方式。
關(guān)于該部分的基本使用铣猩,不想多贅述揖铜,可以參考http://www.cnblogs.com/yuphone/archive/2010/04/18/1714628.html
的博文。
在本人的具體使用中达皿,由于使用的是Quartus Prime 15.1版本的軟件天吓,Qsys中模塊的參數(shù)界面如下圖所示:
使用上圖的設(shè)置在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"
上面需要重點(diǎn)關(guān)注的是,TIMERSTAMP_ALWAYS_RUN 是0峦椰,表示該計(jì)數(shù)器不是連續(xù)運(yùn)行的龄寞,只運(yùn)行一次就結(jié)束了。
為了讓計(jì)數(shù)器能夠連續(xù)地運(yùn)行汤功,就需要自己寫寄存器物邑,
可以看到控制寄存器的bit1,即CONT位置一的時(shí)候滔金,計(jì)數(shù)器連續(xù)運(yùn)行色解;為零則只運(yùn)行一次。
NIOS II中與寄存器的有關(guān)函數(shù)都在 altera_avalon_timer_regs.h 文件中餐茵。
NIOS II中timestamp的操作函數(shù)在 alt_timestamp.h中科阎。
本文的參考手冊(cè)包括:
《Nios II Gen2 Software Developer's Handbook》
《Embedded Peripherals IP User Guide》