| /***************************************************************************** |
| * 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 <linux/types.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 millisecond |
| * |
| * @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 millisecond |
| * |
| * @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 */ |