ct_test/Keil_C/List/sc92f_adc.lst

536 lines
25 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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.

C51 COMPILER V9.59.0.0 SC92F_ADC 01/18/2024 10:03:13 PAGE 1
C51 COMPILER V9.59.0.0, COMPILATION OF MODULE SC92F_ADC
OBJECT MODULE PLACED IN ..\Output\sc92f_adc.obj
COMPILER INVOKED BY: D:\Keil_v5\C51\BIN\C51.EXE ..\FWLib\SC92F_Lib\src\sc92f_adc.c LARGE OBJECTADVANCED OPTIMIZE(8,SIZE)
- BROWSE INCDIR(..\FWLib\SC92F_Lib\inc;..\User;..\Apps;..\Apps;..\User) DEFINE(SC92F836xB) DEBUG PRINT(..\List\sc92f_adc.
-lst) OBJECT(..\Output\sc92f_adc.obj)
line level source
1 //************************************************************
2 // Copyright (c) 深圳市赛元微电子有限公司
3 // 文件名称: sc92f_adc.c
4 // 作者: 赛元应用团队
5 // 模块功能: ADC固件库函数C文件
6 // 最后更正日期: 2022年3月23日
7 // 版本: V1.10005
8 // 说明:
9 //*************************************************************
10
11 /* 头文件引用 */
12 #include "sc92f_adc.h"
13
14 #if !defined(SC92F827X) && !defined(SC92F837X)
15 /**************************************************
16 *函数名称:void ADC_DeInit(void)
17 *函数功能:ADC相关寄存器复位至缺省值
18 *入口参数:void
19 *出口参数:void
20 **************************************************/
21 void ADC_DeInit(void)
22 {
23 1 ADCCON = 0x00;
24 1 ADCCFG0 = 0X00;
25 1 ADCCFG1 = 0X00;
26 1 #if defined(SC92F854x) || defined(SC92F754x) || defined(SC92F844xB) || defined(SC92F744xB) || defined(SC92
-F84Ax_2) || defined(SC92F74Ax_2)\
27 1 || defined(SC92F846xB) || defined(SC92F746xB) || defined(SC92F836xB) || defined(SC92F736xB) || defined(SC
-92F84Ax) || defined(SC92F74Ax)\
28 1 || defined(SC92F83Ax) || defined(SC92F73Ax) || defined(SC92F848x) || defined(SC92F748x) || defined (SC92F
-859x) || defined (SC92F759x)\
29 1 || defined (SC92L853x) || defined (SC92L753x)
30 1 ADCCFG2 = 0X00;
31 1 #endif
32 1 ADCVL = 0X00;
33 1 ADCVH = 0X00;
34 1 EADC = 0;
35 1 IPADC = 0;
36 1 }
37
38 /**************************************************
39 *函数名称:void ADC_Init(ADC_PresSel_TypeDef ADC_PrescalerSelection, ADC_Cycle_TypeDef ADC_Cycle)
40 *函数功能:ADC初始化配置函数
41 *入口参数:
42 ADC_PresSel_TypeDef:ADC_PrescalerSelection:预分频选择
43 ADC_Cycle_TypeDef:ADC_Cycle:采样时钟周期选择
44 *出口参数:void
45 **************************************************/
46 #if defined(SC92F854x) || defined(SC92F754x) || defined(SC92F844xB) || defined(SC92F744xB) || defined(SC92
-F84Ax_2) || defined(SC92F74Ax_2)\
47 || defined(SC92F846xB) || defined(SC92F746xB) || defined(SC92F836xB) || defined(SC92F736xB) || defined(SC
-92F84Ax) || defined(SC92F74Ax)\
48 || defined(SC92F83Ax) || defined(SC92F73Ax) || defined(SC92FWxx) || defined(SC92F848x) || defined(SC92F74
C51 COMPILER V9.59.0.0 SC92F_ADC 01/18/2024 10:03:13 PAGE 2
-8x)\
49 || defined (SC92F859x) || defined (SC92F759x)
50 void ADC_Init(ADC_PresSel_TypeDef ADC_PrescalerSelection,
51 ADC_Cycle_TypeDef ADC_Cycle)
52 {
53 1 /* 配置ADC时钟分频和采样周期 */
54 1 ADCCFG2 = ADC_PrescalerSelection | ADC_Cycle;
55 1 }
56 #elif defined(SC92F7003) || defined(SC92F8003) || defined(SC92F740x)
void ADC_Init(ADC_PresSel_TypeDef ADC_PrescalerSelection,
ADC_Cycle_TypeDef ADC_Cycle)
{
/* 配置ADC时钟分频和采样周期 */
ADCCFG1 = ADC_PrescalerSelection | ADC_Cycle;
}
#elif defined(SC92F742x) || defined(SC92F725X) || defined(SC92F735X) || defined(SC92F730x) || defined(SC92
-F732X) || defined(SC92F7490)\
|| defined(SC93F833x) || defined(SC93F843x) || defined(SC93F743x)
void ADC_Init(ADC_PresSel_TypeDef ADC_PrescalerSelection,
ADC_Cycle_TypeDef ADC_Cycle)
{
ADC_Cycle = 0; //SC92F742x无此功能
/* 配置ADC时钟分频 */
ADCCON = (ADCCON & 0xDF) | ADC_PrescalerSelection;
}
#elif defined (SC92L853x) || defined (SC92L753x)
void ADC_Init(ADC_PresSel_TypeDef ADC_PrescalerSelection, ADC_Cycle_TypeDef ADC_Cycle)
{
ADC_Cycle = 0x00; //该入参在92L系列无效
/* 配置ADC时钟分频 */
ADCCFG2 = ADC_PrescalerSelection;
}
#endif
80
81 /**************************************************
82 *函数名称:void ADC_ChannelConfig(ADC_Channel_TypeDef ADC_Channel, FunctionalState NewState)
83 *函数功能:ADC输入口配置函数并且使能相关功能
84 *入口参数:
85 ADC_Channel_TypeDef:ADC_Channel:ADC输入口选择
86 FunctionalState:NewState:ADCx使能/关闭选择
87 *出口参数:void
88 **************************************************/
89 #if defined(SC92F854x) || defined(SC92F754x) || defined(SC92F844xB) || defined(SC92F744xB) || defined(SC92
-F84Ax_2) || defined(SC92F74Ax_2)\
90 || defined(SC92F846xB) || defined(SC92F746xB) || defined(SC92F836xB) || defined(SC92F736xB) || defined(S
-C92F84Ax) || defined(SC92F74Ax)\
91 || defined(SC92F83Ax) || defined(SC92F73Ax) || defined(SC92FWxx) || defined(SC92F848x) || defined(SC92F7
-48x)\
92 || defined(SC92F859x) || defined(SC92F759x) || defined (SC92L853x) || defined (SC92L753x)
93 void ADC_ChannelConfig(ADC_Channel_TypeDef ADC_Channel, FunctionalState NewState)
94 {
95 1 uint16_t TempReg;
96 1 /* 配置ADC转换通道 */
97 1 ADCCON = (ADCCON & 0XE0) | ADC_Channel;
98 1
99 1 /* 配置ADC外部采样通道 */
100 1 if (ADC_Channel < ADC_CHANNEL_VDD_D4) //内部采样通道无需配置
101 1 {
102 2 TempReg = (0x0001 << ADC_Channel);
103 2 if (NewState == DISABLE)// 使能ADC采样通道
104 2 {
105 3 ADCCFG0 &= (~(uint8_t)TempReg);
C51 COMPILER V9.59.0.0 SC92F_ADC 01/18/2024 10:03:13 PAGE 3
106 3 ADCCFG1 &= (~(uint8_t)(TempReg >> 8));
107 3 }
108 2 else // 失能ADC采样通道
109 2 {
110 3 ADCCFG0 |= ((uint8_t)TempReg);
111 3 ADCCFG1 |= ((uint8_t)(TempReg >> 8));
112 3 }
113 2 }
114 1 }
115 #elif defined(SC92F7003) || defined(SC92F8003) || defined(SC92F740x) || defined(SC92F7490)
void ADC_ChannelConfig(ADC_Channel_TypeDef ADC_Channel, FunctionalState NewState)
{
uint8_t TempReg;
/* 配置ADC转换通道 */
ADCCON = (ADCCON & 0xE0) | ADC_Channel;
/* 配置ADC采样通道 */
if (ADC_Channel < ADC_CHANNEL_VDD_D4) //内部采样通道无需配置
{
TempReg = (0x01 << ADC_Channel);
if (ADC_Channel < ADC_CHANNEL_VDD_D4)
{
if (NewState == DISABLE) //失能ADC采样通道
{
ADCCFG0 &= (~TempReg);
}
else //使能ADC采样通道
{
ADCCFG0 |= TempReg;
}
}
}
}
#elif defined(SC92F742x) || defined(SC92F730x) || defined(SC92F725X) || defined(SC92F735X) || defined(SC92
-F732X)
void ADC_ChannelConfig(ADC_Channel_TypeDef ADC_Channel, FunctionalState NewState)
{
uint16_t TempReg;
/* 配置ADC转换通道 */
ADCCON = (ADCCON & 0xF0) | ADC_Channel;
/* 配置ADC采样通道 */
if (ADC_Channel < ADC_CHANNEL_VDD_D4) //内部采样通道无需配置
{
TempReg = (0x0001 << ADC_Channel);
if (NewState == DISABLE)
{
ADCCFG0 &= (~(uint8_t)TempReg);
ADCCFG1 &= (~(uint8_t)(TempReg >> 8));
}
else
{
ADCCFG0 |= ((uint8_t)TempReg);
ADCCFG1 |= ((uint8_t)(TempReg >> 8));
}
}
}
#elif defined(SC93F833x) || defined(SC93F843x) || defined(SC93F743x)
void ADC_ChannelConfig(ADC_Channel_TypeDef ADC_Channel, FunctionalState NewState)
{
uint16_t TempReg;
/* 配置ADC转换通道 */
C51 COMPILER V9.59.0.0 SC92F_ADC 01/18/2024 10:03:13 PAGE 4
ADCCON = (ADCCON & 0xF0) | ADC_Channel;
/* 配置ADC采样通道 */
if (ADC_Channel < ADC_CHANNEL_Temp) //配置外部采样通道
{
TempReg = (0x0001 << ADC_Channel);
if (NewState == DISABLE)
{
ADCCFG0 &= (~(uint8_t)TempReg);
ADCCFG1 &= (~(uint8_t)(TempReg >> 8));
}
else
{
ADCCFG0 |= ((uint8_t)TempReg);
ADCCFG1 |= ((uint8_t)(TempReg >> 8));
}
}
else if (ADC_Channel == ADC_CHANNEL_Temp) //内部温度采样通道
{
if (NewState == DISABLE)
{
TSCFG &= 0X7F;
}
else
{
/* ADC参考电压选择内部2.4V作为参考 */
OPINX = 0xC2;
OPREG = OPREG & 0X7F | 0x80;
TSCFG |= 0x80;
}
}
else if (ADC_Channel == ADC_CHANNEL_9_PGA) //可变增益放大器采样通道
{
unsigned char code *IFBAddr = 0x3D;
if (NewState == DISABLE)
{
ADCCFG1 &= (~(uint8_t)0x02); //关闭通道9
PGACON &= 0x7F; //使能PGA
}
/* 读取PGA内部出厂校准值 */
else
{
ADCCFG1 |= ((uint8_t)0x02); //PGA输入通道与通道9复用使能通道9
IAPADE = 0x01; //指针指向 IFB 区
PGACFG = *(IFBAddr); //读取校准值
IAPADE = 0x00; //指针指向 ROM 区
PGACON |= 0x80; //使能PGA
}
}
}
#endif
221
222 /**************************************************
223 *函数名称:void ADC_EAINConfig(uint16_t ADC_Channel, FunctionalState NewState)
224 *函数功能:将对应的ADC输入口设置为模拟输入模式
225 *入口参数:
226 ADC_EAIN_TypeDef:ADC_EAIN_Select:选择需要设置的ADC口
227 FunctionalState:NewState:ADC通道使能/关闭选择
228 *出口参数:void
C51 COMPILER V9.59.0.0 SC92F_ADC 01/18/2024 10:03:13 PAGE 5
229 **************************************************/
230 void ADC_EAINConfig(uint16_t ADC_EAIN_Select,
231 FunctionalState NewState)
232 {
233 1 if (NewState == DISABLE)
234 1 {
235 2 ADCCFG0 &= (~(uint8_t)ADC_EAIN_Select);
236 2 #if defined (SC92F854x) || defined (SC92F754x) || defined (SC92F844xB) || defined (SC92F744xB) || defined
- (SC92F84Ax_2) || defined (SC92F74Ax_2)\
237 2 || defined (SC92F846xB) || defined (SC92F746xB) || defined (SC92F836xB) || defined (SC92F736xB)||defined
- (SC92F84Ax) || defined (SC92F74Ax)\
238 2 || defined(SC92F83Ax) || defined(SC92F73Ax) || defined(SC92F848x) || defined(SC92F748x) || defined(SC92F
-859x) || defined (SC92F759x)\
239 2 || defined (SC92L853x) || defined (SC92L753x)
240 2 ADCCFG1 &= (~(uint8_t)(ADC_EAIN_Select >> 8));
241 2 #endif
242 2 }
243 1 else
244 1 {
245 2 ADCCFG0 |= ((uint8_t)ADC_EAIN_Select);
246 2 #if defined (SC92F854x) || defined (SC92F754x) || defined (SC92F844xB) || defined (SC92F744xB)||defined (
-SC92F84Ax_2) || defined (SC92F74Ax_2)\
247 2 || defined (SC92F846xB) || defined (SC92F746xB) || defined (SC92F836xB) || defined (SC92F736xB) || defin
-ed (SC92F84Ax) || defined (SC92F74Ax)\
248 2 || defined(SC92F83Ax) || defined(SC92F73Ax) || defined(SC92F848x) || defined(SC92F748x) || defined(SC92F
-859x) || defined (SC92F759x)\
249 2 || defined (SC92L853x) || defined (SC92L753x)
250 2 ADCCFG1 |= ((uint8_t)(ADC_EAIN_Select >> 8));
251 2 #endif
252 2 }
253 1 }
254 /*****************************************************
255 *函数名称:void ADC_Cmd(FunctionalState NewState)
256 *函数功能:ADC功能开关函数
257 *入口参数:
258 FunctionalState:NewState:功能启动/关闭选择
259 *出口参数:void
260 *****************************************************/
261 void ADC_Cmd(FunctionalState NewState)
262 {
263 1 if (NewState == DISABLE)
264 1 {
265 2 ADCCON &= 0X7F;
266 2 }
267 1 else
268 1 {
269 2 ADCCON |= 0x80;
270 2 }
271 1 }
272
273 /*****************************************************
274 *函数名称:uint16_t ADC_GetConversionValue(void)
275 *函数功能:获得一次AD转换数据
276 *入口参数:void
277 *出口参数:uint16_t
278 *****************************************************/
279 unsigned int ADC_GetConversionValue(void)
280 {
281 1 return ((ADCVH << 4) + (ADCVL >> 4));
282 1 }
283
284 /*****************************************************
C51 COMPILER V9.59.0.0 SC92F_ADC 01/18/2024 10:03:13 PAGE 6
285 *函数名称:FlagStatus ADC_GetFlagStatus(void)
286 *函数功能:获得ADC中断标志状态
287 *入口参数:void
288 *出口参数:
289 FlagStatus:ADC中断标志状态
290 *****************************************************/
291 FlagStatus ADC_GetFlagStatus(void)
292 {
293 1 #if defined (SC92F854x) || defined (SC92F754x) ||defined (SC92F844xB) || defined (SC92F744xB)||defined (
-SC92F84Ax_2) || defined (SC92F74Ax_2)\
294 1 || defined (SC92F846xB) || defined (SC92F746xB) || defined (SC92F836xB) || defined (SC92F736xB)||defined
- (SC92F84Ax) || defined (SC92F74Ax)\
295 1 || defined (SC92F83Ax) || defined (SC92F73Ax) || defined (SC92F7003) || defined (SC92F8003) || defined
-(SC92F740x) || defined (SC92FWxx)\
296 1 || defined(SC92F848x) || defined(SC92F748x) || defined(SC92F859x) || defined (SC92F759x) || defined (SC92
-L853x) || defined (SC92L753x)
297 1 return (bool)(ADCCON & 0x20);
298 1 #elif defined(SC92F742x) || defined(SC92F730x) || defined(SC92F725X) || defined(SC92F735X) || defined(SC92
-F732X) || defined(SC92F7490) || defined(SC93F833x) || defined(SC93F843x) || defined(SC93F743x)
return (bool)(ADCCON & 0x10);
#endif
301 1 }
302
303 /*****************************************************
304 *函数名称:void ADC_ClearFlag(void)
305 *函数功能:清除ADC中断标志状态
306 *入口参数:void
307 *出口参数:void
308 *****************************************************/
309 void ADC_ClearFlag(void)
310 {
311 1 #if defined(SC92F854x) || defined(SC92F754x) || defined(SC92F844xB) || defined(SC92F744xB) || defined(SC92
-F84Ax_2) || defined(SC92F74Ax_2)\
312 1 || defined(SC92F846xB) || defined(SC92F746xB) || defined(SC92F836xB) || defined(SC92F736xB) || defined(S
-C92F84Ax) || defined(SC92F74Ax)\
313 1 || defined(SC92F83Ax) || defined(SC92F73Ax) || defined(SC92F8003) || defined(SC92F740x) || defined(SC92F
-848x) || defined(SC92F748x)\
314 1 || defined(SC92F859x) || defined(SC92F759x) || defined (SC92L853x) || defined (SC92L753x)
315 1 ADCCON &= 0xdf;
316 1 #endif
317 1 #if defined(SC92F742x) || defined(SC92F730x) || defined(SC92F725X) || defined(SC92F735X) || defined(SC92F7
-32X) || defined(SC92F7490) || defined(SC93F833x) || defined(SC93F843x) || defined(SC93F743x)
ADCCON &= 0xef;
#endif
320 1 }
321
322 #if defined(SC93F833x) || defined(SC93F843x) || defined(SC93F743x)
unsigned int ADC_TS_StandardData = 0x8000;
/*****************************************************
*函数名称:void ADC_TSCmd(PriorityStatus NewState)
*函数功能:ADC 温度传感器功能开关函数
*入口参数:
FunctionalState:NewState:功能启动/关闭选择
*出口参数:void
*****************************************************/
void ADC_TSCmd(FunctionalState NewState)
{
if (NewState == DISABLE)
{
TSCFG &= 0X7F;
}
C51 COMPILER V9.59.0.0 SC92F_ADC 01/18/2024 10:03:13 PAGE 7
else
{
TSCFG |= 0X80;
}
}
/*****************************************************
*函数名称:void ADC_CHOPConfig(PriorityStatus NewState)
*函数功能:拉高或者拉低抵消offset的应用控制位
*入口参数:
PriorityStatus:NewState:温度传感器高/低选择
*出口参数:void
*****************************************************/
void ADC_CHOPConfig(PriorityStatus NewState)
{
if (NewState == LOW)
{
TSCFG &= 0XFE;
}
else
{
TSCFG |= 0x01;
}
}
/*****************************************************
*函数名称:void ADC_CHOPConfig(PriorityStatus NewState)
*函数功能:获取出厂时ADC 25度时的转换值
*入口参数:void
*出口参数:void
*****************************************************/
uint16_t ADC_Get_TS_StandardData(void)
{
unsigned int code *IFBAddr = 0x3E;
IAPADE = 0x01; //指针指向 IFB 区
ADC_TS_StandardData = *(IFBAddr);
IAPADE = 0x00; //指针指向 ROM 区
return ADC_TS_StandardData;
}
/*****************************************************
*函数名称:void ADC_GetTSValue(void)
*函数功能:直接获取float类型温度值获取温度时会关闭中断
*入口参数:void
*出口参数:
float:温度值
*****************************************************/
float ADC_GetTSValue(void)
{
unsigned char EADC_Flag = EADC; //获取EA标志位状态
unsigned int ADC_Value1 = 0, ADC_Value2 = 0, ADC_Value = 0;
unsigned int code *IFBAddr = 0x3E;
ADC_Get_TS_StandardData();
disableInterrupts(); //关闭中断
ADC_CHOPConfig(LOW); //拉低抵消offset的应用控制位
ADC_StartConversion(); //开始AD转换
while(!ADC_GetFlagStatus()); //等待转换完成
ADC_ClearFlag(); //清除转换标志位
ADC_Value1 = ADC_GetConversionValue(); //获取第一次AD的转换值
ADC_CHOPConfig(HIGH); //拉高抵消offset的应用控制位
ADC_StartConversion(); //开始AD转换
C51 COMPILER V9.59.0.0 SC92F_ADC 01/18/2024 10:03:13 PAGE 8
while(!ADC_GetFlagStatus()); //等待转换完成
ADC_ClearFlag(); //清除转换标志位
ADC_Value2 = ADC_GetConversionValue(); //获取第二次AD的转换值
ADC_Value = (ADC_Value1 + ADC_Value2) / 2; //获取两次AD采样的平均值
if (EADC_Flag) //还原加入运算前的EA标志位
{
enableInterrupts();
}
return (25 + ((float)ADC_Value - (float)ADC_TS_StandardData) / 8);
}
/*****************************************************
*函数名称:ADC_PGAConfig(ADC_PGACOM_TypeDef ADC_PGACOM,ADC_PGAGAN_TypeDef ADC_PGAGAN,ADC_PGAIPT_TypeDef ADC
-_PGAIPT)
*函数功能:PGA相关配置
*入口参数:
ADC_PGACOM_TypeDef:ADC_PGACOM:PGA共模电压选择
ADC_PGAGAN_TypeDef:ADC_PGAGAN:PGA增益放大倍数
ADC_PGAIPT_TypeDef:ADC_PGAIPT:PGA同相/反相选择
*出口参数:void
*****************************************************/
void ADC_PGAConfig(ADC_PGACOM_TypeDef ADC_PGACOM, ADC_PGAGAN_TypeDef ADC_PGAGAN, ADC_PGAIPT_TypeDef ADC_PG
-AIPT)
{
PGACON &= 0x8F;
PGACON |= (ADC_PGACOM | ADC_PGAGAN | ADC_PGAIPT);
}
/*****************************************************
*函数名称:void ADC_PGACmd(PriorityStatus NewState)
*函数功能:ADC PGA功能开关函数
*入口参数:
FunctionalState:NewState:功能启动/关闭选择
*出口参数:void
*****************************************************/
void ADC_PGACmd(PriorityStatus NewState)
{
if (NewState == LOW)
{
PGACON &= 0XFE;
}
else
{
PGACON |= 0x01;
}
}
#endif
446
447
448 /*****************************************************
449 *函数名称:void ADC_VrefConfig(ADC_Vref_TypeDef ADC_Vref)
450 *函数功能:ADC 参考电压选择
451 *入口参数:
452 ADC_Vref_TypeDef:ADC_Vref:选择ADC参考电压
453 *出口参数:void
454 *****************************************************/
455 void ADC_VrefConfig(ADC_Vref_TypeDef ADC_Vref)
456 {
457 1 OPINX = 0xC2;
458 1 OPREG = OPREG & 0X7F | ADC_Vref;
459 1 }
C51 COMPILER V9.59.0.0 SC92F_ADC 01/18/2024 10:03:13 PAGE 9
460 #endif
461
462 /******************* (C) COPYRIGHT 2021 SinOne Microelectronics *****END OF FILE****/
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 162 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
EDATA SIZE = ---- ----
HDATA SIZE = ---- ----
XDATA CONST SIZE = ---- ----
FAR CONST SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)