ZYNQ定时器—DT(global timer)全局定时器

ZYNQ定时器——DT(global timer)全局定时器

/****************************************************************************
*
* Set the time in the Global Timer Counter Register.
*
* @param	Value to be written to the Global Timer Counter Register.
*
* @return	None.
*
* @note		In multiprocessor environment reference time will reset/lost for
*	all processors, when this function called by any one processor.
*
****************************************************************************/
****void XTime_SetTime(XTime Xtime_Global)
{
	/* Disable Global Timer */
	Xil_Out32((u32)GLOBAL_TMR_BASEADDR +(u32)GTIMER_CONTROL_OFFSET, (u32)0x0);
	/* Updating Global Timer Counter Register */
	Xil_Out32((u32)GLOBAL_TMR_BASEADDR +(u32)GTIMER_COUNTER_LOWER_OFFSET, (u32)Xtime_Global);
	Xil_Out32((u32)GLOBAL_TMR_BASEADDR +(u32)GTIMER_COUNTER_UPPER_OFFSET,
(u32)((u32)(Xtime_Global>>32U)));
	/* Enable Global Timer */
	Xil_Out32((u32)GLOBAL_TMR_BASEADDR + (u32)GTIMER_CONTROL_OFFSET, (u32)0x1);
}****

/****************************************************************************
*
* Get the time from the Global Timer Counter Register.
*
* @param	Pointer to the location to be updated with the time.
*
* @return	None.
*
* @note		None.
*
****************************************************************************/
void XTime_GetTime(XTime *Xtime_Global)
{
	u32 low;
	u32 high;

	/* Reading Global Timer Counter Register */
	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_Global = (((XTime) high) << 32U) | (XTime) low;
}

以上两个函数是在bsp standalone中的xtime_l.c中。

并且官方已经把全局定时器自动初始化好了,其频率为CPU频率的一半。

这样的话,使用void XTime_GetTime(XTime *Xtime_Global)就能计算出一段程序的耗时。如下:
ZYNQ定时器—DT(global timer)全局定时器_第1张图片
中间的一段代码是TTC定时器,不用看。

实验效果如下:
ZYNQ定时器—DT(global timer)全局定时器_第2张图片

可以看出,因为GT是64位计数器,TTC是16位计数器。
GT计时精度高,计时时间又长,完胜TTC。

ZYNQ定时器—DT(global timer)全局定时器_第3张图片

ZYNQ-7000中共有SCU私有定时器、GT全局定时器、看门狗定时器、TTC定时器。

SCU被用作了freertos的操作系统时钟。32位。
GT也被官方使用了。64位。
看门狗定时器用于复位。32位。
只给用户剩下了TTC定时器了啊。16位。

你可能感兴趣的:(ZYNQ-7000)