ZYNQ TTC使用方法

前言

計時器是嵌入式編程中最常使用的模塊了,本文介紹下ZYNQ中定時器的使用,大部分內容參照官方手冊ug1085

平臺

Vivado 2017.4
Windows 10
ZCU102開發板

Features

在這裏插入圖片描述

Block Diagram

在這裏插入圖片描述

直接上應用代碼

定時器初始化

int XTtcPs_Init(XTtcPs * TimerPtr,u16 DeviceId ,u16 rate_hz)
{
	int Status;
	XTtcPs_Config *Config;

	XInterval Interval;
	u8 Prescaler;

	Config = XTtcPs_LookupConfig(DeviceId);  // 查找設備

	Status = XTtcPs_CfgInitialize(TimerPtr, Config, Config->BaseAddress);

	if (Status != XST_SUCCESS) {
		xil_printf("In %s:\t XTtcPs %d initialization Failed...\r\n",
				__func__,DeviceId);
		return XST_FAILURE;
	}
	else
	{
		xil_printf("In %s:\t XTtcPs %d initialization Success...\r\n",
				__func__,DeviceId);
	}
	XTtcPs_SetOptions(TimerPtr, XTTCPS_OPTION_INTERVAL_MODE | XTTCPS_OPTION_WAVE_DISABLE);
	XTtcPs_CalcIntervalFromFreq(TimerPtr, rate_hz, &Interval, &Prescaler);
	XTtcPs_SetInterval(TimerPtr, Interval);
	XTtcPs_SetPrescaler(TimerPtr, Prescaler);
	//XTtcPs_Start(TimerPtr);
	return Status;
}

註冊中斷函數

要注意,中斷函數裏儘量快進快出,以免出現不必要的問題。

	XScuGic_SetPriorityTriggerType(ScuGicInstancePtr, XPAR_XTTCPS_2_DEVICE_ID,0x10, 0x3); //設置優先級
	XScuGic_Connect(&ScuGicInstance, XPAR_XTTCPS_2_INTR,(Xil_InterruptHandler)XTtcPs2_ScTick_callback,
			(void *)&XTtcPs2_ScTick);
	XScuGic_Enable(&ScuGicInstance, XPAR_XTTCPS_2_INTR);
	XTtcPs_EnableInterrupts(&XTtcPs2_ScTick, XTTCPS_IXR_INTERVAL_MASK);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章