CH57x_adc.h 4.6 KB

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