From df1262a92a48e804d0ec416478125a3bf1ad35aa Mon Sep 17 00:00:00 2001
From: Thibaut VIARD <thibaut.viard@atmel.com>
Date: Thu, 11 Sep 2014 14:56:36 +0200
Subject: [PATCH]  CORE files update following headers update

Signed-off-by: Thibaut VIARD <thibaut.viard@atmel.com>
---
 cores/arduino/WVariant.h          |  4 ----
 cores/arduino/startup.c           |  2 +-
 cores/arduino/wiring_analog.c     | 40 +++++++++++++++++++++++++++----
 variants/arduino_zero/variant.cpp | 21 +++++++++-------
 4 files changed, 48 insertions(+), 19 deletions(-)

diff --git a/cores/arduino/WVariant.h b/cores/arduino/WVariant.h
index 1b3de932..a1156fc3 100644
--- a/cores/arduino/WVariant.h
+++ b/cores/arduino/WVariant.h
@@ -64,8 +64,6 @@ typedef enum _ETCChannel
   TCC2_CH1 = (2<<8)|(1),
   TC3_CH0  = (3<<8)|(0),
   TC3_CH1  = (3<<8)|(1),
-  TC7_CH0  = (7<<8)|(0),
-  TC7_CH1  = (7<<8)|(1)
 } ETCChannel ;
 
 extern const void* g_apTCInstances[TCC_INST_NUM+TC_INST_NUM] ;
@@ -92,8 +90,6 @@ typedef enum _EPWMChannel
   PWM2_CH1=TCC2_CH1,
   PWM3_CH0=TC3_CH0,
   PWM3_CH1=TC3_CH1,
-  PWM7_CH0=TC7_CH0,
-  PWM7_CH1=TC7_CH1
 } EPWMChannel ;
 
 typedef enum _EPortType
diff --git a/cores/arduino/startup.c b/cores/arduino/startup.c
index c54a2cd2..82e687fd 100644
--- a/cores/arduino/startup.c
+++ b/cores/arduino/startup.c
@@ -315,7 +315,7 @@ void SystemInit( void )
   /* ----------------------------------------------------------------------------------------------
    * 6) Modify PRESCaler value of OSC8M to have 8MHz
    */
-  SYSCTRL->OSC8M.bit.PRESC = SYSCTRL_OSC8M_PRESC_0_Val ;
+  SYSCTRL->OSC8M.bit.PRESC = SYSCTRL_OSC8M_PRESC_1_Val ;
   SYSCTRL->OSC8M.bit.ONDEMAND = 0 ;
 
   /* ----------------------------------------------------------------------------------------------
diff --git a/cores/arduino/wiring_analog.c b/cores/arduino/wiring_analog.c
index ba6a74d3..2ef6630e 100644
--- a/cores/arduino/wiring_analog.c
+++ b/cores/arduino/wiring_analog.c
@@ -23,12 +23,41 @@
 extern "C" {
 #endif
 
-void analogReference( eAnalogReference ulMode )
+static int _readResolution = 10;
+static int _writeResolution = 8;
+
+void analogReadResolution( int res )
+{
+	_readResolution = res ;
+}
+
+void analogWriteResolution( int res )
 {
+	_writeResolution = res ;
+}
 
-  // ATTENTION : On this board the default is note 5volts or 3.3volts BUT 1volt
+static inline uint32_t mapResolution( uint32_t value, uint32_t from, uint32_t to )
+{
+	if ( from == to )
+  {
+		return value ;
+  }
 
-  switch(ulMode)
+	if ( from > to )
+  {
+		return value >> (from-to) ;
+  }
+	else
+  {
+		return value << (to-from) ;
+  }
+}
+
+void analogReference( eAnalogReference ulMode )
+{
+  // ATTENTION : On this board the default is not 5volts or 3.3volts BUT 1volt
+
+  switch ( ulMode )
   {
     case AR_DEFAULT:
     case AR_INTERNAL:
@@ -41,6 +70,7 @@ void analogReference( eAnalogReference ulMode )
       break;
   }
 }
+
 uint32_t analogRead( uint32_t ulPin )
 {
   uint32_t valueRead = 0;
@@ -105,7 +135,7 @@ void analogWrite( uint32_t ulPin, uint32_t ulValue )
     }
 
     Channelx = GetTCChannelNumber( g_APinDescription[ulPin].ulPWMChannel ) ;
-    if ( GetTCChannelNumber( g_APinDescription[ulPin].ulPWMChannel ) >= TCC_INST_NUM )
+    if ( GetTCNumber( g_APinDescription[ulPin].ulPWMChannel ) >= TCC_INST_NUM )
     {
       isTC = 1 ;
       TCx = (Tc*) GetTC( g_APinDescription[ulPin].ulPWMChannel ) ;
@@ -199,7 +229,7 @@ void analogWrite( uint32_t ulPin, uint32_t ulValue )
   // -- Defaults to digital write
   pinMode( ulPin, OUTPUT ) ;
 
-  //ulValue = mapResolution(ulValue, _writeResolution, 8);
+  ulValue = mapResolution(ulValue, _writeResolution, 8);
 
   if ( ulValue < 128 )
   {
diff --git a/variants/arduino_zero/variant.cpp b/variants/arduino_zero/variant.cpp
index 5a0a9c6c..e17c8b4f 100644
--- a/variants/arduino_zero/variant.cpp
+++ b/variants/arduino_zero/variant.cpp
@@ -26,10 +26,10 @@
  * | 1          | 1 <- TX          |  PA11  |                 | EIC/EXTINT[11] ADC/AIN[19] PTC/X[3] *SERCOM0/PAD[3] SERCOM2/PAD[3] TCC1/WO[1] TCC0/WO[3]
  * | 2          | ~2               |  PA08  |                 | EIC/NMI ADC/AIN[16] PTC/X[0] SERCOM0/PAD[0] SERCOM2/PAD[0] *TCC0/WO[0] TCC1/WO[2]
  * | 3          | ~3               |  PA09  |                 | EIC/EXTINT[9] ADC/AIN[17] PTC/X[1] SERCOM0/PAD[1] SERCOM2/PAD[1] *TCC0/WO[1] TCC1/WO[3]
- * | 4          | ~4               |  PA14  |                 | EIC/EXTINT[14] SERCOM2/PAD[2] SERCOM4/PAD[2] TC3/WO[0] *TCC0/WO[4]
- * | 5          | ~5               |  PA15  |                 | EIC/EXTINT[15] SERCOM2/PAD[3] SERCOM4/PAD[3] TC3/WO[1] *TCC0/WO[5]
- * | 6          | ~6               |  PA20  |                 | EIC/EXTINT[4] PTC/X[8] SERCOM5/PAD[2] SERCOM3/PAD[2] *TC7/WO[0] TCC0/WO[6]
- * | 7          | ~7               |  PA21  |                 | EIC/EXTINT[5] PTC/X[9] SERCOM5/PAD[3] SERCOM3/PAD[3] *TC7/WO[1] TCC0/WO[7]
+ * | 4          | ~4               |  PA14  |                 | EIC/EXTINT[14] SERCOM2/PAD[2] SERCOM4/PAD[2] *TC3/WO[0] TCC0/WO[4]
+ * | 5          | ~5               |  PA15  |                 | EIC/EXTINT[15] SERCOM2/PAD[3] SERCOM4/PAD[3] *TC3/WO[1] TCC0/WO[5]
+ * | 6          | ~6               |  PA20  |                 | EIC/EXTINT[4] PTC/X[8] SERCOM5/PAD[2] SERCOM3/PAD[2] *TCC0/WO[6]
+ * | 7          | ~7               |  PA21  |                 | EIC/EXTINT[5] PTC/X[9] SERCOM5/PAD[3] SERCOM3/PAD[3] *TCC0/WO[7]
  * +------------+------------------+--------+-----------------+------------------------------
  * |            | Digital High     |        |                 |
  * +------------+------------------+--------+-----------------+------------------------------
@@ -66,7 +66,7 @@
  * | 26         | A2               |  PB09  |                 | EIC/EXTINT[9] *ADC/AIN[3] PTC/Y[15] SERCOM4/PAD[1] TC4/WO[1]
  * | 27         | A3               |  PA04  |                 | EIC/EXTINT[4] *ADC/AIN[4] AC/AIN[0] PTC/Y[2] SERCOM0/PAD[0] TCC0/WO[0]
  * | 28         | A4               |  PA05  |                 | EIC/EXTINT[5] *ADC/AIN[5] AC/AIN[1] PTC/Y[5] SERCOM0/PAD[1] TCC0/WO[1]
- * | 29         | A5               |  PB02  |                 | EIC/EXTINT[2] *ADC/AIN[10] PTC/Y[8] SERCOM5/PAD[0] TC6/WO[0]
+ * | 29         | A5               |  PB02  |                 | EIC/EXTINT[2] *ADC/AIN[10] PTC/Y[8] SERCOM5/PAD[0]
  * +------------+------------------+--------+-----------------+------------------------------
  * |            | LEDs             |        |                 |
  * +------------+------------------+--------+-----------------+------------------------------
@@ -118,12 +118,15 @@ const PinDescription g_APinDescription[]=
   { PORTA, 11, PIO_SERCOM, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM|PIN_ATTR_TIMER), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_11 }, // TX: SERCOM0/PAD[3]
 
   // 2..12
+  // Digital Low
   { PORTA,  8, PIO_TIMER, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM|PIN_ATTR_TIMER), No_ADC_Channel, PWM0_CH0, TCC0_CH0, EXTERNAL_INT_NMI }, // TCC0/WO[0]
   { PORTA,  9, PIO_TIMER, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM|PIN_ATTR_TIMER), No_ADC_Channel, PWM0_CH1, TCC0_CH1, EXTERNAL_INT_9 }, // TCC0/WO[1]
-  { PORTA, 14, PIO_TIMER_ALT, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM|PIN_ATTR_TIMER), No_ADC_Channel, PWM0_CH4, TCC0_CH4, EXTERNAL_INT_14 }, // TCC0/WO[4]
-  { PORTA, 15, PIO_TIMER_ALT, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM|PIN_ATTR_TIMER), No_ADC_Channel, PWM0_CH5, TCC0_CH5, EXTERNAL_INT_15 }, // TCC0/WO[5]
-  { PORTA, 20, PIO_TIMER, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM|PIN_ATTR_TIMER), No_ADC_Channel, PWM7_CH0, TC7_CH0, EXTERNAL_INT_4 }, // TC7/WO[0]
-  { PORTA, 21, PIO_TIMER, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM|PIN_ATTR_TIMER), No_ADC_Channel, PWM7_CH1, TC7_CH1, EXTERNAL_INT_5 }, // TC7/WO[1]
+  { PORTA, 14, PIO_TIMER, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM|PIN_ATTR_TIMER), No_ADC_Channel, PWM3_CH0, TC3_CH0, EXTERNAL_INT_14 }, // TC3/WO[0]
+  { PORTA, 15, PIO_TIMER, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM|PIN_ATTR_TIMER), No_ADC_Channel, PWM3_CH1, TC3_CH1, EXTERNAL_INT_15 }, // TC3/WO[1]
+  { PORTA, 20, PIO_TIMER, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM|PIN_ATTR_TIMER), No_ADC_Channel, PWM0_CH6, TCC0_CH6, EXTERNAL_INT_4 }, // TC7/WO[0]
+  { PORTA, 21, PIO_TIMER, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM|PIN_ATTR_TIMER), No_ADC_Channel, PWM0_CH7, TCC0_CH7, EXTERNAL_INT_5 }, // TC7/WO[1]
+
+  // Digital High
   { PORTA,  6, PIO_TIMER_ALT, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM|PIN_ATTR_TIMER), No_ADC_Channel, PWM1_CH0, TCC1_CH0, EXTERNAL_INT_4 }, // TCC1/WO[0]
   { PORTA,  7, PIO_TIMER_ALT, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM|PIN_ATTR_TIMER), No_ADC_Channel, PWM1_CH1, TCC1_CH1, EXTERNAL_INT_5 }, // TCC1/WO[1]
   { PORTA, 18, PIO_TIMER_ALT, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM|PIN_ATTR_TIMER), No_ADC_Channel, PWM0_CH2, TCC0_CH2, EXTERNAL_INT_2 }, // TCC0/WO[2]
-- 
GitLab