ct_test/Keil_C/FWLib/SC92F_Lib/inc/sc92f_adc.h

326 lines
14 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//************************************************************
// Copyright (c) 深圳市赛元微电子有限公司
// 文件名称: sc92f_adc.h
// 作者: 赛元应用团队
// 模块功能: ADC固件库函数头文件
// 最后更正日期: 2022年3月23日
// 版本: V1.100014
// 说明: 本文件仅适用于赛元92F/93F/92L系列单片机
//*************************************************************
#ifndef _sc92f_ADC_H_
#define _sc92f_ADC_H_
/* 头文件引用 */
#include "sc92f.h"
/* 说明:ADC参考电源枚举定义在sc92f_option.h使用ADC请注意将该文件导入 */
#include "sc92f_option.h"
#if !defined(SC92F827X) && !defined(SC92F837X)
/* ADC采样时钟分频转换 */
#if defined(SC92F854x) || defined(SC92F754x) || defined(SC92F844xB) || defined(SC92F744xB) || defined(SC92F84Ax_2) || defined(SC92F74Ax_2) || defined(SC92FWxx)
typedef enum
{
ADC_PRESSEL_FOSC_D6 = (uint8_t)0x02, //预分频 fADC = fHRC/6
ADC_PRESSEL_FOSC_D12 = (uint8_t)0x01 //预分频 fADC = fHRC/12
} ADC_PresSel_TypeDef;
#elif defined (SC92F846xB) || defined (SC92F746xB) || defined (SC92F836xB) || defined (SC92F736xB)|| defined (SC92F83Ax) || defined (SC92F73Ax)\
|| defined (SC92F84Ax) || defined (SC92F74Ax) || defined (SC92F7003) || defined (SC92F8003) || defined (SC92F740x)
typedef enum
{
ADC_PRESSEL_FHRC_D32 = (uint8_t)0x00, //预分频 fADC = fHRC/32
ADC_PRESSEL_FHRC_D24 = (uint8_t)0x01, //预分频 fADC = fHRC/24
ADC_PRESSEL_FHRC_D16 = (uint8_t)0x02, //预分频 fADC = fHRC/16
ADC_PRESSEL_FHRC_D12 = (uint8_t)0x03, //预分频 fADC = fHRC/12
ADC_PRESSEL_FHRC_D8 = (uint8_t)0x04, //预分频 fADC = fHRC/8
ADC_PRESSEL_FHRC_D6 = (uint8_t)0x05, //预分频 fADC = fHRC/6
ADC_PRESSEL_FHRC_D4 = (uint8_t)0x06, //预分频 fADC = fHRC/4
ADC_PRESSEL_FHRC_D3 = (uint8_t)0x07 //预分频 fADC = fHRC/3
} ADC_PresSel_TypeDef;
#elif defined (SC92F742x) || defined (SC92F730x) || defined (SC92F725X) || defined (SC92F735X) || defined (SC92F732X) || defined (SC92F7490)\
|| defined (SC93F833x) || defined (SC93F843x) || defined (SC93F743x)
typedef enum
{
ADC_PRESSEL_2_MHz = (uint8_t)0x00, //预分频 fADC = 2MHz
ADC_PRESSEL_333_kHz = (uint8_t)0x20 //预分频 fADC = 333kHz
} ADC_PresSel_TypeDef;
#elif defined(SC92F848x) || defined(SC92F748x)
typedef enum
{
ADC_PRESSEL_FSYS_D16 = (uint8_t)0x00, //预分频 fADC = fSYS/16
ADC_PRESSEL_FSYS_D12 = (uint8_t)0x01, //预分频 fADC = fSYS/12
ADC_PRESSEL_FSYS_D8 = (uint8_t)0x02, //预分频 fADC = fSYS/8
ADC_PRESSEL_FSYS_D6 = (uint8_t)0x03, //预分频 fADC = fSYS/6
ADC_PRESSEL_FSYS_D4 = (uint8_t)0x04, //预分频 fADC = fSYS/4
ADC_PRESSEL_FSYS_D3 = (uint8_t)0x05, //预分频 fADC = fSYS/3
ADC_PRESSEL_FSYS_D2 = (uint8_t)0x06, //预分频 fADC = fSYS/2
ADC_PRESSEL_FSYS_D1 = (uint8_t)0x07 //预分频 fADC = fSYS/1
} ADC_PresSel_TypeDef;
#elif defined(SC92F859x) || defined(SC92F759x)
typedef enum
{
ADC_PRESSEL_FSYS_D16 = (uint8_t)0x00, //预分频 fADC = fSYS/16
ADC_PRESSEL_FSYS_D12 = (uint8_t)0x01, //预分频 fADC = fSYS/12
ADC_PRESSEL_FSYS_D6 = (uint8_t)0x02, //预分频 fADC = fSYS/6
ADC_PRESSEL_FSYS_D4 = (uint8_t)0x03, //预分频 fADC = fSYS/4
} ADC_PresSel_TypeDef;
#elif defined (SC92L853x) || defined (SC92L753x)
typedef enum
{
ADC_PRESSEL_3CLOCK = (uint8_t)0x10, //采样时间为3个系统时钟
ADC_PRESSEL_6CLOCK = (uint8_t)0x14, //采样时间为6个系统时钟
ADC_PRESSEL_16CLOCK = (uint8_t)0x18, //采样时间为16个系统时钟
ADC_PRESSEL_32CLOCK = (uint8_t)0x1c //采样时间为32个系统时钟
} ADC_PresSel_TypeDef;
#endif
#if defined(SC92F854x) || defined(SC92F754x) || defined(SC92F844xB) || defined(SC92F744xB) || defined(SC92F84Ax_2) || defined(SC92F74Ax_2)\
|| defined(SC92FWxx) || defined(SC92F859x) || defined (SC92F759x)
typedef enum
{
ADC_Cycle_6Cycle = (uint8_t)0x00, //ADC采样时间为6个ADC采样时钟周期
ADC_Cycle_36Cycle = (uint8_t)0x04 //ADC采样时间为36个ADC采样时钟周期
} ADC_Cycle_TypeDef;
#elif defined (SC92F846xB) || defined (SC92F746xB) || defined (SC92F836xB) || defined (SC92F736xB) || defined (SC92F83Ax) || defined (SC92F73Ax)\
|| defined (SC92F84Ax) || defined (SC92F74Ax) || defined (SC92F7003) || defined(SC92F8003) || defined (SC92F740x) || defined (SC92F848x) || defined (SC92F748x)
typedef enum
{
ADC_Cycle_6Cycle = (uint8_t)0x00, //ADC采样时间为6个ADC采样时钟周期
ADC_Cycle_36Cycle = (uint8_t)0x08 //ADC采样时间为36个ADC采样时钟周期
} ADC_Cycle_TypeDef;
#elif defined (SC92F742x) || defined (SC92F730x) || defined (SC92F725X) || defined (SC92F735X) || defined (SC92F732X)\
|| defined (SC92F7490) || defined (SC93F833x) || defined (SC93F843x) || defined (SC93F743x) || defined (SC92L853x) || defined (SC92L753x)
typedef enum
{
ADC_Cycle_Null = (uint8_t)0x00,
} ADC_Cycle_TypeDef;
#endif
#if defined(SC92F854x) || defined(SC92F754x) || defined(SC92F844xB) || defined(SC92F744xB) || defined(SC92F84Ax_2) || defined(SC92F74Ax_2)\
|| defined(SC92FWxx) || defined(SC92F859x) || defined(SC92F759x)
typedef enum
{
ADC_CHANNEL_0 = (uint8_t)0x00, //选择AIN0做AD输入口
ADC_CHANNEL_1 = (uint8_t)0x01, //选择AIN1做AD输入口
ADC_CHANNEL_2 = (uint8_t)0x02, //选择AIN2做AD输入口
ADC_CHANNEL_3 = (uint8_t)0x03, //选择AIN3做AD输入口
ADC_CHANNEL_4 = (uint8_t)0x04, //选择AIN4做AD输入口
ADC_CHANNEL_5 = (uint8_t)0x05, //选择AIN5做AD输入口
ADC_CHANNEL_6 = (uint8_t)0x06, //选择AIN6做AD输入口
ADC_CHANNEL_7 = (uint8_t)0x07, //选择AIN7做AD输入口
ADC_CHANNEL_8 = (uint8_t)0x08, //选择AIN8做AD输入口
ADC_CHANNEL_9 = (uint8_t)0x09, //选择AIN9做AD输入口
ADC_CHANNEL_10 = (uint8_t)0x0A, //选择AIN10做AD输入口
ADC_CHANNEL_11 = (uint8_t)0x0B, //选择AIN11做AD输入口
ADC_CHANNEL_12 = (uint8_t)0x0C, //选择AIN12做AD输入口
ADC_CHANNEL_13 = (uint8_t)0x0D, //选择AIN13做AD输入口
ADC_CHANNEL_14 = (uint8_t)0x0E, //选择AIN14做AD输入口
ADC_CHANNEL_15 = (uint8_t)0x0F, //选择AIN15做AD输入口
ADC_CHANNEL_VDD_D4 = (uint8_t)0x1f //选择内部1/4VDD做AD输入口
} ADC_Channel_TypeDef;
#elif defined(SC92F7003) || defined(SC92F8003) || defined(SC92F740x)
typedef enum
{
ADC_CHANNEL_0 = (uint8_t)0x00, //选择AIN0做AD输入口
ADC_CHANNEL_1 = (uint8_t)0x01, //选择AIN1做AD输入口
ADC_CHANNEL_2 = (uint8_t)0x02, //选择AIN2做AD输入口
ADC_CHANNEL_3 = (uint8_t)0x03, //选择AIN3做AD输入口
ADC_CHANNEL_4 = (uint8_t)0x04, //选择AIN4做AD输入口
ADC_CHANNEL_5 = (uint8_t)0x05, //选择AIN5做AD输入口
ADC_CHANNEL_6 = (uint8_t)0x06, //选择AIN6做AD输入口
ADC_CHANNEL_VDD_D4 = (uint8_t)0x1f //选择内部1/4VDD做AD输入口
} ADC_Channel_TypeDef;
#elif defined(SC92F846xB) || defined(SC92F746xB) || defined(SC92F836xB) || defined(SC92F736xB) || defined(SC92F83Ax)\
|| defined(SC92F73Ax) || defined(SC92F84Ax) || defined(SC92F74Ax) || defined(SC92F742x) || defined(SC92F725X)\
|| defined(SC92F735X) || defined(SC92F732X) || defined(SC92F848x) || defined(SC92F748x) || defined (SC92L853x) || defined (SC92L753x)
typedef enum
{
ADC_CHANNEL_0 = (uint8_t)0x00, //选择AIN0做AD输入口
ADC_CHANNEL_1 = (uint8_t)0x01, //选择AIN1做AD输入口
ADC_CHANNEL_2 = (uint8_t)0x02, //选择AIN2做AD输入口
ADC_CHANNEL_3 = (uint8_t)0x03, //选择AIN3做AD输入口
ADC_CHANNEL_4 = (uint8_t)0x04, //选择AIN4做AD输入口
ADC_CHANNEL_5 = (uint8_t)0x05, //选择AIN5做AD输入口
ADC_CHANNEL_6 = (uint8_t)0x06, //选择AIN6做AD输入口
ADC_CHANNEL_7 = (uint8_t)0x07, //选择AIN7做AD输入口
ADC_CHANNEL_8 = (uint8_t)0x08, //选择AIN8做AD输入口
ADC_CHANNEL_9 = (uint8_t)0x09, //选择AIN9做AD输入口
ADC_CHANNEL_VDD_D4 = (uint8_t)0x1f //选择内部1/4VDD做AD输入口
} ADC_Channel_TypeDef;
#elif defined(SC92F730x)
typedef enum
{
ADC_CHANNEL_0 = (uint8_t)0x00, //选择AIN0做AD输入口
ADC_CHANNEL_1 = (uint8_t)0x01, //选择AIN1做AD输入口
ADC_CHANNEL_6 = (uint8_t)0x06, //选择AIN6做AD输入口
ADC_CHANNEL_7 = (uint8_t)0x07, //选择AIN7做AD输入口
ADC_CHANNEL_VDD_D4 = (uint8_t)0x1f //选择内部1/4VDD做AD输入口
} ADC_Channel_TypeDef;
#elif defined(SC92F7490)
typedef enum
{
ADC_CHANNEL_0 = (uint8_t)0x00, //选择AIN0做AD输入口
ADC_CHANNEL_1 = (uint8_t)0x01, //选择AIN1做AD输入口
ADC_CHANNEL_VDD_D4 = (uint8_t)0x1f //选择内部1/4VDD做AD输入口
} ADC_Channel_TypeDef;
#elif defined(SC93F833x) || defined(SC93F843x) || defined(SC93F743x)
typedef enum
{
ADC_CHANNEL_0 = (uint8_t)0x00, //选择AIN0做AD输入口
ADC_CHANNEL_1 = (uint8_t)0x01, //选择AIN1做AD输入口
ADC_CHANNEL_2 = (uint8_t)0x02, //选择AIN2做AD输入口
ADC_CHANNEL_3 = (uint8_t)0x03, //选择AIN3做AD输入口
ADC_CHANNEL_4 = (uint8_t)0x04, //选择AIN4做AD输入口
ADC_CHANNEL_5 = (uint8_t)0x05, //选择AIN5做AD输入口
ADC_CHANNEL_6 = (uint8_t)0x06, //选择AIN6做AD输入口
ADC_CHANNEL_7 = (uint8_t)0x07, //选择AIN7做AD输入口
ADC_CHANNEL_8 = (uint8_t)0x08, //选择AIN8做AD输入口
ADC_CHANNEL_9 = (uint8_t)0x09, //选择AIN9做AD输入口
ADC_CHANNEL_9_PGA = (uint8_t)0x19, //选择AIN9做PGA输入口
ADC_CHANNEL_Temp = (uint8_t)0x0e, //选择内部温度传感器做为AD输入口
ADC_CHANNEL_VDD_D4 = (uint8_t)0x0f //选择内部1/4VDD做AD输入口
} ADC_Channel_TypeDef;
#endif
#if defined(SC92F854x) || defined(SC92F754x) || defined(SC92F844xB) || defined(SC92F744xB) || defined(SC92F84Ax_2) || defined(SC92F74Ax_2)\
|| defined(SC92FWxx) || defined(SC92F859x) || defined(SC92F759x)
typedef enum
{
ADC_EAIN_0 = (uint16_t)0x0001, //选择AIN0
ADC_EAIN_1 = (uint16_t)0x0002, //选择AIN1
ADC_EAIN_2 = (uint16_t)0x0004, //选择AIN2
ADC_EAIN_3 = (uint16_t)0x0008, //选择AIN3
ADC_EAIN_4 = (uint16_t)0x0010, //选择AIN4
ADC_EAIN_5 = (uint16_t)0x0020, //选择AIN5
ADC_EAIN_6 = (uint16_t)0x0040, //选择AIN6
ADC_EAIN_7 = (uint16_t)0x0080, //选择AIN7
ADC_EAIN_8 = (uint16_t)0x0100, //选择AIN8
ADC_EAIN_9 = (uint16_t)0x0200, //选择AIN9
ADC_EAIN_10 = (uint16_t)0x0400, //选择AIN10
ADC_EAIN_11 = (uint16_t)0x0800, //选择AIN11
ADC_EAIN_12 = (uint16_t)0x1000, //选择AIN12
ADC_EAIN_13 = (uint16_t)0x2000, //选择AIN13
ADC_EAIN_14 = (uint16_t)0x4000, //选择AIN14
ADC_EAIN_15 = (uint16_t)0x8000 //选择AIN15
} ADC_EAIN_TypeDef;
#elif defined(SC92F7003) || defined(SC92F8003) || defined(SC92F740x)
typedef enum
{
ADC_EAIN_0 = (uint16_t)0x0001, //选择AIN0
ADC_EAIN_1 = (uint16_t)0x0002, //选择AIN1
ADC_EAIN_2 = (uint16_t)0x0004, //选择AIN2
ADC_EAIN_3 = (uint16_t)0x0008, //选择AIN3
ADC_EAIN_4 = (uint16_t)0x0010, //选择AIN4
ADC_EAIN_5 = (uint16_t)0x0020, //选择AIN5
ADC_EAIN_6 = (uint16_t)0x0040 //选择AIN6
} ADC_EAIN_TypeDef;
#elif defined(SC92F846xB) || defined(SC92F746xB) || defined(SC92F836xB) || defined(SC92F736xB) || defined(SC92F83Ax)\
|| defined(SC92F73Ax) || defined(SC92F84Ax) || defined(SC92F74Ax) || defined(SC92F742x) || defined(SC92F725X)\
|| defined(SC92F735X) || defined(SC92F732X) || defined(SC93F833x) || defined(SC93F843x) || defined(SC93F743x)\
|| defined(SC92F848x) || defined(SC92F748x) || defined (SC92L853x) || defined (SC92L753x)
typedef enum
{
ADC_EAIN_0 = (uint16_t)0x0001, //选择AIN0
ADC_EAIN_1 = (uint16_t)0x0002, //选择AIN1
ADC_EAIN_2 = (uint16_t)0x0004, //选择AIN2
ADC_EAIN_3 = (uint16_t)0x0008, //选择AIN3
ADC_EAIN_4 = (uint16_t)0x0010, //选择AIN4
ADC_EAIN_5 = (uint16_t)0x0020, //选择AIN5
ADC_EAIN_6 = (uint16_t)0x0040, //选择AIN6
ADC_EAIN_7 = (uint16_t)0x0080, //选择AIN7
ADC_EAIN_8 = (uint16_t)0x0100, //选择AIN8
ADC_EAIN_9 = (uint16_t)0x0200, //选择AIN9
} ADC_EAIN_TypeDef;
#elif defined(SC92F730x)
typedef enum
{
ADC_EAIN_0 = (uint16_t)0x0001, //选择AIN0
ADC_EAIN_1 = (uint16_t)0x0002, //选择AIN1
ADC_EAIN_6 = (uint16_t)0x0040, //选择AIN6
ADC_EAIN_7 = (uint16_t)0x0080, //选择AIN7
} ADC_EAIN_TypeDef;
#elif defined(SC92F7490)
typedef enum
{
ADC_EAIN_0 = (uint16_t)0x0001, //选择AIN0
ADC_EAIN_1 = (uint16_t)0x0002, //选择AIN1
} ADC_EAIN_TypeDef;
#endif
/* 内部温度采集和可调节增益放大器PGA枚举*/
#if defined(SC93F833x) || defined(SC93F843x) || defined(SC93F743x)
/* PGA共模电压枚举 */
typedef enum
{
ADC_PGACOM_0V = 0x00, //共模电压为0V
ADC_PGACOM_1_2V = 0x40, //共模电压为1.2V
} ADC_PGACOM_TypeDef;
/* PGA同相增益枚举 */
typedef enum
{
ADC_PGAGAN_NonInvert20 = 0x00, //同相增益为20反相增益为19
ADC_PGAGAN_NonInvert100 = 0x20, //同相增益为100反相增益为99
} ADC_PGAGAN_TypeDef;
/* PGA相位枚举 */
typedef enum
{
ADC_PGAIPT_NonInvert = 0x00, //同相输入
ADC_PGAIPT_Invert = 0x10, //反相输入
} ADC_PGAIPT_TypeDef;
#endif
/*******************************宏函数*******************************/
/*****************************************************
*函数名称:void ADC_ITConfig(FunctionalState NewState, PriorityStatus Priority)
*函数功能:ADC中断初始化
*入口参数:
FunctionalState:NewState:中断使能/关闭选择
PriorityStatus:Priority:中断优先级选择
*出口参数:void
*****************************************************/
#define ADC_ITConfig(NewState,Priority) \
do{ \
EADC = (bit)NewState; \
IPADC = (bit)Priority; \
}while(0)
/*****************************************************
*函数名称:void ADC_StartConversion(void)
*函数功能:开始一次AD转换
*入口参数:void
*出口参数:void
*****************************************************/
#define ADC_StartConversion() SET_BIT(ADCCON,0X40)
/* 内部温度采集和可调节增益放大器函数声明 */
#if defined(SC93F833x) || defined(SC93F843x) || defined(SC93F743x)
/* 内部温度采集相关函数声明 */
void ADC_TSCmd(FunctionalState NewState);
void ADC_CHOPConfig(PriorityStatus NewState);
uint16_t ADC_Get_TS_StandardData(void);
float ADC_GetTSValue(void);
/* PGA相关函数声明 */
void ADC_PGAConfig(ADC_PGACOM_TypeDef ADC_PGACOM, ADC_PGAGAN_TypeDef ADC_PGAGAN, ADC_PGAIPT_TypeDef ADC_PGAIPT);
void ADC_PGACmd(PriorityStatus NewState);
#endif
/* ADC通用函数声明 */
void ADC_DeInit(void);
void ADC_Init(ADC_PresSel_TypeDef ADC_PrescalerSelection, ADC_Cycle_TypeDef ADC_Cycle);
void ADC_ChannelConfig(ADC_Channel_TypeDef ADC_Channel,
FunctionalState NewState);
void ADC_Cmd(FunctionalState NewState);
unsigned int ADC_GetConversionValue(void);
FlagStatus ADC_GetFlagStatus(void);
void ADC_ClearFlag(void);
void ADC_EAINConfig(uint16_t ADC_EAIN_Select,
FunctionalState NewState);
void ADC_VrefConfig(ADC_Vref_TypeDef ADC_Vref);
#endif
#endif
/******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/