//************************************************************ // 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****/