nt9856x/code/lib/include/timer.h
2023-03-28 15:07:53 +08:00

126 lines
4.2 KiB
C
Executable File

/**
Public header file for timer module.
This file is the header file that define the API and data type for timer
module.
@file timer.h
@ingroup miDrvTimer_Timer
@note Nothing.
Copyright Novatek Microelectronics Corp. 2011. All rights reserved.
*/
#ifndef _TIMER_H
#define _TIMER_H
#include <kwrap/type.h>
/**
@addtogroup miDrvTimer_Timer
*/
//@{
/**
Timer ID.
Timer ID.
*/
typedef enum
{
TIMER_0, ///< Timer ID for Timer 0
TIMER_1, ///< Timer ID for Timer 1
TIMER_2, ///< Timer ID for Timer 2
TIMER_3, ///< Timer ID for Timer 3
TIMER_4, ///< Timer ID for Timer 4
TIMER_5, ///< Timer ID for Timer 5
TIMER_6, ///< Timer ID for Timer 6
TIMER_7, ///< Timer ID for Timer 7
TIMER_8, ///< Timer ID for Timer 8
TIMER_9, ///< Timer ID for Timer 9
TIMER_10, ///< Timer ID for Timer 10
TIMER_11, ///< Timer ID for Timer 11
TIMER_12, ///< Timer ID for Timer 12
TIMER_13, ///< Timer ID for Timer 13
TIMER_14, ///< Timer ID for Timer 14
TIMER_15, ///< Timer ID for Timer 15
TIMER_16, ///< Timer ID for Timer 16
TIMER_17, ///< Timer ID for Timer 17
TIMER_18, ///< Timer ID for Timer 18
TIMER_19, ///< Timer ID for Timer 19
TIMER_NUM, ///< Timer number
ENUM_DUMMY4WORD(TIMER_ID)
} TIMER_ID, *PTIMER_ID;
#define TIMER_INVALID 0xFFFFFFFF ///< Invalid Timer ID
#define TIMER_SYSTIMER_ID 0
/**
Timer mode.
Timer mode.
*/
typedef enum
{
TIMER_MODE_CLKSRC_DIV0 = 0x00000000, ///< Timer clock source is from divider 0, the clock is fixed at 1 MHz.
TIMER_MODE_CLKSRC_DIV1 = 0x00000001, ///< Timer clock source is from divider 1, the clock can be configured.
TIMER_MODE_ONE_SHOT = 0x00000010, ///< Timer operation mode is "one shot"
TIMER_MODE_FREE_RUN = 0x00000020, ///< Timer operation mode is "free run"
TIMER_MODE_ENABLE_INT = 0x00000040, ///< Enable timeout interrupt
ENUM_DUMMY4WORD(TIMER_MODE)
} TIMER_MODE, *PTIMER_MODE;
/**
Timer state.
Timer state.
*/
typedef enum
{
TIMER_STATE_PAUSE, ///< Stop timer
TIMER_STATE_PLAY, ///< Start timer
ENUM_DUMMY4WORD(TIMER_STATE)
} TIMER_STATE, *PTIMER_STATE;
/**
Timer Configuration ID
Timer Configuration ID for timer_setConfig() and timer_getConfig()
*/
typedef enum
{
TIMER_CONFIG_ID_DIV1_CLK = 1, ///< Divider1 clock. Default is 1 MHz (1 clock is 1us)
///< @note Valid value: 11,718 ~ 3,000,000 , unit: Hz.
///< Real clock might lower than your setting.
///< Please call timer_getConfig(TIMER_CONFIG_ID_DIV1_CLK) to confirm.
///< Formula: Clock = 3 MHz / (Divider + 1)
ENUM_DUMMY4WORD(TIMER_CONFIG_ID)
} TIMER_CONFIG_ID;
typedef void (*TIMER_CB)(UINT32 event);
extern ER timer_init(void);
extern ER timer_open(PTIMER_ID p_id, TIMER_CB callback);
extern ER timer_close(TIMER_ID id);
extern ER timer_open_auto_close(PTIMER_ID p_id, TIMER_CB callback);
extern ER timer_cfg(TIMER_ID id, UINT32 interval, TIMER_MODE mode, TIMER_STATE state);
extern ER timer_pause_play(TIMER_ID id, TIMER_STATE state);
extern ER timer_wait_timeup(TIMER_ID id);
extern ER timer_check_timeup(TIMER_ID id, BOOL *p_check);
extern ER timer_reload(TIMER_ID id, UINT32 interval);
// Timer Utility API
extern void timer_set_config(TIMER_CONFIG_ID id, UINT32 config);
extern UINT32 timer_get_config(TIMER_CONFIG_ID id);
extern TIMER_ID timer_get_sys_timer_id(void);
extern UINT32 timer_get_current_count(TIMER_ID id);
extern UINT32 timer_get_target_count(TIMER_ID id);
//@}
#endif