本文简单描述如何使用timestamp_timer服务,来测试usleep(1*1000*1000)到底用了多长时间。
使 用环境:Altera Quartus 9.1 SP1 + Nios II 9.1 Software Build Tools for Eclipse SP1
步骤1 在SOPC Builder中例化Interval Timer核:
1. 在SOPC Builder中例化Interval Timer核,命名为timestamp_timer。
图1 例化Interval Timer核
注意:命名为timestamp_timer只是为了和BSP中 timestamp_timer一致,也可以命名为其他名称。
图2 BSP中的相关设置
2. 配置Interval Timer核
图3 配置Interval Timer核
注意:Timeout period随便设,不影响时间戳服务。但是Writable period和Readable snapshot要勾上,因为要用到。
表1 寄存器选项
步骤2 NIOS II EDS中编写相应的C程序
1. 在BSP中选择timestamp_timer,如图2所示。
2. 查看system.h中的相应内容
01 |
#define ALT_MODULE_CLASS_timestamp_timer altera_avalon_timer |
02 |
#define TIMESTAMP_TIMER_ALWAYS_RUN 1 |
03 |
#define TIMESTAMP_TIMER_BASE 0x1002020 |
04 |
#define TIMESTAMP_TIMER_COUNTER_SIZE 32 |
05 |
#define TIMESTAMP_TIMER_FIXED_PERIOD 0 |
06 |
#define TIMESTAMP_TIMER_FREQ 125000000u |
07 |
#define TIMESTAMP_TIMER_IRQ 3 |
08 |
#define TIMESTAMP_TIMER_IRQ_INTERRUPT_CONTROLLER_ID 0 |
09 |
#define TIMESTAMP_TIMER_LOAD_VALUE 124ULL |
10 |
#define TIMESTAMP_TIMER_MULT 1.0E-6 |
11 |
#define TIMESTAMP_TIMER_NAME "/dev/timestamp_timer" |
12 |
#define TIMESTAMP_TIMER_PERIOD 1 |
13 |
#define TIMESTAMP_TIMER_PERIOD_UNITS "us" |
14 |
#define TIMESTAMP_TIMER_RESET_OUTPUT 0 |
15 |
#define TIMESTAMP_TIMER_SNAPSHOT 1 |
16 |
#define TIMESTAMP_TIMER_SPAN 32 |
17 |
#define TIMESTAMP_TIMER_TICKS_PER_SEC 1000000u |
18 |
#define TIMESTAMP_TIMER_TIMEOUT_PULSE_OUTPUT 0 |
19 |
#define TIMESTAMP_TIMER_TYPE "altera_avalon_timer" |
第6行,Nios II软核的输入时钟频率,此处为125MHz。
3. 示范程序
02 |
#include "sys/alt_timestamp.h" // Interval Timer核的驱动头文件 |
03 |
#include "alt_types.h" |
11 |
alt_timestamp_start(); |
17 |
printf ( "时间戳t0 = %ld \n" , t0); |
18 |
printf ( "时间戳t1 = %ld \n" , t1); |
19 |
printf ( "时间戳(t1-t0) = %ld \n" , (t1-t0)); |
21 |
printf ( "系统时钟频率是 %ld Hz\n" , alt_timestamp_freq()); |
22 |
printf ( "时间戳(t1-t0)花费 %f 秒\n" , |
23 |
( double )(t1-t0)/alt_timestamp_freq()); |
注:是发博客发出来的,不属于该代码。
时间戳服务就是将每1秒等分为系统时钟频率大小的个数。然后已经两个时间戳大小,相减再除以系统时钟频率数,就可以得到两个时间戳之间花费的时间 了。
4. 运行结果
图4 运行结果
参考资料
1. Volume5: Embedded Peripherals, QuartusII Handbook Version 9.1
http://www.altera.com/literature/hb/nios2/n2cpu_nii5v3.pdf