在线时间1 小时
UID1064269
注册时间2007-8-9
NXP金币0
该用户从未签到
新手上路

- 积分
- 25
- 最后登录
- 1970-1-1
|
有以下几个疑问:
1.ADC校准的时候输入信号有要求吗?是输入0V还是VDDA?
2.ADC按手册上说需要4M的频率下进行。这是为了更好的提高精度,原理是什么?
3.ADC校准后的处理函数(PE生成)没有处理CLPD,CLMD,这两个寄存器是做什么用的?
LDD_TError AD2_GetCalibrationResultStatus(LDD_TDeviceData *DeviceDataPtr)
{
uint32_t GainValue;
(void)DeviceDataPtr; /* Parameter is not used, suppress unused argument warning */
if (ADC_PDD_GetCalibrationFailedStatusFlag(ADC1_BASE_PTR)) {
return ERR_FAILED;
}
/* If calibration is successfully passed place calibrated value into gain registers */
/* Cumulated gradually because of undefined behavior: the order of volatile accesses is undefined in this statement */
GainValue = ADC_PDD_GetPlus0CalibrationValue(ADC1_BASE_PTR); /* Find plus gain value */
GainValue += ADC_PDD_GetPlus1CalibrationValue(ADC1_BASE_PTR);
GainValue += ADC_PDD_GetPlus2CalibrationValue(ADC1_BASE_PTR);
GainValue += ADC_PDD_GetPlus3CalibrationValue(ADC1_BASE_PTR);
GainValue += ADC_PDD_GetPlus4CalibrationValue(ADC1_BASE_PTR);
GainValue += ADC_PDD_GetPlusSCalibrationValue(ADC1_BASE_PTR);
GainValue = (GainValue >> 1U) | 0x8000U;
ADC_PDD_SetPlusGainValue(ADC1_BASE_PTR,GainValue); /* Set plus gain value */
GainValue = ADC_PDD_GetMinus0CalibrationValue(ADC1_BASE_PTR); /* Find minus gain value */
GainValue += ADC_PDD_GetMinus1CalibrationValue(ADC1_BASE_PTR);
GainValue += ADC_PDD_GetMinus2CalibrationValue(ADC1_BASE_PTR);
GainValue += ADC_PDD_GetMinus3CalibrationValue(ADC1_BASE_PTR);
GainValue += ADC_PDD_GetMinus4CalibrationValue(ADC1_BASE_PTR);
GainValue += ADC_PDD_GetMinusSCalibrationValue(ADC1_BASE_PTR);
GainValue = (GainValue >> 1U) | 0x8000U;
ADC_PDD_SetMinusGainValue(ADC1_BASE_PTR,GainValue); /* Set minus gain value */
return ERR_OK;
}
4.有文章写到如果把校准参数保存到FLASH中可以在重启后直接使用保存到FLASH中的参数。这些参数都需要保存那几个寄存器呢?
CLP0,CLP1,CLP2,CLP3,CLP4,CLPD,CLPS等等都需要保存吗?
5.ADC校准中的几个寄存器(CLP0,CLP1,CLP2,CLP3,CLP4,CLPD,CLPS等等)是怎样参加ADC后续采集运算的有公式吗?
6.从PE生成的函数看校准是自动完成的,而且ADCx_PG,ADCx_MG数据生成方式都是一定的为什么不是自动生成,而是要用户程序计算一遍,这样做有什么好处吗?
本人初学这个处理器,谢谢各位解答!
|
|