rt-thread-official/bsp/gkipc/libraries/drv/710X/gd/inc/gd_timer.h

166 lines
5.8 KiB
C
Raw Normal View History

2018-03-04 08:21:19 +08:00
/*!
*******************************************************************************
**
** \file gd_timer.h
**
** \brief TIMER driver.
**
** The driver provides functions for timer management.
** It enables an application to make use of 8 soft timers, 1 hard
** timer and 1 timestamp timer as a system clock.
**
** Copyright: 2012 - 2013 (C) GoKe Microelectronics ShangHai Branch
**
** \attention THIS SAMPLE CODE IS PROVIDED AS IS. GOKE MICROELECTRONICS
** ACCEPTS NO RESPONSIBILITY OR LIABILITY FOR ANY ERRORS OR
** OMMISSIONS.
**
** \version
**
******************************************************************************/
#ifndef _GD_TIMER_H_
#define _GD_TIMER_H_
#include <gtypes.h>
#include <gmodids.h>
/*---------------------------------------------------------------------------*/
/* constants and macros */
/*---------------------------------------------------------------------------*/
#define GD_TIMER_ERR_BASE (GD_TIMER_MODULE_ID<<16) //!< The timer base error code.
/* Note: Pre-scaler define hardcoded to avoid calculation in ISR! */
#define GD_TIMER_RESOLUTION_1_USEC 1UL //!< timer resolution 1 usec
#define GD_TIMER_RESOLUTION_10_USEC 10UL //!< timer resolution 10 usec
#define GD_TIMER_RESOLUTION_100_USEC 100UL //!< timer resolution 100 usec
#define GD_TIMER_RESOLUTION_1_MSEC 1000UL //!< timer resolution 1 msec
#define GD_TIMER_RESOLUTION_10_MSEC 10000UL //!< timer resolution 10 msec
#define GD_TIMER_RESOLUTION_100_MSEC 100000UL //!< timer resolution 100 msec
#define GD_TIMER_RESOLUTION_1_SEC 1000000UL //!< timer resolution 1 sec
#define GD_TIMER_RESOLUTION_1_MIN 60000000UL //!< timer resolution 1 minute
#define GD_TIMER_RESOLUTION_1_HOUR 3600000000UL //!< timer resolution 1 hour
#define GD_TIMER_RESOLUTION_1_HOUR 3600000000UL //!< timer resolution 1 hour
/*---------------------------------------------------------------------------*/
/* types, enums and structures */
/*---------------------------------------------------------------------------*/
/*!
*******************************************************************************
**
** \brief TIMER driver error codes.
**
******************************************************************************/
typedef enum
{
/*! Indicates all soft timer are in use. */
GD_ERR_TIMER_NO_FREE_SOFT_TIME = GD_TIMER_ERR_BASE,
/*! Indicates all hard timer are in use */
GD_ERR_TIMER_NO_FREE_HARD_TIME,
/*! Indicates all time stamps are in use. */
GD_ERR_TIMER_NO_FREE_GPREG_TIME,
/*! */
GD_ERR_TIMER_OUTOF_RANG,
}GD_TIMER_ERR_E;
/*!
*******************************************************************************
**
** \brief Allowed ARC timer settings.
**
******************************************************************************/
typedef enum
{
/*! Reference to TIMER1 */
GD_REG_TIMER1 = 0,
/*! Reference to TIMER2 */
GD_REG_TIMER2 = 1,
/*! Reference to TIMER3 */
GD_REG_TIMER3 = 2,
}GD_TIMER_REG_E;
typedef enum
{
/*! Reference to */
GD_REG_SOFT_TIMER_IRQ = 0,
/*! Reference to */
GD_REG_HARD_TIMER_IRQ = 1,
/*! Reference to */
GD_REG_GPREG_TIMER_IRQ = 2,
}GD_TIMER_IRQ_E;
/*!
*******************************************************************************
**
** \brief TIMER driver's initialization parameter.
**
******************************************************************************/
typedef struct
{
/*! The ARC core timer register to be used for soft timer. */
S8 softTimerReg;
/*! The priority of the soft timer interrupt. */
S8 softTimerpriority;
/*! The ARC core timer register to be used for hard timer. */
S8 hardTimerReg;
/*! The priority of the hard timer interrupt. */
S8 hardTimerpriority;
/*! The ARC timestamp timer register to be used for gpreg IRQ. */
S8 gpregTimerReg;
/*! The priority of the gpreg timer interrupt. */
S8 gpregTimerpriority;
}GD_TIMER_INIT_PARAMS_S;
/*---------------------------------------------------------------------------*/
/* function prototypes */
/*---------------------------------------------------------------------------*/
#ifdef __cplusplus
extern "C" {
#endif
U8 *GD_TIMER_GetRevisionString(void);
GERR GD_TIMER_Init(GD_TIMER_INIT_PARAMS_S* initParams);
GERR GD_TIMER_Exit(void);
GERR GD_TIMER_TimerOpen(GD_HANDLE* pHandle,GD_TIMER_IRQ_E timerIRQ);
GERR GD_TIMER_TimerSet(GD_HANDLE* pHandle, U32 timeValue, GBOOL* flag, void(*fp)());
GERR GD_TIMER_TimerClose(GD_HANDLE* handle);
GERR GD_TIMER_HardTimerOpen(GD_HANDLE* pHandle);
GERR GD_TIMER_HardTimerSet(GD_HANDLE* pHandle, U32 timeValue, GBOOL* flag,void(*fp)());
GERR GD_TIMER_HardTimerClose(GD_HANDLE* pHandle);
GERR GD_TIMER_GpregTimerOpen(GD_HANDLE* pHandle);
GERR GD_TIMER_GpregTimerClose(GD_HANDLE* pHandle);
GERR GD_TIMER_GpregTimerSet(GD_HANDLE* pHandle, U32 timeValue, GBOOL* flag, void(*fp)());
U64 GD_TIMER_ReadTimerStamp(void);
GERR GD_TIMER_SoftTimerOpen(GD_HANDLE* pHandle);
GERR GD_TIMER_SoftTimerClose(GD_HANDLE* pHandle);
GERR GD_TIMER_SoftTimerSet(GD_HANDLE* pHandle, U32 timeValue, GBOOL* flag, void(*fp)());
GERR GD_TIMER_StopSoftTimer(GD_HANDLE* pHandle);
GERR GD_TIMER_ContinueSoftTimer(GD_HANDLE* pHandle);
GERR GD_TIMER_Delay(U32 msecs);
U32 GD_GET_ARM_ClkHz(void);
U32 GD_GET_AHB_ClkHz(void);
U32 GD_GET_APB_ClkHz(void);
U32 GD_GET_UART_ClkHz(void);
U32 GD_GET_IDSP_ClkHz(void);
U32 GD_GET_CORE_ClkHz(void);
U32 GD_GET_DRAM_ClkHz(void);
U32 GD_GET_I2S_ClkHz(void);
U32 GD_GET_SD_ClkHz(void);
#ifdef __cplusplus
}
#endif
#endif /* _GD_TIMER_H_ */
/* end of gd_timer.h */