Drv_adc.h 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. /**
  2. * Copyright 2016, yichip Semiconductor(shenzhen office)
  3. * All Rights Reserved.
  4. *
  5. * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Yichip Semiconductor;
  6. * the contents of this file may not be disclosed to third parties, copied
  7. * or duplicated in any form, in whole or in part, without the prior
  8. * written permission of Yichip Semiconductor.
  9. */
  10. /**
  11. *@file adc.h
  12. *@brief adc support for application.
  13. */
  14. #ifndef _DRV_ADC_H_
  15. #define _DRV_ADC_H_
  16. #include <stdio.h>
  17. #include "ycdef.h"
  18. #include "yc_otp.h"
  19. #include <stdint.h>
  20. //adc参考电压
  21. #define GPIO_LOW_VOLTAGE_REF 500 //GPIO 的参考低电压为0.5V
  22. #define GPIO_HIGH_VOLTAGE_REF 1000 //GPIO 的参考高电压为 1 V
  23. #define HVIN_LOW_VOLTAGE_REF 3000 //hvin 的参考低电压为0.5V
  24. #define HVIN_HIGH_VOLTAGE_REF 5000 //hvin 的参考高电压为 1 V
  25. #define VINLPM_LOW_VOLTAGE_REF 3000 //vinlpm的参考低电压3 V
  26. #define VINLPM_HIGH_VOLTAGE_REF 3300 //vinlpm的参考高电压 3.3V
  27. //adc参考值
  28. //#define GPIO_LOW_REF_REG mem_0_5_adc_io_data
  29. //#define GPIO_HIGH_REF_REG mem_1v_adc_io_data
  30. //#define HVIN_LOW_REF_REG mem_3v_adc_hvin_data
  31. //#define HVIN_HIGH_REF_REG mem_5v_adc_hvin_data
  32. //#define VINLPM_LOW_REF_REG mem_3v_adc_vinlpm_data
  33. //#define VINLPM_HIGH_REF_REG mem_3v3_adc_vinlpm_data
  34. //#define OTP_ADC_FLAG_REG mem_otp_adc_flag
  35. //adc参考值存放位置
  36. #define OTP_ADC_IO_0_5V_ADDR 0x1fe2
  37. #define OTP_ADC_HVIN_3V_ADDR 0x1fe4
  38. #define OTP_ADC_VINLPM_2V_ADDR 0x1fe6
  39. #define OTP_ADC_IO_1V_ADDR 0x1fe8
  40. #define OTP_ADC_HVIN_5V_ADDR 0x1fea
  41. #define OTP_ADC_VINLPM_3V3_ADDR 0x1fec
  42. #define OTP_ADC_FLAG_ADDR 0x1fee
  43. #define OTP_ADC_FLAG 0xaa55
  44. #define WAIT_TIME 5000
  45. /**
  46. *@brief ADC gpio.
  47. */
  48. /**
  49. *@brief ADC channel.
  50. */
  51. typedef enum
  52. {
  53. ADC_CHANNEL_0 = 0,
  54. ADC_CHANNEL_1,
  55. ADC_CHANNEL_2,
  56. ADC_CHANNEL_3,
  57. ADC_CHANNEL_4,
  58. ADC_CHANNEL_5,
  59. ADC_CHANNEL_6,
  60. ADC_CHANNEL_7,
  61. }ADC_ChxTypeDef;
  62. #define IS_ADC_CHANNEL(CHANNEL_NUM) (((CHANNEL_NUM) == ADC_CHANNEL_0) || \
  63. ((CHANNEL_NUM) == ADC_CHANNEL_1) || \
  64. ((CHANNEL_NUM) == ADC_CHANNEL_2) || \
  65. ((CHANNEL_NUM) == ADC_CHANNEL_3) || \
  66. ((CHANNEL_NUM) == ADC_CHANNEL_4) || \
  67. ((CHANNEL_NUM) == ADC_CHANNEL_5) || \
  68. ((CHANNEL_NUM) == ADC_CHANNEL_6)||\
  69. ((CHANNEL_NUM) == ADC_CHANNEL_7))
  70. typedef enum
  71. {
  72. ADC_GPIO = 0,
  73. ADC_DIFF,
  74. ADC_HVIN,
  75. ADC_VINLPM,
  76. }ADC_ModeTypeDef;
  77. #define IS_ADC_MODE(MODE) ((MODE == ADC_GPIO)||\
  78. (MODE == ADC_DIFF)||\
  79. (MODE == ADC_HVIN)||\
  80. (MODE == ADC_VINLPM))
  81. /* ADC Struct Define*/
  82. typedef struct _ADC_InitTypeDef
  83. {
  84. ADC_ChxTypeDef ADC_Channel; /* ADC Channel select */
  85. ADC_ModeTypeDef ADC_Mode;
  86. } ADC_InitTypeDef;
  87. /**
  88. *@brief ADC initialization.
  89. *@param ADC_InitStruct : piont to ADC_InitTypeDef struct
  90. *@return None.
  91. */
  92. void ADC_Init(ADC_InitTypeDef *ADC_InitStruct);
  93. /**
  94. * @brief Get ADC result
  95. *
  96. * @param ADC_Channel : In gpio mode ,the para can be every value of ADC_ChxTypeDef,
  97. * in gpio diff mode, the param can be ADC_CHANNEL_0 to ADC_CHANNEL_3,and in other mode,
  98. * the param can be 0.
  99. * @retval 0:fail other:adc value
  100. */
  101. uint16_t ADC_GetResult(ADC_ChxTypeDef ADC_Channel);
  102. /**
  103. * @brief Get voltage
  104. * @param ADC_Channel: ADC_Channel Select channel,
  105. * @retval -1:fail; other:adc voltage (mV);
  106. */
  107. int ADC_GetVoltage(ADC_ChxTypeDef ADC_Channel);
  108. #endif