BLE5.2 1.0
开发文档说明
xc_drv_timer.h
浏览该文件的文档.
1
25#ifndef _XC_DRV_TIMER_H_
26#define _XC_DRV_TIMER_H_
27
28/*-----------------------------------------------------------------------------------
29 INCLUDE HEADE FILES
30 ------------------------------------------------------------------------------------*/
31#include <stdbool.h>
32#include <stdio.h>
33
34#include "xc6xxx.h"
35/*------------------------------------------------------------------------------------
36 Macros
37 -------------------------------------------------------------------------------------*/
38
39#define TIMER_MIN_TLC_VAL 0x04
40#define TIMER_CLKSRC_32K_CAL(us) ( (CLOCK_RC_LFCLK_IN_32K / 1000)*us / 1000)
41#define TIMER_CLKSRC_32K_DIV_CAL(us, div) (32000 /(2 * (div + 1)) /100 * us / 10000)
42#define TIMER_CLKSRC_32M_DIV_CAL(us, div) (32000000 / (2 * (div + 1)) /100000 * us / 10)
43
44
45
46#define TIMER_TCR_TIM_DISABLE (0x00UL)
47#define TIMER_TCR_TIM_ENABLE (0x01UL)
48
49#define TIMER_TCR_TES_ENABLE (0x01UL)
50#define TIMER_TCR_TES_DISABLE (0x00UL)
51/*------------------------------------------------------------------------------------
52 TypeDef
53 -------------------------------------------------------------------------------------*/
54typedef enum
55{
56 TIMER_CLK_SRC_32M_DIV = 0, /* Timer CLK SRC 32MHz div. */
57 TIMER_CLK_SRC_32K_DIV = 1, /* Timer CLK SRC 32kHz div. */
58 TIMER_CLK_SRC_32K = 3, /* Timer CLK SRC 32kHz. */
60
61typedef enum
62{
63 TIMER_DIV_CLK_16MHzOr16K = 0, /* Timer ref clk 16 MHz or 16KHz */
64 TIMER_DIV_CLK_8MHzOr8K = 1, /* Timer ref clk 8 MHz or 8KHz */
65 TIMER_DIV_CLK_4MHzOr4K = 2, /* Timer ref clk 4 MHz or 4KHz.*/
66 TIMER_DIV_CLK_2MHzOr2K = 3, /* Timer ref clk 2 MHz or 2KHz.*/
67 TIMER_DIV_CLK_1MHzOr1K = 4, /* Timer ref clk 1 MHz or 1KHz.*/
68 TIMER_DIV_CLK_500KHzOr500 = 5, /* Timer ref clk 500 kHz or 500Hz.*/
69 TIMER_DIV_CLK_250KHzOr250 = 6, /* Timer ref clk 250 kHz or 250Hz.*/
70 TIMER_DIV_CLK_125KHzOr125 = 7, /* Timer ref clk 125 kHz or 125Hz.*/
71 TIMER_DIV_CLK_62500HzOr62_5 = 8, /* Timer ref clk 62500 Hz or 62.5Hz.*/
72 TIMER_DIV_CLK_32000Hz = 9 /* Timer ref clk 32000 Hz.*/
74
75typedef enum
76{
80
81typedef struct
82{
83 TIMER_SrcClkTypeDef timer_src_clk; /* Timer src clk. */
84 Timer_DivClkTypeDef timer_div_clk; /* Timer div clk. */
85 Timer_ModeTypeDef timer_mode; /* Timer mode. */
86 uint32_t ticks; /* Timer ticks. */
88
89/*------------------------------------------------------------------------------------
90 Global Variables
91 -------------------------------------------------------------------------------------*/
92typedef void (*timer_handler_callback)(void *context);
93
94/*------------------------------------------------------------------------------------
95 Exported Functions
96 -------------------------------------------------------------------------------------*/
97void xc_timer_init(uint8_t reg_idx, Timer_InitCfg_t *init_cfg);
98void xc_timer_set_value(uint8_t reg_idx, uint32_t us);
99void xc_timer_start(uint8_t reg_idx);
100void xc_timer_stop(uint8_t reg_idx);
101
102void timer0_callback(void *context);
103void timer1_callback(void *context);
104void timer2_callback(void *context);
105void timer3_callback(void *context);
106
107#endif // _XC_DRV_AOTIMER_H_
Timer_ModeTypeDef timer_mode
TIMER_SrcClkTypeDef timer_src_clk
Timer_DivClkTypeDef timer_div_clk
void xc_timer_init(uint8_t reg_idx, Timer_InitCfg_t *init_cfg)
void xc_timer_start(uint8_t reg_idx)
void timer3_callback(void *context)
void xc_timer_set_value(uint8_t reg_idx, uint32_t us)
void(* timer_handler_callback)(void *context)
void xc_timer_stop(uint8_t reg_idx)
void timer0_callback(void *context)
Timer_DivClkTypeDef
@ TIMER_DIV_CLK_16MHzOr16K
@ TIMER_DIV_CLK_125KHzOr125
@ TIMER_DIV_CLK_8MHzOr8K
@ TIMER_DIV_CLK_500KHzOr500
@ TIMER_DIV_CLK_250KHzOr250
@ TIMER_DIV_CLK_1MHzOr1K
@ TIMER_DIV_CLK_62500HzOr62_5
@ TIMER_DIV_CLK_32000Hz
@ TIMER_DIV_CLK_2MHzOr2K
@ TIMER_DIV_CLK_4MHzOr4K
void timer2_callback(void *context)
TIMER_SrcClkTypeDef
@ TIMER_CLK_SRC_32K
@ TIMER_CLK_SRC_32M_DIV
@ TIMER_CLK_SRC_32K_DIV
Timer_ModeTypeDef
@ TIMER_MODE_CYCLE
@ TIMER_MODE_SINGLE
void timer1_callback(void *context)