前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >AMD MicroBlaze中通过AXI Timer获取时间戳

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

作者头像
hankfu
发布2023-05-23 13:35:26
3170
发布2023-05-23 13:35:26
举报
文章被收录于专栏:hankhank

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

  1. 硬件的Vivado Block design设计中,添加AXI Timer
  2. 包含AXI Timer的头文件
代码语言:javascript
复制
#include "xtmrctr.h"
  1. 定义timer的参数和全局变量
代码语言:javascript
复制
/*
* 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 */
  1. 初始化AXI Timer

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

代码语言:javascript
复制
    TmrCtrPolledInit(TMRCTR_DEVICE_ID, TIMER_COUNTER_0);

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

  1. 通过XTmrCtr_GetValue获取时间戳

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

代码语言:javascript
复制
    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, __func__, __LINE__ );     
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-05-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档