Zynq定时器中断试验整理

/***************************** Include Files *********************************/
#include "xparameters.h"
#include "xscutimer.h"
#include "xscugic.h"
#include "xil_exception.h"
#include "xil_printf.h"

/************************** Constant Definitions *****************************/
#define TIMER_DEVICE_ID		XPAR_XSCUTIMER_0_DEVICE_ID
#define INTC_DEVICE_ID		XPAR_SCUGIC_SINGLE_DEVICE_ID
#define TIMER_INTR_ID		XPS_SCU_TMR_INT_ID
#define TIMER_LOAD_VALUE	(XPAR_PS7_CORTEXA9_0_CPU_CLK_FREQ_HZ/2 - 1) //loda time 1s

/************************** Function Prototypes ******************************/
static void TimerIntrHandler(void *CallBackRef);

/************************** Variable Definitions *****************************/
XScuTimer TimerInstance;	/* Cortex A9 Scu Private Timer Instance */
XScuGic IntcInstance;		/* Interrupt Controller Instance */
volatile int TimerCnt;
volatile int TimerIntr_Flag;
int main(){

	XScuTimer_Config *TimeConfigPtr;
	XScuGic_Config *IntcConfig;

	xil_printf("SCU Timer Interrupt Example Test \r\n");
/************************** Timer Initialize *****************************/
	TimeConfigPtr = XScuTimer_LookupConfig(TIMER_DEVICE_ID);
	XScuTimer_CfgInitialize(&TimerInstance, TimeConfigPtr,TimeConfigPtr->BaseAddr);
/************************** Intc Initialize *****************************/
	IntcConfig = XScuGic_LookupConfig(INTC_DEVICE_ID);
	XScuGic_CfgInitialize(&IntcInstance, IntcConfig,IntcConfig->CpuBaseAddress);
/************************** Intr System Setup *****************************/
	//Exception setup
	Xil_ExceptionInit();//None
	Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_IRQ_INT,(Xil_ExceptionHandler)XScuGic_InterruptHandler,&IntcInstance);
	Xil_ExceptionEnable();
	//XScugic setup
	XScuGic_Connect(&IntcInstance, TIMER_INTR_ID,(Xil_ExceptionHandler)TimerIntrHandler,&TimerInstance);
	XScuGic_Enable(&IntcInstance, TIMER_INTR_ID);
	//timer setup
	XScuTimer_EnableInterrupt(&TimerInstance);

/************************** Timer Setup *****************************/
	XScuTimer_EnableAutoReload(&TimerInstance);
	XScuTimer_LoadTimer(&TimerInstance, TIMER_LOAD_VALUE);
	XScuTimer_Start(&TimerInstance);

	xil_printf("SCU Timer Start \r\n");

	while(1){

		if(TimerIntr_Flag){
			xil_printf(" %d Second\n\r",TimerCnt);
			TimerCnt++;
			TimerIntr_Flag = 0;
		}

	}



}


/**************************  TimerIntrHandler *****************************/
static void TimerIntrHandler(void *CallBackRef)
{
	XScuTimer *TimerInstancePtr = (XScuTimer *) CallBackRef;

	if (XScuTimer_IsExpired(TimerInstancePtr)) {
		XScuTimer_ClearInterruptStatus(TimerInstancePtr);
		TimerIntr_Flag = 1;
		/*
		if (TimerCnt == 30) {
			XScuTimer_DisableAutoReload(TimerInstancePtr);
			printf("Test Finish");
		}
		*/
	}
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值