- 通过修改xtime_l.c的XTime_GetTime代码完成对于程序运行耗用时间的计算
void XTime_GetTime(XTime *Xtime)
{
u32 low;
u32 high;
do
{
high = Xil_In32(GLOBAL_TMR_BASEADDR + GTIMER_COUNTER_UPPER_OFFSET);
low = Xil_In32(GLOBAL_TMR_BASEADDR + GTIMER_COUNTER_LOWER_OFFSET);
} while(Xil_In32(GLOBAL_TMR_BASEADDR + GTIMER_COUNTER_UPPER_OFFSET) != high);
*Xtime = (((XTime) high) << 32) | (XTime) low;
}
- ZYNQ PS端DDR3的全地址读写测试和所用时间的测试
#include "stdio.h"
#include "xparameters.h"
#include "xparameters_ps.h"
#include "xil_printf.h"
#include "xil_io.h"
#include "sleep.h"
#include "xtime_l.h"
#include "xpm_counter.h"
#define COUNTS_PER_SECOND (XPAR_CPU_CORTEXA9_CORE_CLOCK_FREQ_HZ / 2)
#define DDR_BASEARDDR XPAR_DDR_MEM_BASEADDR + 0x00100000
int main()
{
u32 i;
u32 j=0;
u32 k=0;
u8 rev;
XTime tEnd, tCur;
u32 tUsed;
xil_printf("Wait for read and write test for PS_DDR3......\n\r");
XTime_GetTime(&tCur);
for(i=0; i<(((u32)XPAR_DDR_MEM_HIGHADDR)-((u32)DDR_BASEARDDR)); i++)
{
Xil_Out8(DDR_BASEARDDR+i,(i+0x20));
rev=Xil_In8(DDR_BASEARDDR+i);
if(rev==(u8)(i+0x20)){
j++;
}
else {
k++;
}
}
if(j==(((u32)XPAR_DDR_MEM_HIGHADDR)-((u32)DDR_BASEARDDR))){
xil_printf("The PS_DDR3 TEST SUCCESSFUL\n\r");
}
else{
xil_printf("The PS_DDR3 TEST FAILED\n\r");
}
sleep(1);
xil_printf("The correct count is:%x\r",j);
sleep(1);
xil_printf("The error count is:%x\r",k);
XTime_GetTime(&tEnd);
tUsed = ((tEnd-tCur)*1000000)/(COUNTS_PER_SECOND);
xil_printf("time elapsed is %d us\r\n",tUsed);
return 0;
}