101 lines
3.3 KiB
C
101 lines
3.3 KiB
C
#ifndef __GPTIMER_HW_H__
|
|
#define __GPTIMER_HW_H__
|
|
|
|
//BR35
|
|
#include "cpu.h"
|
|
#include "gpio.h"
|
|
#include "gptimer_hw_v5.h"
|
|
|
|
typedef JL_TIMER_TypeDef GPTIMER;
|
|
#define GPTIMER0 JL_TIMER0
|
|
#define GPTIMER1 JL_TIMER1
|
|
#define GPTIMER2 JL_TIMER2
|
|
#define GPTIMER3 JL_TIMER3
|
|
#define TIMER_MAX_NUM 4
|
|
#define TIMER_BASE_ADDR GPTIMER0
|
|
#define TIMER_OFFSET (GPTIMER1 - GPTIMER0)
|
|
|
|
#define TIMER_CNT_SIZE 0xFFFF
|
|
#define TIMER_PRD_SIZE 0xFFFF
|
|
#define TIMER_PWM_SIZE 0xFFFF
|
|
|
|
#define IRQ_TIMEx_IDX_LIST IRQ_TIME0_IDX, \
|
|
IRQ_TIME1_IDX, \
|
|
IRQ_TIME2_IDX, \
|
|
IRQ_TIME3_IDX, \
|
|
|
|
#define IRFLT_SRC_TABLE_LIST \
|
|
0, /* lsb_clk */ \
|
|
0, /* lsb_clk */ \
|
|
12, /* std_12m */ \
|
|
24, /* std_24m */ \
|
|
|
|
typedef enum gptimerx : u8 {
|
|
TIMER0 = 0,
|
|
TIMER1,
|
|
TIMER2,
|
|
TIMER3,
|
|
TIMERx, //传入此参数时,内部自动分配一个空闲TIMER
|
|
} timer_dev;
|
|
|
|
|
|
//以下宏定义给系统 timer 驱动使用
|
|
#define GPTIMER_PND_CLR (0b1<<14)
|
|
|
|
#define GPTIMER_CLK_SRC_LSB (0b0001<<10)
|
|
#define GPTIMER_CLK_SRC_RC250K (0b0010<<10)
|
|
#define GPTIMER_CLK_SRC_RC16M (0b0011<<10)
|
|
#define GPTIMER_CLK_SRC_LRC (0b0100<<10)
|
|
#define GPTIMER_CLK_SRC_STD12M (0b0101<<10)
|
|
#define GPTIMER_CLK_SRC_STD24M (0b0110<<10)
|
|
#define GPTIMER_CLK_SRC_STD48M (0b0111<<10)
|
|
#define GPTIMER_CLK_SRC_CLKOUT2 (0b1000<<10)
|
|
#define GPTIMER_CLK_SRC_PATCLK (0b1001<<10)
|
|
#define GPTIMER_CLK_SRC_HSB (0b1010<<10)
|
|
#define GPTIMER_CLK_SRC_WATCLK (0b1011<<10)
|
|
|
|
#define GPTIMER_CLK_DIV_1 (0b0000<<4)
|
|
#define GPTIMER_CLK_DIV_4 (0b0001<<4)
|
|
#define GPTIMER_CLK_DIV_16 (0b0010<<4)
|
|
#define GPTIMER_CLK_DIV_64 (0b0011<<4)
|
|
#define GPTIMER_CLK_DIV_2 (0b0100<<4)
|
|
#define GPTIMER_CLK_DIV_8 (0b0101<<4)
|
|
#define GPTIMER_CLK_DIV_32 (0b0110<<4)
|
|
#define GPTIMER_CLK_DIV_128 (0b0111<<4)
|
|
#define GPTIMER_CLK_DIV_256 (0b1000<<4)
|
|
#define GPTIMER_CLK_DIV_1024 (0b1001<<4)
|
|
#define GPTIMER_CLK_DIV_4096 (0b1010<<4)
|
|
#define GPTIMER_CLK_DIV_16384 (0b1011<<4)
|
|
#define GPTIMER_CLK_DIV_512 (0b1100<<4)
|
|
#define GPTIMER_CLK_DIV_2048 (0b1101<<4)
|
|
#define GPTIMER_CLK_DIV_8192 (0b1110<<4)
|
|
#define GPTIMER_CLK_DIV_32768 (0b1111<<4)
|
|
|
|
#define GPTIMER_TIMER_MODE (0b1<<0)
|
|
|
|
//延时
|
|
#define GPTIMER_DLY GPTIMER2
|
|
#define GPTIMER_DLY_IRQ_INDEX IRQ_TIME2_IDX
|
|
|
|
//sys_hi_timer
|
|
#define GPTIMER_SYS GPTIMER3
|
|
#define GPTIMER_SYS_IRQ_INDEX IRQ_TIME3_IDX
|
|
#define GPTIMER_SYS_START() GPTIMER_SYS->CON |= GPTIMER_TIMER_MODE
|
|
#define GPTIMER_SYS_PAUSE() GPTIMER_SYS->CON &= ~GPTIMER_TIMER_MODE
|
|
#define GPTIMER_SYS_EN_CHECK() GPTIMER_SYS->CON & GPTIMER_TIMER_MODE
|
|
#define GPTIMER_SYS_CLR_PND() GPTIMER_SYS->CON |= GPTIMER_PND_CLR
|
|
|
|
#define GPTIMER_SYS_INIT() do{GPTIMER_SYS->CON = GPTIMER_PND_CLR|GPTIMER_CLK_SRC_STD12M|GPTIMER_CLK_DIV_4; \
|
|
GPTIMER_SYS->PRD = 0; \
|
|
GPTIMER_SYS->CNT = 0;}while(0) \
|
|
|
|
#define GPTIMER_SYS_GET_CNT GPTIMER_SYS->CNT
|
|
#define GPTIMER_SYS_SET_CNT(x) GPTIMER_SYS->CNT = (x)
|
|
#define GPTIMER_SYS_GET_PRD GPTIMER_SYS->PRD
|
|
#define GPTIMER_SYS_SET_PRD(x) GPTIMER_SYS->PRD = (x)-1
|
|
#define GPTIMER_SYS_CLK_SRC 12 //MHz单位
|
|
#define GPTIMER_SYS_CLK_DIV 2 // 右移两位 等效于 除以4
|
|
|
|
#endif
|
|
|