264 lines
		
	
	
	
		
			8.6 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			264 lines
		
	
	
	
		
			8.6 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
|   | /*****************************************************************************
 | ||
|  | * Copyright 2004 - 2008 Broadcom Corporation.  All rights reserved. | ||
|  | * | ||
|  | * Unless you and Broadcom execute a separate written software license | ||
|  | * agreement governing use of this software, this software is licensed to you | ||
|  | * under the terms of the GNU General Public License version 2, available at | ||
|  | * http://www.broadcom.com/licenses/GPLv2.php (the "GPL").
 | ||
|  | * | ||
|  | * Notwithstanding the above, under no circumstances may you combine this | ||
|  | * software in any way with any other Broadcom software provided under a | ||
|  | * license other than the GPL, without Broadcom's express prior written | ||
|  | * consent. | ||
|  | *****************************************************************************/ | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @file    tmrHw.h | ||
|  | * | ||
|  | *  @brief   API definitions for low level Timer driver | ||
|  | * | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | #ifndef _TMRHW_H
 | ||
|  | #define _TMRHW_H
 | ||
|  | 
 | ||
|  | #include <csp/stdint.h>
 | ||
|  | 
 | ||
|  | typedef uint32_t tmrHw_ID_t;	/* Timer ID */ | ||
|  | typedef uint32_t tmrHw_COUNT_t;	/* Timer count */ | ||
|  | typedef uint32_t tmrHw_INTERVAL_t;	/* Timer interval */ | ||
|  | typedef uint32_t tmrHw_RATE_t;	/* Timer event (count/interrupt) rate */ | ||
|  | 
 | ||
|  | typedef enum { | ||
|  | 	tmrHw_INTERRUPT_STATUS_SET,	/* Interrupted  */ | ||
|  | 	tmrHw_INTERRUPT_STATUS_UNSET	/* No Interrupt */ | ||
|  | } tmrHw_INTERRUPT_STATUS_e; | ||
|  | 
 | ||
|  | typedef enum { | ||
|  | 	tmrHw_CAPABILITY_CLOCK,	/* Clock speed in HHz */ | ||
|  | 	tmrHw_CAPABILITY_RESOLUTION	/* Timer resolution in bits */ | ||
|  | } tmrHw_CAPABILITY_e; | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   Get timer capability | ||
|  | * | ||
|  | *  This function returns various capabilities/attributes of a timer | ||
|  | * | ||
|  | *  @return  Numeric capability | ||
|  | * | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | uint32_t tmrHw_getTimerCapability(tmrHw_ID_t timerId,	/*  [ IN ] Timer Id */ | ||
|  | 				  tmrHw_CAPABILITY_e capability	/*  [ IN ] Timer capability */ | ||
|  | ); | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   Configures a periodic timer in terms of timer interrupt rate | ||
|  | * | ||
|  | *  This function initializes a periodic timer to generate specific number of | ||
|  | *  timer interrupt per second | ||
|  | * | ||
|  | *  @return   On success: Effective timer frequency | ||
|  | *            On failure: 0 | ||
|  | * | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | tmrHw_RATE_t tmrHw_setPeriodicTimerRate(tmrHw_ID_t timerId,	/*  [ IN ] Timer Id */ | ||
|  | 					tmrHw_RATE_t rate	/*  [ IN ] Number of timer interrupt per second */ | ||
|  | ); | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   Configures a periodic timer to generate timer interrupt after | ||
|  | *           certain time interval | ||
|  | * | ||
|  | *  This function initializes a periodic timer to generate timer interrupt | ||
|  | *  after every time interval in milisecond | ||
|  | * | ||
|  | *  @return   On success: Effective interval set in mili-second | ||
|  | *            On failure: 0 | ||
|  | * | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | tmrHw_INTERVAL_t tmrHw_setPeriodicTimerInterval(tmrHw_ID_t timerId,	/*  [ IN ] Timer Id */ | ||
|  | 						tmrHw_INTERVAL_t msec	/*  [ IN ] Interval in mili-second */ | ||
|  | ); | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   Configures a periodic timer to generate timer interrupt just once | ||
|  | *           after certain time interval | ||
|  | * | ||
|  | *  This function initializes a periodic timer to generate a single ticks after | ||
|  | *  certain time interval in milisecond | ||
|  | * | ||
|  | *  @return   On success: Effective interval set in mili-second | ||
|  | *            On failure: 0 | ||
|  | * | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | tmrHw_INTERVAL_t tmrHw_setOneshotTimerInterval(tmrHw_ID_t timerId,	/*  [ IN ] Timer Id */ | ||
|  | 					       tmrHw_INTERVAL_t msec	/*  [ IN ] Interval in mili-second */ | ||
|  | ); | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   Configures a timer to run as a free running timer | ||
|  | * | ||
|  | *  This function initializes a timer to run as a free running timer | ||
|  | * | ||
|  | *  @return   Timer resolution (count / sec) | ||
|  | * | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | tmrHw_RATE_t tmrHw_setFreeRunningTimer(tmrHw_ID_t timerId,	/*  [ IN ] Timer Id */ | ||
|  | 				       uint32_t divider	/*  [ IN ] Dividing the clock frequency */ | ||
|  | ) __attribute__ ((section(".aramtext"))); | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   Starts a timer | ||
|  | * | ||
|  | *  This function starts a preconfigured timer | ||
|  | * | ||
|  | *  @return  -1     - On Failure | ||
|  | *            0     - On Success | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | int tmrHw_startTimer(tmrHw_ID_t timerId	/*  [ IN ] Timer id */ | ||
|  | ) __attribute__ ((section(".aramtext"))); | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   Stops a timer | ||
|  | * | ||
|  | *  This function stops a running timer | ||
|  | * | ||
|  | *  @return  -1     - On Failure | ||
|  | *            0     - On Success | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | int tmrHw_stopTimer(tmrHw_ID_t timerId	/*  [ IN ] Timer id */ | ||
|  | ); | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   Gets current timer count | ||
|  | * | ||
|  | *  This function returns the current timer value | ||
|  | * | ||
|  | *  @return  Current downcounting timer value | ||
|  | * | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | tmrHw_COUNT_t tmrHw_GetCurrentCount(tmrHw_ID_t timerId	/*  [ IN ] Timer id */ | ||
|  | ) __attribute__ ((section(".aramtext"))); | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   Gets timer count rate | ||
|  | * | ||
|  | *  This function returns the number of counts per second | ||
|  | * | ||
|  | *  @return  Count rate | ||
|  | * | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | tmrHw_RATE_t tmrHw_getCountRate(tmrHw_ID_t timerId	/*  [ IN ] Timer id */ | ||
|  | ) __attribute__ ((section(".aramtext"))); | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   Enables timer interrupt | ||
|  | * | ||
|  | *  This function enables the timer interrupt | ||
|  | * | ||
|  | *  @return   N/A | ||
|  | * | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | void tmrHw_enableInterrupt(tmrHw_ID_t timerId	/*  [ IN ] Timer id */ | ||
|  | ); | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   Disables timer interrupt | ||
|  | * | ||
|  | *  This function disable the timer interrupt | ||
|  | * | ||
|  | *  @return   N/A | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | void tmrHw_disableInterrupt(tmrHw_ID_t timerId	/*  [ IN ] Timer id */ | ||
|  | ); | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   Clears the interrupt | ||
|  | * | ||
|  | *  This function clears the timer interrupt | ||
|  | * | ||
|  | *  @return   N/A | ||
|  | * | ||
|  | *  @note | ||
|  | *     Must be called under the context of ISR | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | void tmrHw_clearInterrupt(tmrHw_ID_t timerId	/*  [ IN ] Timer id */ | ||
|  | ); | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   Gets the interrupt status | ||
|  | * | ||
|  | *  This function returns timer interrupt status | ||
|  | * | ||
|  | *  @return   Interrupt status | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | tmrHw_INTERRUPT_STATUS_e tmrHw_getInterruptStatus(tmrHw_ID_t timerId	/*  [ IN ] Timer id */ | ||
|  | ); | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   Indentifies a timer causing interrupt | ||
|  | * | ||
|  | *  This functions returns a timer causing interrupt | ||
|  | * | ||
|  | *  @return  0xFFFFFFFF   : No timer causing an interrupt | ||
|  | *           ! 0xFFFFFFFF : timer causing an interrupt | ||
|  | *  @note | ||
|  | *     tmrHw_clearIntrrupt() must be called with a valid timer id after calling this function | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | tmrHw_ID_t tmrHw_getInterruptSource(void); | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   Displays specific timer registers | ||
|  | * | ||
|  | * | ||
|  | *  @return  void | ||
|  | * | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | void tmrHw_printDebugInfo(tmrHw_ID_t timerId,	/*  [ IN ] Timer id */ | ||
|  | 			  int (*fpPrint) (const char *, ...)	/*  [ IN ] Print callback function */ | ||
|  | ); | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   Use a timer to perform a busy wait delay for a number of usecs. | ||
|  | * | ||
|  | *  @return   N/A | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | void tmrHw_udelay(tmrHw_ID_t timerId,	/*  [ IN ] Timer id */ | ||
|  | 		  unsigned long usecs	/*  [ IN ] usec to delay */ | ||
|  | ) __attribute__ ((section(".aramtext"))); | ||
|  | 
 | ||
|  | #endif /* _TMRHW_H */
 |