123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269 |
- /**
- *****************************************************************************
- * @file cmem7_adc.h
- *
- * @brief CMEM7 ADC header file
- *
- *
- * @version V1.0
- * @date 3. September 2013
- *
- * @note
- *
- *****************************************************************************
- * @attention
- *
- * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
- * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
- * TIME. AS A RESULT, CAPITAL-MICRO SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
- * INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
- * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
- * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
- *
- * <h2><center>© COPYRIGHT 2013 Capital-micro </center></h2>
- *****************************************************************************
- */
-
- #ifndef __CMEM7_ADC_H
- #define __CMEM7_ADC_H
- #ifdef __cplusplus
- extern "C" {
- #endif
- #include "cmem7.h"
- #include "cmem7_conf.h"
- /** @defgroup ADC_PERIPH
- * @{
- */
- typedef enum {
- ADC_PERIPH_1,
- ADC_PERIPH_2,
- } ADC_PERIPH;
- #define IS_ADC_ALL_PERIPH(PERIPH) (((PERIPH) == ADC_PERIPH_1) || \
- ((PERIPH) == ADC_PERIPH_2))
- /**
- * @}
- */
- /** @defgroup ADC_VSEN
- * @{
- */
- #define ADC_VSEN_VDDCORE 1
- #define ADC_VSEN_VDDIO 2
- #define ADC_VSEN_VDDIO2 4
- #define IS_ADC_VSEN(VSEN) (((VSEN) == ADC_VSEN_VDDCORE) || \
- ((VSEN) == ADC_VSEN_VDDIO) || \
- ((VSEN) == ADC_VSEN_VDDIO2))
- /**
- * @}
- */
- /** @defgroup ADC_PHASE_CTRL
- * @{
- */
- #define ADC_PHASE_CTRL_0DEG_RISE_EDGE 0 /* ADC-1 and ADC-2 CLK are 0DEG Phase Difference(Rising Edge) */
- #define ADC_PHASE_CTRL_90DEG_AHEAD 1 /* ADC-1 90DEG ahead of ADC-2 */
- #define ADC_PHASE_CTRL_90DEG_LAG 2 /* ADC-1 90DEG lag of ADC-2 */
- #define ADC_PHASE_CTRL_0DEG_FALL_EDGE 3 /* ADC-1 and ADC-2 CLK are 0DEG Phase Difference(falling Edge) */
- #define IS_ADC_PHASE_CTRL(CTRL) (((CTRL) == ADC_PHASE_CTRL_0DEG_RISE_EDGE) || \
- ((CTRL) == ADC_PHASE_CTRL_90DEG_AHEAD) || \
- ((CTRL) == ADC_PHASE_CTRL_90DEG_LAG) || \
- ((CTRL) == ADC_PHASE_CTRL_0DEG_FALL_EDGE))
- /**
- * @}
- */
- /** @defgroup ADC_CONVERSION
- * @{
- */
- #define ADC_SYSTEM_MODE_SINGLE_CONV 1
- #define ADC_SYSTEM_MODE_CONTINUOUS_CONV 2
- #define IS_ADC_CONVERSION(CONV) (((CONV) == ADC_SYSTEM_MODE_SINGLE_CONV) || \
- ((CONV) == ADC_SYSTEM_MODE_CONTINUOUS_CONV))
-
- /**
- * @}
- */
- /** @defgroup ADC_CALIBRATION
- * @{
- */
- #define ADC_CALIBRATION_OFFSET 3
- #define ADC_CALIBRATION_NEGTIVE_GAIN 4
- #define ADC_CALIBRATION_POSTIVE_GAIN 5
- #define IS_ADC_CALIBRATION(CALIB) (((CALIB) == ADC_CALIBRATION_OFFSET) || \
- ((CALIB) == ADC_CALIBRATION_NEGTIVE_GAIN) || \
- ((CALIB) == ADC_CALIBRATION_POSTIVE_GAIN))
- /**
- * @}
- */
- /** @defgroup ADC_CHANNEL
- * @{
- */
- #define ADC_CHANNEL_CALIBRATION 0x0
- /**
- * @}
- */
- /** @defgroup ADC1_CHANNEL
- * @{
- */
- #define ADC1_CHANNEL_VIP 0x1
- #define ADC1_CHANNEL_VSEN 0x2
- #define ADC1_CHANNEL_VADIO_0 0x4
- #define ADC1_CHANNEL_VADIO_1 0x8
- #define ADC1_CHANNEL_VADIO_2 0x10
- #define ADC1_CHANNEL_VADIO_3 0x20
- #define ADC1_CHANNEL_VADIO_4 0x40
- #define ADC1_CHANNEL_VADIO_5 0x80
- #define ADC1_CHANNEL_ALL 0xFF
- #define IS_ADC1_CHANNEL(CHANNEL) (((CHANNEL) != 0) && ((CHANNEL) & ~ADC1_CHANNEL_ALL) == 0)
- /**
- * @}
- */
- /** @defgroup ADC2_CHANNEL
- * @{
- */
- #define ADC2_CHANNEL_VIN 0x1
- #define ADC2_CHANNEL_VTMP 0x2
- #define ADC2_CHANNEL_VADIO_6 0x4
- #define ADC2_CHANNEL_VADIO_7 0x8
- #define ADC2_CHANNEL_VADIO_8 0x10
- #define ADC2_CHANNEL_VADIO_9 0x20
- #define ADC2_CHANNEL_VADIO_10 0x40
- #define ADC2_CHANNEL_VADIO_11 0x80
- #define ADC2_CHANNEL_ALL 0xFF
- #define IS_ADC2_CHANNEL(CHANNEL) (((CHANNEL) != 0) && ((CHANNEL) & ~ADC2_CHANNEL_ALL) == 0)
- /**
- * @}
- */
- /** @defgroup ADC_INT
- * @{
- */
- #define ADC1_INT_ALMOST_FULL 0x1
- #define ADC2_INT_ALMOST_FULL 0x8
- #define ADC_INT_ALL 0x9
- #define IS_ADC_INT(INT) (((INT) != 0) && (((INT) & ~ADC_INT_ALL) == 0))
- /**
- * @}
- */
- /**
- * @brief ADC collection data structure
- */
- typedef struct {
- uint8_t channel; /*!< The channel of collected data, is a value of
- @ref ADC_CHANNEL, @ref ADC1_CHANNEL or @ref ADC2_CHANNEL */
- uint16_t data; /*!< collected data */
- } ADC_Data;
- /**
- * @brief ADC initialization structure
- */
- typedef struct
- {
- uint8_t ADC_PhaseCtrl; /*!< Phase between ADC1 and ADC2, is a value of @ref ADC_PHASE_CTRL */
- uint8_t ADC_VsenSelection; /*!< ADC1 VSEN selection, is a value of @ref ADC_VSEN */
- } ADC_InitTypeDef;
- /**
- * @brief ADC initialization
- * @note This function should be called at first before any other interfaces.
- * @param[in] init A pointer to structure ADC_InitTypeDef
- * @retval None
- */
- void ADC_Init(ADC_InitTypeDef* init);
- /**
- * @brief Enable or disable ADC.
- * @param[in] adc ADC peripheral, which is a value of @ref ADC_PERIPH
- * @param[in] Enable The bit indicates if the specific ADC is enable or not
- * @retval None
- */
- void ADC_Enable(uint8_t adc, BOOL enable);
- /**
- * @brief Enable or disable ADC interrupt.
- * @param[in] Int interrupt mask bits, which can be a combination of @ref ADC_INT
- * @param[in] Enable The bit indicates if specific interrupts are enable or not
- * @retval None
- */
- void ADC_EnableInt(uint32_t Int, BOOL enable);
- /**
- * @brief Check specific interrupts are set or not
- * @param[in] Int interrupt mask bits, which can be a combination of @ref ADC_INT
- * @retval BOOL The bit indicates if the specific interrupts are set or not
- */
- BOOL ADC_GetIntStatus(uint32_t Int);
- /**
- * @brief Clear specific interrupts
- * @param[in] Int interrupt mask bits, which can be a value of @ref ADC_INT
- * @retval None
- */
- void ADC_ClearInt(uint32_t Int);
- /**
- * @brief ADC starts to convert data
- * @param[in] adc ADC peripheral, which is a value of @ref ADC_PERIPH
- * @param[in] convMode It should be a value of @ref ADC_CONVERSION
- * @param[in] channel It should be the value of @ref ADC1_CHANNEL
- * or @ref ADC2_CHANNEL according to parameter 'adc'
- * @retval BOOL The bit indicates if the specific ADC starts to convert data
- */
- BOOL ADC_StartConversion(uint8_t adc, uint8_t convMode, uint32_t channel);
- /**
- * @brief ADC starts to calibrate and produces one sample
- * @param[in] adc ADC peripheral, which is a value of @ref ADC_PERIPH
- * @param[in] convMode It should be a value of @ref ADC_CALIBRATION
- * @retval BOOL The bit indicates if the specific ADC starts to convert data
- */
- BOOL ADC_StartCalibration(uint8_t adc, uint8_t calibration);
- /**
- * @brief ADC stops conversion or calibration
- * @param[in] adc ADC peripheral, which is a value of @ref ADC_PERIPH
- * @retval NULL
- */
- void ADC_Stop(uint8_t adc);
- /**
- * @brief Check if ADC is busy or not
- * @param[in] adc ADC peripheral, which is a value of @ref ADC_PERIPH
- * @retval BOOL The bit indicates if the specific ADC is busy or not
- */
- BOOL ADC_IsBusy(uint8_t adc);
- /**
- * @brief Read data from ADC
- * @param[in] adc ADC peripheral, which is a value of @ref ADC_PERIPH
- * @param[in] Size Expected data size to be read
- * @param[out] data A user-allocated buffer to fetch data to be read
- * @retval uint8_t Actual read data size
- */
- uint8_t ADC_Read(uint8_t adc, uint8_t size, ADC_Data* data);
- #ifdef __cplusplus
- }
- #endif
- #endif /*__CMEM7_ADC_H */
|