AMD MicroBlaze中通过AXI Timer获取时间戳

文章介绍了如何在VivadoBlockdesign中添加AXITimer,然后通过包含xtmrctr.h头文件来操作定时器。接着定义了定时器的相关参数和全局变量,如设备ID和计数器编号。通过TmrCtrPolledInit()函数初始化AXITimer,并使用XTmrCtr_GetValue获取时间戳,计算时间差。示例代码展示了如何在循环中测量执行时间并将其转换为不同单位。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作者:付汉杰 hankf@amd.com

1. 硬件的Vivado Block design设计中,添加AXI Timer

2. 包含AXI Timer的头文件

#include "xtmrctr.h"

3. 定义timer的参数和全局变量

/*
* The following constants map to the XPAR parameters created in the
* xparameters.h file. They are only defined here such that a user can easily
* change all the needed parameters in one place.
*/
#define TMRCTR_DEVICE_ID              XPAR_TMRCTR_0_DEVICE_ID


/*
 * This example only uses the 1st of the 2 timer counters contained in a
 * single timer counter hardware device
 */
#define TIMER_COUNTER_0   0


// #define XPAR_AXI_TIMER_0_CLOCK_FREQ_HZ 100000000U  100 000 000U
#define TMRCTR_DEVICE_FREQ_MS              (XPAR_TMRCTR_0_CLOCK_FREQ_HZ/1000)
#define TMRCTR_DEVICE_FREQ_US              (TMRCTR_DEVICE_FREQ_MS/1000)


#define TMRCTR_DEVICE_PERIOD_NS ( (1000*1000*1000)/XPAR_AXI_TIMER_0_CLOCK_FREQ_HZ )


XTmrCtr TimerCounter; /* The instance of the Tmrctr Device */

4. 初始化AXI Timer

调用TmrCtrPolledInit()初始化AXI Timer, 也初始化了全局变量TimerCounter。

TmrCtrPolledInit(TMRCTR_DEVICE_ID, TIMER_COUNTER_0);

其中TmrCtrPolledInit()来自于xtmrctr_polled_example.c中的TmrCtrPolledExample(),可以在BSP中从AXI Timer的“Import Example”中导入。

5. 通过XTmrCtr_GetValue获取时间戳

通过XTmrCtr_GetValue获取时间戳,是以时钟周期为单位的。可以转化成微妙、毫秒、秒等单位。

time_begin = XTmrCtr_GetValue(TmrCtrInstancePtr, TmrCtrNumber);
    for (i=0; i<100000; i++ ) {
        g_iLoopTest++;
    }
    time_end = XTmrCtr_GetValue(TmrCtrInstancePtr, TIMER_COUNTER_0);    


    if( time_end < time_begin ){
        time_diff = 0xffffffff - time_begin;
        time_diff = time_diff + time_end + 1;
    } else {
        time_diff = time_end - time_begin;
    }
    time_diff_us = time_diff/TMRCTR_DEVICE_FREQ_US;
    xil_printf("100K loop: %x : Timer diff: 0x%08x = %d Cycles, %d us, %d ms at %s : %d\r\n",
            g_iLoopTest, time_diff, time_diff, time_diff_us, time_diff_us/1000, __
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值