1 2 3 4 #ifndef __CH57x_ADC_H__ 5 #define __CH57x_ADC_H__ 6 7 #ifdef __cplusplus 8 extern "C" { 9 #endif 10 11 #include "CH579SFR.h" 12 #include "core_cm0.h" 13 14 15 #define ROM_TMP_85C_ADDR 0x40634 16 #define ROM_TMP_25C_ADDR 0x40638 17 18 19 /** 20 * @brief adc single channel define 21 */ 22 typedef enum 23 { 24 CH_EXTIN_0 = 0, // ADC 外部模拟通道 0 25 CH_EXTIN_1, // ADC 外部模拟通道 1 26 CH_EXTIN_2, // ADC 外部模拟通道 2 27 CH_EXTIN_3, // ADC 外部模拟通道 3 28 CH_EXTIN_4, // ADC 外部模拟通道 4 29 CH_EXTIN_5, // ADC 外部模拟通道 5 30 CH_EXTIN_6, // ADC 外部模拟通道 6 31 CH_EXTIN_7, // ADC 外部模拟通道 7 32 CH_EXTIN_8, // ADC 外部模拟通道 8 33 CH_EXTIN_9, // ADC 外部模拟通道 9 34 CH_EXTIN_10, // ADC 外部模拟通道 10 35 CH_EXTIN_11, // ADC 外部模拟通道 11 36 CH_EXTIN_12, // ADC 外部模拟通道 12 37 CH_EXTIN_13, // ADC 外部模拟通道 13 38 39 CH_INTE_VBAT, // ADC 内部电池检测通道 40 CH_INTE_VTEMP, // ADC 内部温度传感器检测通道 41 42 }ADC_SingleChannelTypeDef; 43 44 /** 45 * @brief adc differential channel define 46 */ 47 typedef enum 48 { 49 CH_DIFF_0_2 = 0, // ADC 差分通道 #0-#2 50 CH_DIFF_1_3, // ADC 差分通道 #1-#3 51 52 }ADC_DiffChannelTypeDef; 53 54 /** 55 * @brief adc sampling clock 56 */ 57 typedef enum 58 { 59 SampleFreq_3_2 = 0, // 3.2M 采样频率 60 SampleFreq_2_67, // 2.67M 采样频率 61 SampleFreq_5_33, // 5.33M 采样频率 62 SampleFreq_4, // 4M 采样频率 63 }ADC_SampClkTypeDef; 64 65 66 /** 67 * @brief adc signal PGA 68 */ 69 typedef enum 70 { 71 ADC_PGA_1_4 = 0, // -12dB, 1/4倍 72 ADC_PGA_1_2, // -6dB, 1/2倍 73 ADC_PGA_0, // 0dB, 1倍,无增益 74 ADC_PGA_2, // 6dB, 2倍 75 }ADC_SignalPGATypeDef; 76 77 78 // refer to ADC_SingleChannelTypeDef 79 #define ADC_ChannelCfg( d ) (R8_ADC_CHANNEL = d) /* 设置 ADC 采样通道 */ 80 // refer to ADC_SampClkTypeDef 81 #define ADC_SampClkCfg( d ) (R8_ADC_CFG=R8_ADC_CFG&(~RB_ADC_CLK_DIV)|(d<<6)) /* 设置 ADC 采样时钟 */ 82 // refer to ADC_SignalPGATypeDef 83 #define ADC_PGACfg( d ) (R8_ADC_CFG=R8_ADC_CFG&(~RB_ADC_PGA_GAIN)|(d<<4)) /* 设置 ADC 信号增益 */ 84 #define ADC_TempCalibCfg( d ) (R8_TEM_SENSOR=R8_TEM_SENSOR&(~RB_TEM_SEN_CALIB)|d) /* 设置内部温度传感器校准值 */ 85 86 void ADC_ExtSingleChSampInit( ADC_SampClkTypeDef sp, ADC_SignalPGATypeDef ga ); /* 外部信号单通道采样初始化 */ 87 void ADC_ExtDiffChSampInit( ADC_SampClkTypeDef sp, ADC_SignalPGATypeDef ga ); /* 外部信号差分通道采样初始化 */ 88 void TouchKey_ChSampInit( void ); /* 触摸按键通道采样初始化 */ 89 void ADC_InterTSSampInit( void ); /* 内置温度传感器采样初始化 */ 90 void ADC_InterBATSampInit( void ); /* 内置电池电压采样初始化 */ 91 92 UINT16 ADC_ExcutSingleConver( void ); /* ADC执行单次转换 */ 93 signed short ADC_DataCalib_Rough( void ); 94 void ADC_DataCalib_Fine( PUINT16 dat, ADC_SignalPGATypeDef ga ); 95 UINT16 TouchKey_ExcutSingleConver( UINT8 d ); /* TouchKey转换后数据 */ 96 int ADC_GetCurrentTS( UINT16 ts_v ); /* 获取当前采样的温度值(℃) */ 97 98 #define ADC_ReadConverValue() (R16_ADC_DATA) /* 读取转换后的数值 */ 99 #define ADC_StartUp() (R8_ADC_CONVERT = RB_ADC_START) /* ADC启动转换 */ 100 #define ADC_GetITStatus() ( R8_ADC_INT_FLAG & RB_ADC_IF_EOC ) /* 获取ADC转换完成标志 */ 101 #define ADC_ClearITFlag() (R8_ADC_CONVERT = 0) /* 清除ADC转换完成标志 */ 102 103 #define TouchKey_GetITStatus() ( R8_ADC_INT_FLAG & RB_ADC_IF_EOC ) /* 获取TouchKey转换完成标志 */ 104 #define TouchKey_ClearITFlag() (R8_TKEY_CTRL |= RB_TKEY_PWR_ON) /* 清除TouchKey转换完成标志 */ 105 106 107 #ifdef __cplusplus 108 } 109 #endif 110 111 #endif // __CH57x_ADC_H__ 112 113