From 7d7389cac55952fcb794d2632747a8adc1e119ee Mon Sep 17 00:00:00 2001 From: Dien-Nhung Nguyen-Phu Date: Wed, 15 May 2024 12:43:35 +0700 Subject: init blink project generated project from EVT --- .../StdPeriphDriver/inc/CH58x_adc.h | 265 +++++++++++++++++++++ 1 file changed, 265 insertions(+) create mode 100644 CH5xx_ble_firmware_library/StdPeriphDriver/inc/CH58x_adc.h (limited to 'CH5xx_ble_firmware_library/StdPeriphDriver/inc/CH58x_adc.h') diff --git a/CH5xx_ble_firmware_library/StdPeriphDriver/inc/CH58x_adc.h b/CH5xx_ble_firmware_library/StdPeriphDriver/inc/CH58x_adc.h new file mode 100644 index 0000000..0654a5e --- /dev/null +++ b/CH5xx_ble_firmware_library/StdPeriphDriver/inc/CH58x_adc.h @@ -0,0 +1,265 @@ +/********************************** (C) COPYRIGHT ******************************* + * File Name : CH57x_adc.h + * Author : WCH + * Version : V1.2 + * Date : 2021/11/17 + * Description + ********************************************************************************* + * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. + * Attention: This software (modified or not) and binary are used for + * microcontroller manufactured by Nanjing Qinheng Microelectronics. + *******************************************************************************/ + +#ifndef __CH58x_ADC_H__ +#define __CH58x_ADC_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +#define ROM_CFG_TMP_25C 0x7F014 + +/** + * @brief adc single channel define + */ +typedef enum +{ + CH_EXTIN_0 = 0, // ADC 外部模拟通道 0 + CH_EXTIN_1, // ADC 外部模拟通道 1 + CH_EXTIN_2, // ADC 外部模拟通道 2 + CH_EXTIN_3, // ADC 外部模拟通道 3 + CH_EXTIN_4, // ADC 外部模拟通道 4 + CH_EXTIN_5, // ADC 外部模拟通道 5 + CH_EXTIN_6, // ADC 外部模拟通道 6 + CH_EXTIN_7, // ADC 外部模拟通道 7 + CH_EXTIN_8, // ADC 外部模拟通道 8 + CH_EXTIN_9, // ADC 外部模拟通道 9 + CH_EXTIN_10, // ADC 外部模拟通道 10 + CH_EXTIN_11, // ADC 外部模拟通道 11 + CH_EXTIN_12, // ADC 外部模拟通道 12 + CH_EXTIN_13, // ADC 外部模拟通道 13 + + CH_INTE_VBAT = 14, // ADC 内部电池检测通道 + CH_INTE_VTEMP = 15, // ADC 内部温度传感器检测通道 + +} ADC_SingleChannelTypeDef; + +/** + * @brief adc differential channel define + */ +typedef enum +{ + CH_DIFF_0_2 = 0, // ADC 差分通道 #0-#2 + CH_DIFF_1_3, // ADC 差分通道 #1-#3 + +} ADC_DiffChannelTypeDef; + +/** + * @brief adc sampling clock + */ +typedef enum +{ + SampleFreq_3_2 = 0, // 3.2M 采样频率 + SampleFreq_8, // 8M 采样频率 + SampleFreq_5_33, // 5.33M 采样频率 + SampleFreq_4, // 4M 采样频率 +} ADC_SampClkTypeDef; + +/** + * @brief adc signal PGA + */ +typedef enum +{ + ADC_PGA_1_4 = 0, // -12dB, 1/4倍 + ADC_PGA_1_2, // -6dB, 1/2倍 + ADC_PGA_0, // 0dB, 1倍,无增益 + ADC_PGA_2, // 6dB, 2倍 +} ADC_SignalPGATypeDef; + +/** + * @brief Configuration DMA mode + */ +typedef enum +{ + ADC_Mode_Single = 0, // 单次模式 + ADC_Mode_LOOP, // 循环模式 +} ADC_DMAModeTypeDef; + + +/** + * @brief 设置 ADC 采样通道 + * + * @param d - refer to ADC_SingleChannelTypeDef + */ +#define ADC_ChannelCfg(d) (R8_ADC_CHANNEL = d) + +/** + * @brief 设置 ADC 采样时钟 + * + * @param d - refer to ADC_SampClkTypeDef + */ +#define ADC_SampClkCfg(d) (R8_ADC_CFG = R8_ADC_CFG & (~RB_ADC_CLK_DIV) | (d << 6)) + +/** + * @brief 设置 ADC 信号增益 + * + * @param d - refer to ADC_SignalPGATypeDef + */ +#define ADC_PGACfg(d) (R8_ADC_CFG = R8_ADC_CFG & (~RB_ADC_PGA_GAIN) | (d << 4)) + +/** + * @brief 设置内部温度传感器校准值 + * + * @param d - 校准值 + */ +#define ADC_TempCalibCfg(d) (R8_TEM_SENSOR = R8_TEM_SENSOR & (~RB_TEM_SEN_CALIB) | d) + +/** + * @brief 外部信号单通道采样初始化 + * + * @param sp - refer to ADC_SampClkTypeDef + * @param ga - refer to ADC_SignalPGATypeDef + */ +void ADC_ExtSingleChSampInit(ADC_SampClkTypeDef sp, ADC_SignalPGATypeDef ga); + +/** + * @brief 外部信号差分通道采样初始化 + * + * @param sp - refer to ADC_SampClkTypeDef + * @param ga - refer to ADC_SignalPGATypeDef + */ +void ADC_ExtDiffChSampInit(ADC_SampClkTypeDef sp, ADC_SignalPGATypeDef ga); + +/** + * @brief 触摸按键通道采样初始化 + */ +void TouchKey_ChSampInit(void); + +/** + * @brief 关闭TouchKey电源 + */ +#define TouchKey_DisableTSPower() (R8_TKEY_CFG &= ~RB_TKEY_PWR_ON) + +/** + * @brief 内置温度传感器采样初始化 + */ +void ADC_InterTSSampInit(void); + +/** + * @brief 关闭温度传感器电源 + */ +#define ADC_DisableTSPower() (R8_TEM_SENSOR = 0) + +/** + * @brief 内置电池电压采样初始化 + */ +void ADC_InterBATSampInit(void); + +/** + * @brief ADC执行单次转换 + * + * @return ADC转换后的数据 + */ +uint16_t ADC_ExcutSingleConver(void); + +/** + * @brief 采样数据粗调,获取偏差值,必须先配置ADC后调用此函数获取校准值 + * + * @return 偏差 + */ +signed short ADC_DataCalib_Rough(void); + +/** + * @brief TouchKey转换后数据 + * + * @param charg - Touchkey充电时间,5bits有效, t=charg*Tadc + * @param disch - Touchkey放电时间,3bits有效, t=disch*Tadc + * + * @return 当前TouchKey等效数据 + */ +uint16_t TouchKey_ExcutSingleConver(uint8_t charg, uint8_t disch); + +/** + * @brief 设置连续 ADC的周期 + * + * @param cycle - 单位为 16个系统时钟 + */ +void ADC_AutoConverCycle(uint8_t cycle); + +/** + * @brief 配置DMA功能 + * + * @param s - 是否打开DMA功能 + * @param startAddr - DMA 起始地址 + * @param endAddr - DMA 结束地址 + * @param m - 配置DMA模式 + */ +void ADC_DMACfg(uint8_t s, uint16_t startAddr, uint16_t endAddr, ADC_DMAModeTypeDef m); + +/** + * @brief Convert ADC value to temperature(Celsius) + * + * @param adc_val - adc value + * + * @return temperature (Celsius) + */ +int adc_to_temperature_celsius(uint16_t adc_val); + +/** + * @brief 获取ADC转换值 + * + * @return ADC转换值 + */ +#define ADC_ReadConverValue() (R16_ADC_DATA) + +/** + * @brief ADC执行单次转换 + */ +#define ADC_StartUp() (R8_ADC_CONVERT = RB_ADC_START) + +/** + * @brief 获取ADC中断状态 + */ +#define ADC_GetITStatus() (R8_ADC_INT_FLAG & RB_ADC_IF_EOC) + +/** + * @brief 清除ADC中断标志 + */ +#define ADC_ClearITFlag() (R8_ADC_CONVERT = 0) + +/** + * @brief 获取ADC DMA完成状态 + */ +#define ADC_GetDMAStatus() (R8_ADC_DMA_IF & RB_ADC_IF_DMA_END) + +/** + * @brief 清除ADC DMA完成标志 + */ +#define ADC_ClearDMAFlag() (R8_ADC_DMA_IF |= RB_ADC_IF_DMA_END) + +/** + * @brief 开启自动连续 ADC + */ +#define ADC_StartDMA() (R8_ADC_CTRL_DMA |= RB_ADC_AUTO_EN) + +/** + * @brief 停止自动连续 ADC + */ +#define ADC_StopDMA() (R8_ADC_CTRL_DMA &= ~RB_ADC_AUTO_EN) + +/** + * @brief 获取TouchKey中断状态 + */ +#define TouchKey_GetITStatus() (R8_ADC_INT_FLAG & RB_ADC_IF_EOC) + +/** + * @brief 清除TouchKey中断标志 + */ +#define TouchKey_ClearITFlag() (R8_TKEY_CTRL |= RB_TKEY_PWR_ON) + + +#ifdef __cplusplus +} +#endif + +#endif // __CH58x_ADC_H__ -- cgit v1.2.3