全局计时器





int GlobalTimer_init(u64 Load_Value)
{
	//加载初始值,计数器是增加的,初始值设为0;
	XTime_SetTime(0);

     //加载计数周期,私有定时器的时钟为CPU的一半,为333MHZ,如果计数1S,加载值为1sx(333x1000x1000)(1/s)-1=0x13D92D3F
	Xil_Out32((u32)GLOBAL_TMR_BASEADDR + (u32)GTIMER_CONTROL_OFFSET, (u32)0x01);
	/* Updating Global Timer Comparator Value Register */
	Xil_Out32((u32)GLOBAL_TMR_BASEADDR + (u32)0x10, (u32)Load_Value);
	Xil_Out32((u32)GLOBAL_TMR_BASEADDR + (u32)0x14, (u32)((u32)(Load_Value>>32U)));
	/* Enable Comparator */
	Xil_Out32((u32)GLOBAL_TMR_BASEADDR + (u32)GTIMER_CONTROL_OFFSET, (u32)0x3);


     //自动装载
	Xil_Out32(XPAR_GLOBAL_TMR_BASEADDR + (0x08U), ((Xil_In32(XPAR_GLOBAL_TMR_BASEADDR + (0x08U)) |		 \
     				0x00000008U)));
    return 1;
}
void GlobalTimer_Setup_Intr_System(XScuGic *GicInstancePtr, u16 TimerIntrId)
{
        XScuGic_Connect(GicInstancePtr, TimerIntrId,
                        (Xil_ExceptionHandler)TIM_UP_IRQHandler,//set up the timer interrupt
                        (void *)1);//最后这个回调是给中断服务函数一个参数地址

        XScuGic_Enable(GicInstancePtr, TimerIntrId);//enable the interrupt for the Timer at GIC
//        XScuTimer_EnableInterrupt(TimerInstancePtr);//enable interrupt on the timer
        Xil_Out32(XPAR_GLOBAL_TMR_BASEADDR + (0x08U), ((Xil_In32(XPAR_GLOBAL_TMR_BASEADDR + (0x08U)) |	\
        					0x00000004U)));
}

中断服务函数进行下清零。(照着XTime_SetTime函数修改了一下控制字的置零)

	//-----清零------------------
	Xil_Out32((u32)GLOBAL_TMR_BASEADDR + (u32)GTIMER_CONTROL_OFFSET, ((Xil_In32(XPAR_GLOBAL_TMR_BASEADDR + (u32)GTIMER_CONTROL_OFFSET) &		 \
				(~0x00000001U))));

	/* Updating Global Timer Counter Register */
	Xil_Out32((u32)GLOBAL_TMR_BASEADDR + (u32)GTIMER_COUNTER_LOWER_OFFSET, (u32)0);
	Xil_Out32((u32)GLOBAL_TMR_BASEADDR + (u32)GTIMER_COUNTER_UPPER_OFFSET, (u32)((u32)(0>>32U)));

	/* Enable Global Timer */
	Xil_Out32((u32)GLOBAL_TMR_BASEADDR + (u32)GTIMER_CONTROL_OFFSET, ((Xil_In32(XPAR_GLOBAL_TMR_BASEADDR + (u32)GTIMER_CONTROL_OFFSET) |		 \
				0x00000001U)));
	//-----清零----------------



https://blog.csdn.net/w371500241/article/details/53689507

https://blog.csdn.net/leon_zeng0/article/details/79776175



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值