作者:付汉杰 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 ) XTmrCtrTimerCounter;/*TheinstanceoftheTmrctrDevice*/
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 ", g_iLoopTest, time_diff, time_diff, time_diff_us, time_diff_us/1000, __
审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
amd
+关注
关注
25文章
5197浏览量
132636 -
MicroBlaze
+关注
关注
3文章
66浏览量
21437 -
Timer
+关注
关注
1文章
58浏览量
12679 -
AXI
+关注
关注
1文章
126浏览量
16286 -
时间戳
+关注
关注
0文章
15浏览量
2537
原文标题:AMD MicroBlaze中通过AXI Timer获取时间戳
文章出处:【微信号:Hack电子,微信公众号:Hack电子】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
如何在microblaze上测量C代码的执行时间?
如何在microblaze上测量C代码的执行时间?没有使用OS,所以我不能在time.h中使用桌面C函数,我是否必须使用xps计时器或axi计时器?任何人都可以使用xps计时器来测量执行时间
发表于 10-30 09:36
请问如何通过MicroBlaze访问BRAM?
嗨,大家好,我正在研究Vivado 2014.4,Xilinx KC705。我需要通过Microblaze读取存储在BRAM(coe文件)中的数据进行计算。我是微博阅读部分的新手。有人可以建议我
发表于 05-20 08:38
MicroBlaze控制LED的方法
MicroBlaze控制LED入门【史上最详细】码字截图不易,转载请注明标题和作者,谢谢!!!本教程是写给以Xilinx官方开发板作为平台的初学者本实例中开发环境:软件平台:Win10专业版
发表于 02-09 06:24
如何在tilebox上获取时间戳?
你好我知道 tilebox 有一个 RTC 模块,所以我意识到获取当前时间来为数据生成时间戳是可行的。可以这样做吗?在给定的项目示例中是否有
发表于 01-05 08:59
基于AXI总线的MicroBlaze双核SoPC系统设计
目的是利用嵌入在Xilinx FPGA中的MicroBlaze核实现基于AXI总线的双核嵌入式系统设计以及共享实现LED灯的时控.
发表于 03-09 14:17
•91次下载
如何使用MicroBlaze调用AXI IP核详细解析
在一个项目中,当你使用microblaze作为控制器来进行系统调度的时候,一般是建议将所有模块封装成AXI形式的IP核,这样好管理,也容易调试。
MicroBlaze大内部存储器(AXI BRAM)设计
MicroBlaze可以使用AXI BRAM存放数据和指令。有些客户软件很大,需要把AXI BRAM的空间做到最大。AXI BRAM底层是Block RAM或者Ultra RAM。器件
评论