doubao_chat/include_lib/driver/device/gpcnt.h

86 lines
2.2 KiB
C

#ifndef ADAPTER_GPCNT_H
#define ADAPTER_GPCNT_H
/*
* 该模块使用说明
* 选择一个时钟源进行计算另一个时钟源输入的脉冲数量
* 使用方法如gpnt_test();
*/
#include "generic/typedef.h"
struct gpcnt_platform_data {
u8 gpcnt_gpio;
u8 gss_clk_source;//采样时钟源480M
u8 css_clk_source;//
u8 ch_source;
u8 cycle;
};
enum {
GPCNT_GSS_CSS_LSB_CLK = 0,
GPCNT_GSS_CSS_OSC_CLK,
GPCNT_GSS_CSS_INPUT_CHANNEL2,//测试异常
GPCNT_GSS_CSS_INPUT_CHANNEL4,
GPCNT_GSS_CSS_CLK,//时钟系统输入
GPCNT_GSS_CSS_RING_OSC,
GPCNT_GSS_CSS_PLL480M,
GPCNT_GSS_CSS_INPUT_CHANNEL1,
};
typedef enum { //采样时钟源
GPCNT_LCB_CLK,//
GPCNT_OSC_CLK,//外部晶振时钟
GPCNT_SRC_CLK,//
GPCNT_HCO_CLK,//
GPCNT_HSB_CLK,//
GPCNT_AUD_CLK,//音频时钟
GPCNT_WL_CLK,//wifi时钟
GPCNT_USB_CLK,//USB时钟
GPCNT_PLL_CLK,//锁相环时钟
} CLK_GPCNT;
typedef enum { //gpio输出通道
GPCNT_INPUT_CHANNEL1 = 1,
GPCNT_INPUT_CHANNEL2,
GPCNT_INPUT_CHANNEL4,
} CHANNEL_GPCNT;
typedef enum { //采样时钟的多少周期 周期 = 32*2^CYCLE_GPCNT
CYCLE_1 = 1,
CYCLE_2,
CYCLE_3,
CYCLE_4,
CYCLE_5,
CYCLE_6,
CYCLE_7,
CYCLE_8,
CYCLE_9,
CYCLE_10,
CYCLE_11,
CYCLE_12,
CYCLE_13,
CYCLE_14,
CYCLE_15,
} CYCLE_GPCNT;
typedef enum {
IOCTL_GET_GPCNT,
IOCTL_SET_CYCLE,
IOCTL_SET_GPIO,
IOCTL_SET_GSS_CLK_SOURCE,//采样时钟
IOCTL_SET_CSS_CLK_SOURCE,//需要计算的时钟
IOCTL_SET_CH_SOURCE,
} IOCTL_GPCNT;
extern const struct device_operations gpcnt_dev_ops;
extern const struct gpcnt_platform_data gpcnt_data;
#define GPCNT_GSS(x) SFR(JL_GPCNT->CON, 12, 3, x)//选择主输入时钟源
#define GPCNT_CLR_PEND(x) SFR(JL_GPCNT->CON, 6, 1, x)//清楚中断标志
#define GPCNT_GTS(x) SFR(JL_GPCNT->CON, 8, 4, x)//主时钟周期选择
#define GPCNT_PND(x) SFR(JL_GPCNT->CON, 7, 1, x)//中断请求标志
#define GPCNT_CSS(x) SFR(JL_GPCNT->CON, 1, 3, x)//输入源时钟选择即想要量的时钟源
#define GPCNT_EN(x) SFR(JL_GPCNT->CON, 0, 1, x)//模块使能 0关 1开 u8 cycle;
#endif