⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 _profile_timer_hw.c

📁 基于Xilinx-XUPV2P开发平台的嵌入式系统实验例程:实验4编写基本的应用程序
💻 C
字号:
////////////////////////////////////////////////////////////////////////// Copyright (c) 2004 Xilinx, Inc.  All rights reserved. // Xilinx, Inc. //// XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS" AS A // COURTESY TO YOU.  BY PROVIDING THIS DESIGN, CODE, OR INFORMATION AS // ONE POSSIBLE   IMPLEMENTATION OF THIS FEATURE, APPLICATION OR // STANDARD, XILINX IS MAKING NO REPRESENTATION THAT THIS IMPLEMENTATION // IS FREE FROM ANY CLAIMS OF INFRINGEMENT, AND YOU ARE RESPONSIBLE // FOR OBTAINING ANY RIGHTS YOU MAY REQUIRE FOR YOUR IMPLEMENTATION. // XILINX EXPRESSLY DISCLAIMS ANY WARRANTY WHATSOEVER WITH RESPECT TO // THE ADEQUACY OF THE IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO // ANY WARRANTIES OR REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE // FROM CLAIMS OF INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY // AND FITNESS FOR A PARTICULAR PURPOSE. //// $Header: /devl/xcs/repo/env/Jobs/MDT/sw/bsp/standalone/v1_00_a/src/profile/_profile_timer_hw.c,v 1.2 2005/07/12 21:13:00 rajn Exp $// $Id: _profile_timer_hw.c,v 1.2 2005/07/12 21:13:00 rajn Exp $//// _program_timer_hw.c://	Timer related functions////////////////////////////////////////////////////////////////////////#include "profile.h"#ifdef PROC_PPC#include "xexception_l.h"#include "xtime_l.h"#include "xpseudo_asm.h"#endif#ifdef TIMER_CONNECT_INTC#include "xintc_l.h"#include "xintc.h"#endif	// TIMER_CONNECT_INTC#ifndef PPC_PIT_INTERRUPT#include "xtmrctr_l.h"#endifextern unsigned int timer_clk_ticks ;//--------------------------------------------------------------------// PowerPC Target - Timer related functions//--------------------------------------------------------------------#ifdef PROC_PPC//--------------------------------------------------------------------// PowerPC PIT Timer Init. //	Defined only if PIT Timer is used for Profiling////--------------------------------------------------------------------#ifdef PPC_PIT_INTERRUPTint ppc_pit_init( void ){	// 1. Register Profile_intr_handler as Interrupt handler	// 2. Set PIT Timer Interrupt and Enable it.	XExc_RegisterHandler( XEXC_ID_PIT_INT, 			    (XExceptionHandler)profile_intr_handler,(void *)0);	XTime_PITSetInterval( timer_clk_ticks ) ;	XTime_PITEnableAutoReload() ;	return 0;}#endif//--------------------------------------------------------------------// PowerPC Timer Initialization functions.//	For PowerPC, PIT and opb_timer can be used for Profiling. This//	is selected by the user in standalone BSP////--------------------------------------------------------------------int powerpc405_init(){	XExc_Init() ; 	XExc_mDisableExceptions( XEXC_NON_CRITICAL ) ;	// Initialize the Timer.	// 1. If PowerPC PIT Timer has to be used, initialize PIT timer.	// 2. Else use opb_timer. It can be directly connected or thru intc to PowerPC#ifdef PPC_PIT_INTERRUPT	ppc_pit_init();#else#ifdef TIMER_CONNECT_INTC	XExc_RegisterHandler( XEXC_ID_NON_CRITICAL_INT, 			      (XExceptionHandler)XIntc_DeviceInterruptHandler,(void *)0);	XIntc_RegisterHandler( INTC_BASEADDR, PROFILE_TIMER_INTR_ID, 			     (XInterruptHandler)profile_intr_handler,(void*)0);#else	XExc_RegisterHandler( XEXC_ID_NON_CRITICAL_INT, 			      (XExceptionHandler)profile_intr_handler,(void *)0);#endif	// Initialize the timer with Timer Ticks	opb_timer_init() ;#endif	// Enable Interrupts in the System, if Profile Timer is the only Interrupt	// in the System.#ifdef ENABLE_SYS_INTR#ifdef PPC_PIT_INTERRUPT	XTime_PITEnableInterrupt() ;#elif TIMER_CONNECT_INTC		XIntc_mMasterEnable( INTC_BASEADDR );	XIntc_SetIntrSvcOption( INTC_BASEADDR, XIN_SVC_ALL_ISRS_OPTION);	XIntc_mEnableIntr( INTC_BASEADDR, PROFILE_TIMER_INTR_MASK );#endif	XExc_mEnableExceptions( XEXC_NON_CRITICAL ) ;#endif}#endif	// PROC_PPC//--------------------------------------------------------------------// opb_timer Initialization for PowerPC and MicroBlaze. This function// is not needed if PIT timer is used in PowerPC////--------------------------------------------------------------------#ifndef PPC_PIT_INTERRUPTint opb_timer_init( void ){	// set the number of cycles the timer counts before interrupting 	XTmrCtr_mSetLoadReg(PROFILE_TIMER_BASEADDR, 0, timer_clk_ticks);	// reset the timers, and clear interrupts 	XTmrCtr_mSetControlStatusReg(PROFILE_TIMER_BASEADDR, 0, 				     XTC_CSR_INT_OCCURED_MASK | XTC_CSR_LOAD_MASK );	// start the timers	XTmrCtr_mSetControlStatusReg(PROFILE_TIMER_BASEADDR, 0, XTC_CSR_ENABLE_TMR_MASK 			     | XTC_CSR_ENABLE_INT_MASK | XTC_CSR_AUTO_RELOAD_MASK | XTC_CSR_DOWN_COUNT_MASK);	return 0;}#endif//--------------------------------------------------------------------// MicroBlaze Target - Timer related functions//--------------------------------------------------------------------#ifdef PROC_MICROBLAZE//--------------------------------------------------------------------// Initialize the Profile Timer for MicroBlaze Target.//	For MicroBlaze, opb_timer is used. The opb_timer can be directly//	connected to MicroBlaze or connected through Interrupt Controller.////--------------------------------------------------------------------int microblaze_init(){	// Register profile_intr_handler	// 1. If timer is connected to Interrupt Controller, register the handler	//    to Interrupt Controllers vector table.	// 2. If timer is directly connected to MicroBlaze, register the handler	//    as Interrupt handler#ifdef TIMER_CONNECT_INTC	XIntc_RegisterHandler( INTC_BASEADDR, PROFILE_TIMER_INTR_ID, 			     (XInterruptHandler)profile_intr_handler,(void*)0);#else	microblaze_register_handler( (XInterruptHandler)profile_intr_handler,				     (void *)0) ;#endif		// Initialize the timer with Timer Ticks	opb_timer_init() ;	// Enable Interrupts in the System, if Profile Timer is the only Interrupt	// in the System.#ifdef ENABLE_SYS_INTR#ifdef TIMER_CONNECT_INTC		XIntc_mMasterEnable( INTC_BASEADDR );	XIntc_SetIntrSvcOption( INTC_BASEADDR, XIN_SVC_ALL_ISRS_OPTION);	XIntc_mEnableIntr( INTC_BASEADDR, PROFILE_TIMER_INTR_MASK );#endif	microblaze_enable_interrupts();#endif}#endif	// PROC_MICROBLAZE

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -