From 3912d9d82712f0b5c711a73784a2a5bf952f7230 Mon Sep 17 00:00:00 2001
From: Claudio Indellicati <c.indellicati@arduino.cc>
Date: Fri, 27 Mar 2015 20:57:45 +0100
Subject: [PATCH] Loaded ADC calibration values at startup.

---
 cores/arduino/startup.c | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/cores/arduino/startup.c b/cores/arduino/startup.c
index 01171446..ecec7cbd 100644
--- a/cores/arduino/startup.c
+++ b/cores/arduino/startup.c
@@ -343,6 +343,21 @@ void SystemInit( void )
   PM->APBCSEL.reg = PM_APBCSEL_APBCDIV_DIV1_Val ;
 
   SystemCoreClock=VARIANT_MCK ;
+
+  /* ----------------------------------------------------------------------------------------------
+   * 8) Load ADC factory calibration values
+   */
+
+  // ADC Bias Calibration
+  uint32_t bias = (*((uint32_t *) ADC_FUSES_BIASCAL_ADDR) & ADC_FUSES_BIASCAL_Msk) >> ADC_FUSES_BIASCAL_Pos;
+
+  // ADC Linearity bits 4:0
+  uint32_t linearity = (*((uint32_t *) ADC_FUSES_LINEARITY_0_ADDR) & ADC_FUSES_LINEARITY_0_Msk) >> ADC_FUSES_LINEARITY_0_Pos;
+
+  // ADC Linearity bits 7:5
+  linearity |= ((*((uint32_t *) ADC_FUSES_LINEARITY_1_ADDR) & ADC_FUSES_LINEARITY_1_Msk) >> ADC_FUSES_LINEARITY_1_Pos) << 5;
+
+  ADC->CALIB.reg = ADC_CALIB_BIAS_CAL(bias) | ADC_CALIB_LINEARITY_CAL(linearity);
 }
 
 /**
-- 
GitLab