/*********************************************************************
* @fn ADC_DataCalib_Rough
*
* @brief 采样数据粗调,获取偏差值,必须先配置ADC后调用此函数获取校准值
*
* @param none
*
* @return 偏差
*/
signed short ADC_DataCalib_Rough(void) // 采样数据粗调,获取偏差值
{
uint16_t i;
uint32_t sum = 0;
uint8_t ch = 0; // 备份通道
uint8_t ctrl = 0; // 备份控制寄存器
ch = R8_ADC_CHANNEL;
ctrl = R8_ADC_CFG;
R8_ADC_CFG = 0;
ADC_ChannelCfg(7); // 6/7/10/11 可选
R8_ADC_CFG |= RB_ADC_OFS_TEST | RB_ADC_POWER_ON | (2 << 4); // 进入测试模式
R8_ADC_CONVERT = RB_ADC_START;
while(R8_ADC_CONVERT & RB_ADC_START);
for(i = 0; i < 16; i++)
{
R8_ADC_CONVERT = RB_ADC_START;
while(R8_ADC_CONVERT & RB_ADC_START);
sum += (~R16_ADC_DATA) & RB_ADC_DATA;
}
sum = (sum + 8) >> 4;
R8_ADC_CFG &= ~RB_ADC_OFS_TEST; // 关闭测试模式
R8_ADC_CHANNEL = ch;
R8_ADC_CFG = ctrl;
return (2048 - sum);
}
以上是SDK包中计算ADC粗调偏差值的函数,不理解最后为什么要用2048去减sum的值。