Files
kunlun/driver/inc/sadc.h
2024-09-28 14:24:04 +08:00

178 lines
5.4 KiB
C

/****************************************************************************
*
* Copyright(c) 2019 by Aerospace C.Power (Chongqing) Microelectronics. ALL RIGHTS RESERVED.
*
* This Information is proprietary to Aerospace C.Power (Chongqing) Microelectronics and MAY NOT
* be copied by any method or incorporated into another program without
* the express written consent of Aerospace C.Power. This Information or any portion
* thereof remains the property of Aerospace C.Power. The Information contained herein
* is believed to be accurate and Aerospace C.Power assumes no responsibility or
* liability for its use in any way and conveys no license or title under
* any patent or copyright and makes no representation or warranty that this
* Information is free from patent or copyright infringement.
*
* ****************************************************************************/
#ifndef SADC_H
#define SADC_H
#ifdef __cplusplus
extern "C" {
#endif
typedef enum {
ANA_SADC0 = 0,
ANA_SADC1 = 1,
} sadc_id_t;
typedef enum {
SADC_CLK_FREQ_25M,
SADC_CLK_FREQ_12M5
} sadc_clk_freq_t;
/**
* @brief sadc_init(sadc_id_t sadc_id) - init sadc sub system.
*
* @param sadc_id: sadc0 or sadc1
* @param clk_freq: sadc clock frequency, see sadc_clk_freq_t
*/
void sadc_init(sadc_id_t sadc_id, sadc_clk_freq_t *clk_freq);
/**
* @brief sadc_phase_sel() - set phase channel
*
* @param sadc_id: sadc0 or sadc1
* @param phs: phase
*
* @return 0: success
* @return NON-0: error
*/
int32_t sadc_phase_sel(sadc_id_t sadc_id,uint8_t phs);
/**
* @brief sadc_data_num_set() - set data number
*
* @param sadc_id: sadc0 or sadc1
* @param phs: phase
* @param num: data number
*
* @return 0: success
* @return NON-0: error
*/
int32_t sadc_data_num_set(sadc_id_t sadc_id, uint8_t phs, uint32_t num);
/**
* @brief sadc_discard_num_set() - discard number for crosstalk.
*
* @param sadc_id: sadc0 or sadc1
* @param phs: phase
* @param num: discard number
*
* @return 0: success
* @return NON-0: error
*/
int32_t sadc_discard_num_set(sadc_id_t sadc_id, uint8_t phs, uint32_t num);
/**
* @brief sadc_phase_sel_scl_mux() - set adc gain value
*
* @param phase: mux adc channel select
* @param channel_num: adc channel number
*
* @return 0: success
* @return NON-0: error
*/
int32_t sadc_phase_sel_scl_mux(uint8_t phase, uint8_t channel_num);
/**
* @brief sadc_poll_data_start() - get adc value code which is calibrated.
* @note code convert to voltage is different for kl1/2/3.
* @param ch: adc channel.
* @param acc: enum ADC_ACC
* @param gain: enum ADC_GAIN
* @param err_num: err_num return value;
0 - normal. data is OK
1 - timeout, data is not OK.
* @return adc value code which is calibrated.
*/
int32_t sadc_poll_data_start(uint32_t ch, uint8_t acc, uint8_t gain,
uint8_t *err_num);
/**
* @brief sadc_poll_volt_start() - get adc voltage which is calibrated.
* @param ch: adc channel.
* @param gain: enum ADC_GAIN
* @param err_num: err_num return value;
0 - normal. data is OK
1 - timeout, data is not OK.
* @return adc voltage which is calibrated, uint: mV.
*/
int32_t sadc_poll_volt_start(uint32_t ch, uint8_t gain, uint8_t *err_num);
/**
* @brief sadc_poll_volt_start_real() - get adc voltage which is not calibrated.
* @param ch: adc channel.
* @param gain: enum ADC_GAIN
* @param err_num: err_num return value;
0 - normal. data is OK
1 - timeout, data is not OK.
* @return adc voltage which is not calibrated, uint: mV.
*/
int32_t sadc_poll_volt_start_real(uint32_t ch, uint8_t gain, uint8_t *err_num);
/**
* @brief sadc_m_cali_data_refresh() - adc module cali data changed, need to reload.
*
* @param none
* @return none
*/
void sadc_m_cali_data_refresh(void);
/**
* @brief sadc_temperature_val_get(uint8_t type) - get core temperature.
* @param : type:temperature type: 0 rawdata 1 Calibrated data
* @return: core temperature, unit: ℃;
*/
float sadc_temperature_val_get(uint8_t type);
/**
* @brief sadc_temperature_val_get_raw() - get core temperature raw.
* @param temp: to get temperature, unit: ℃;
* @return: 0: success othre:fail;
*/
int32_t sadc_temperature_val_get_raw(float *temp);
/**
* @brief sadc_temperature_val_update() - update temperature in variables.
* @param : [none.]
* @return: 0:sucess other:fail;
*/
int32_t sadc_temperature_val_update(void);
/**
* @brief sadc_start_en() - enable sadc module
*
* @param sadc_id: sadc0 or sadc1
* @param en: 0--disable, 1--enable
*
* @return none
*/
void sadc_start_en(sadc_id_t sadc_id, uint8_t en);
/**
* @brief sadc_phase_mode_set() - set phase mode
*
* @param sadc_id: sadc0 or sadc1
* @param mode: 0-1 phase, >0-multi phase, refs SADC_PHS_MODE.
*
* @return none
*/
void sadc_phase_mode_set(sadc_id_t sadc_id, uint8_t mode);
#ifdef __cplusplus
}
#endif
#endif/*SADC_H*/