Files
AC707N/SDK/interface/driver/cpu/br35/asm/gptimer_hw.h
T
2025-12-03 11:12:34 +08:00

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