lib_adc.h 12.1 KB
Newer Older
F
FuChao 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249
/**
  ******************************************************************************
  * @file    lib_adc.h 
  * @author  Application Team
  * @version V4.6.0
  * @date    2019-06-18
  * @brief   ADC library.
  ******************************************************************************
  * @attention
  *
  ******************************************************************************
  */
#ifndef __LIB_ADC_H
#define __LIB_ADC_H

#ifdef __cplusplus
 extern "C" {
#endif

#include "target.h"

typedef struct
{
  uint32_t TrigMode; 
  uint32_t ConvMode;  
  uint32_t ClockSource;  
  uint32_t ClockDivider;
  uint32_t Channel;
} ADCInitType;

//TrigMode
#define ADC_TRIGMODE_AUTO   0
#define ADC_TRIGMODE_MANUAL ANA_ADCCTRL_MTRIG
#define IS_ADC_TRIGMODE(__TRIGMODE__)  (((__TRIGMODE__) == ADC_TRIGMODE_AUTO) ||\
                                        ((__TRIGMODE__) == ADC_TRIGMODE_MANUAL))

//ConvMode
#define ADC_CONVMODE_SINGLECHANNEL 0
#define ADC_CONVMODE_MULTICHANNEL  1
#define IS_ADC_CONVMODE(__CONVMODE__)  (((__CONVMODE__) == ADC_CONVMODE_SINGLECHANNEL) ||\
                                        ((__CONVMODE__) == ADC_CONVMODE_MULTICHANNEL))

//ClockSource
#define ADC_CLKSRC_RCH  0
#define ADC_CLKSRC_PLLL ANA_ADCCTRL_CLKSEL
#define IS_ADC_CLKSRC(__CLKSRC__)  (((__CLKSRC__) == ADC_CLKSRC_RCH) ||\
                                    ((__CLKSRC__) == ADC_CLKSRC_PLLL))

//TrigSource
#define ADC_TRIGSOURCE_OFF      ANA_ADCCTRL_AEN_OFF
#define ADC_TRIGSOURCE_TIM0     ANA_ADCCTRL_AEN_TMR0 
#define ADC_TRIGSOURCE_TIM1     ANA_ADCCTRL_AEN_TMR1 
#define ADC_TRIGSOURCE_TIM2     ANA_ADCCTRL_AEN_TMR2 
#define ADC_TRIGSOURCE_TIM3     ANA_ADCCTRL_AEN_TMR3 
#define IS_ADC_TRIGSOURCE(__TRIGSOURCE__)  (((__TRIGSOURCE__) == ADC_TRIGSOURCE_OFF) ||\
                                            ((__TRIGSOURCE__) == ADC_TRIGSOURCE_TIM0) ||\
                                            ((__TRIGSOURCE__) == ADC_TRIGSOURCE_TIM1) ||\
                                            ((__TRIGSOURCE__) == ADC_TRIGSOURCE_TIM2) ||\
                                            ((__TRIGSOURCE__) == ADC_TRIGSOURCE_TIM3))

//ClockDivider
#define ADC_CLKDIV_1    ANA_ADCCTRL_CLKDIV_1
#define ADC_CLKDIV_2    ANA_ADCCTRL_CLKDIV_2
#define ADC_CLKDIV_3    ANA_ADCCTRL_CLKDIV_3
#define ADC_CLKDIV_4    ANA_ADCCTRL_CLKDIV_4
#define ADC_CLKDIV_5    ANA_ADCCTRL_CLKDIV_5
#define ADC_CLKDIV_6    ANA_ADCCTRL_CLKDIV_6
#define ADC_CLKDIV_7    ANA_ADCCTRL_CLKDIV_7
#define ADC_CLKDIV_8    ANA_ADCCTRL_CLKDIV_8
#define ADC_CLKDIV_9    ANA_ADCCTRL_CLKDIV_9
#define ADC_CLKDIV_10   ANA_ADCCTRL_CLKDIV_10
#define ADC_CLKDIV_11   ANA_ADCCTRL_CLKDIV_11
#define ADC_CLKDIV_12   ANA_ADCCTRL_CLKDIV_12
#define ADC_CLKDIV_13   ANA_ADCCTRL_CLKDIV_13
#define ADC_CLKDIV_14   ANA_ADCCTRL_CLKDIV_14
#define ADC_CLKDIV_15   ANA_ADCCTRL_CLKDIV_15
#define ADC_CLKDIV_16   ANA_ADCCTRL_CLKDIV_16
#define IS_ADC_CLKDIV(__CLKDIV__)  (((__CLKDIV__) == ADC_CLKDIV_1)  ||\
                                    ((__CLKDIV__) == ADC_CLKDIV_2)  ||\
                                    ((__CLKDIV__) == ADC_CLKDIV_3)  ||\
                                    ((__CLKDIV__) == ADC_CLKDIV_4)  ||\
                                    ((__CLKDIV__) == ADC_CLKDIV_5)  ||\
                                    ((__CLKDIV__) == ADC_CLKDIV_6)  ||\
                                    ((__CLKDIV__) == ADC_CLKDIV_7)  ||\
                                    ((__CLKDIV__) == ADC_CLKDIV_8)  ||\
                                    ((__CLKDIV__) == ADC_CLKDIV_9)  ||\
                                    ((__CLKDIV__) == ADC_CLKDIV_10) ||\
                                    ((__CLKDIV__) == ADC_CLKDIV_11) ||\
                                    ((__CLKDIV__) == ADC_CLKDIV_12) ||\
                                    ((__CLKDIV__) == ADC_CLKDIV_13) ||\
                                    ((__CLKDIV__) == ADC_CLKDIV_14) ||\
                                    ((__CLKDIV__) == ADC_CLKDIV_15) ||\
                                    ((__CLKDIV__) == ADC_CLKDIV_16))

//Channel
#define ADC_CHANNEL0       0   
#define ADC_CHANNEL1       1   
#define ADC_CHANNEL2       2   
#define ADC_CHANNEL3       3   
#define ADC_CHANNEL4       4   
#define ADC_CHANNEL5       5   
#define ADC_CHANNEL6       6   
#define ADC_CHANNEL7       7   
#define ADC_CHANNEL8       8   
#define ADC_CHANNEL9       9   
#define ADC_CHANNEL10      10  
#define ADC_CHANNEL11      11

#define IS_ADC_CHANNEL(__CHANNEL__)  (((__CHANNEL__) == ADC_CHANNEL0)  ||\
                                      ((__CHANNEL__) == ADC_CHANNEL1)  ||\
                                      ((__CHANNEL__) == ADC_CHANNEL2)  ||\
                                      ((__CHANNEL__) == ADC_CHANNEL3)  ||\
                                      ((__CHANNEL__) == ADC_CHANNEL4)  ||\
                                      ((__CHANNEL__) == ADC_CHANNEL5)  ||\
                                      ((__CHANNEL__) == ADC_CHANNEL6)  ||\
                                      ((__CHANNEL__) == ADC_CHANNEL7)  ||\
                                      ((__CHANNEL__) == ADC_CHANNEL8)  ||\
                                      ((__CHANNEL__) == ADC_CHANNEL9)  ||\
                                      ((__CHANNEL__) == ADC_CHANNEL10) ||\
                                      ((__CHANNEL__) == ADC_CHANNEL11))
                                        
//INTMask
#define ADC_INT_AUTODONE    ANA_INTEN_INTEN1
#define ADC_INT_MANUALDONE  ANA_INTEN_INTEN0
#define ADC_INT_Msk        (ADC_INT_AUTODONE | ADC_INT_MANUALDONE)
#define IS_ADC_INT(__INT__)  ((((__INT__) & ADC_INT_Msk) != 0U) &&\
                              (((__INT__) & ~ADC_INT_Msk) == 0U))

//ScaleDown
#define ADC_SCA_NONE    0
#define ADC_SCA_DIV2    ANA_ADCCTRL_CICSCA
#define IS_ADC_SCA(__SCA__)  (((__SCA__) == ADC_SCA_NONE) || ((__SCA__) == ADC_SCA_DIV2))

//Skip
#define ADC_SKIP_4  ANA_ADCCTRL_CICSKIP_4
#define ADC_SKIP_5  ANA_ADCCTRL_CICSKIP_5
#define ADC_SKIP_6  ANA_ADCCTRL_CICSKIP_6
#define ADC_SKIP_7  ANA_ADCCTRL_CICSKIP_7
#define ADC_SKIP_0  ANA_ADCCTRL_CICSKIP_0
#define ADC_SKIP_1  ANA_ADCCTRL_CICSKIP_1
#define ADC_SKIP_2  ANA_ADCCTRL_CICSKIP_2
#define ADC_SKIP_3  ANA_ADCCTRL_CICSKIP_3
#define IS_ADC_SKIP(__SKIP__)  (((__SKIP__) == ADC_SKIP_4) ||\
                                ((__SKIP__) == ADC_SKIP_5) ||\
                                ((__SKIP__) == ADC_SKIP_6) ||\
                                ((__SKIP__) == ADC_SKIP_7) ||\
                                ((__SKIP__) == ADC_SKIP_0) ||\
                                ((__SKIP__) == ADC_SKIP_1) ||\
                                ((__SKIP__) == ADC_SKIP_2) ||\
                                ((__SKIP__) == ADC_SKIP_3))

//DSRSelection
#define ADC_SDRSEL_DIV512  ANA_ADCCTRL_DSRSEL_512
#define ADC_SDRSEL_DIV256  ANA_ADCCTRL_DSRSEL_256
#define ADC_SDRSEL_DIV128  ANA_ADCCTRL_DSRSEL_128
#define ADC_SDRSEL_DIV64   ANA_ADCCTRL_DSRSEL_64
#define IS_ADC_SDR(__SDR__)  (((__SDR__) == ADC_SDRSEL_DIV512) ||\
                              ((__SDR__) == ADC_SDRSEL_DIV256) ||\
                              ((__SDR__) == ADC_SDRSEL_DIV128) ||\
                              ((__SDR__) == ADC_SDRSEL_DIV64))

typedef struct
{
  float VDDVoltage;
  float BATRTCVoltage;
  float Temperature;
} ADC_CalResType;
//Division
#define ADC_BAT_CAPDIV  (ANA_REG1_GDE4)
#define ADC_BAT_RESDIV  (ANA_REG1_RESDIV)
                                  
#define IS_ADC_BATDIV(__BATDIV__)  (((__BATDIV__) == ADC_BAT_CAPDIV) ||\
                                    ((__BATDIV__) == ADC_BAT_RESDIV))

/* ADC_GetVoltage */
//Mode
#define ADC_3V_EXTERNAL_NODIV    (0x000UL)    // Power supply: 3.3V;    Channel: External;    Divider modeL: None
#define ADC_3V_EXTERNAL_RESDIV   (0x001UL)    // Power supply: 3.3V;    Channel: External;    Divider modeL: Resistive
#define ADC_3V_EXTERNAL_CAPDIV   (0x002UL)    // Power supply: 3.3V;    Channel: External;    Divider modeL: Capacitive
#define ADC_3V_VDD_RESDIV        (0x003UL)    // Power supply: 3.3V;    Channel: VDD;         Divider modeL: Resistive
#define ADC_3V_VDD_CAPDIV        (0x004UL)    // Power supply: 3.3V;    Channel: VDD;         Divider modeL: Capacitive
#define ADC_3V_BATRTC_RESDIV     (0x005UL)    // Power supply: 3.3V;    Channel: BATRTC;      Divider modeL: Resistive
#define ADC_3V_BATRTC_CAPDIV     (0x006UL)    // Power supply: 3.3V;    Channel: BATRTC;      Divider modeL: Capacitive
#define ADC_5V_EXTERNAL_NODIV    (0x100UL)    // Power supply: 5V;      Channel: External;    Divider modeL: None
#define ADC_5V_EXTERNAL_RESDIV   (0x101UL)    // Power supply: 5V;      Channel: External;    Divider modeL: Resistive
#define ADC_5V_EXTERNAL_CAPDIV   (0x102UL)    // Power supply: 5V;      Channel: External;    Divider modeL: Capacitive
#define ADC_5V_VDD_RESDIV        (0x103UL)    // Power supply: 5V;      Channel: VDD;         Divider modeL: Resistive
#define ADC_5V_VDD_CAPDIV        (0x104UL)    // Power supply: 5V;      Channel: VDD;         Divider modeL: Capacitive
#define ADC_5V_BATRTC_RESDIV     (0x105UL)    // Power supply: 5V;      Channel: BATRTC;      Divider modeL: Resistive
#define ADC_5V_BATRTC_CAPDIV     (0x106UL)    // Power supply: 5V;      Channel: BATRTC;      Divider modeL: Capacitive
#define IS_ADCVOL_MODE(__MODE__)      (((__MODE__) == ADC_3V_EXTERNAL_NODIV)   ||\
                                       ((__MODE__) == ADC_3V_EXTERNAL_RESDIV)  ||\
                                       ((__MODE__) == ADC_3V_EXTERNAL_CAPDIV)  ||\
                                       ((__MODE__) == ADC_3V_VDD_RESDIV)       ||\
                                       ((__MODE__) == ADC_3V_VDD_CAPDIV)       ||\
                                       ((__MODE__) == ADC_3V_BATRTC_RESDIV)    ||\
                                       ((__MODE__) == ADC_3V_BATRTC_CAPDIV)    ||\
                                       ((__MODE__) == ADC_5V_EXTERNAL_NODIV)   ||\
                                       ((__MODE__) == ADC_5V_EXTERNAL_RESDIV)  ||\
                                       ((__MODE__) == ADC_5V_EXTERNAL_CAPDIV)  ||\
                                       ((__MODE__) == ADC_5V_VDD_RESDIV)       ||\
                                       ((__MODE__) == ADC_5V_VDD_CAPDIV)       ||\
                                       ((__MODE__) == ADC_5V_BATRTC_RESDIV)    ||\
                                       ((__MODE__) == ADC_5V_BATRTC_CAPDIV))

/* Exported Functions ------------------------------------------------------- */
/* ADC Exported Functions Group1: 
                                  (De)Initialization -------------------------*/
void ADC_DeInit(void);
void ADC_StructInit(ADCInitType* ADC_InitStruct);
void ADC_Init(ADCInitType* ADC_InitStruct);
/* ADC Exported Functions Group2: 
                                  Get NVR Info, Calculate datas --------------*/
uint32_t ADC_CalculateVoltage(uint32_t Mode, int16_t adc_data, float *Voltage);
uint32_t ADC_GetVDDVoltage_Fast(uint32_t Division, ADC_CalResType *CalResults);
uint32_t ADC_GetVDDVoltage_Normal(uint32_t Division, ADC_CalResType *CalResults);
uint32_t ADC_GetBATRTCVoltage_Fast(uint32_t Division, ADC_CalResType *CalResults);
uint32_t ADC_GetBATRTCVoltage_Normal(uint32_t Division, ADC_CalResType *CalResults);
uint32_t ADC_GetTemperature(ADC_CalResType *CalResults);
/* ADC Exported Functions Group3: 
                                  Interrupt (flag) ---------------------------*/
int16_t ADC_GetADCConversionValue(uint32_t Channel);
void ADC_INTConfig(uint32_t INTMask, uint32_t NewState);
uint8_t ADC_GetAutoDoneFlag(void);
uint8_t ADC_GetManualDoneFlag(void);
void ADC_ClearAutoDoneFlag(void);
void ADC_ClearManualDoneFlag(void);
/* ADC Exported Functions Group4: 
                                  MISC Configuration -------------------------*/
uint32_t ADC_Cmd(uint32_t NewState);
void ADC_StartManual(void);
void ADC_WaitForManual(void);
void ADC_TrigSourceConfig(uint32_t TrigSource);
void ADC_RESDivisionCmd(uint32_t NewState);
void ADC_CAPDivisionCmd(uint32_t NewState);
//CIC Control
void ADC_CICAlwaysOnCmd(uint32_t NewState);
void ADC_CICINVCmd(uint32_t NewState);
void ADC_CICScaleDownConfig(uint32_t ScaleDown);
void ADC_CICSkipConfig(uint32_t Skip);
void ADC_CICDownSamRateConfig(uint32_t DSRSelection);

#ifdef __cplusplus
}
#endif
     
#endif  /* __LIB_ADC_H */

/*********************************** END OF FILE ******************************/