diff --git a/cores/arduino/wiring_analog.c b/cores/arduino/wiring_analog.c new file mode 100644 index 0000000000000000000000000000000000000000..a54e428b365bf81290d377a912114c0018913b66 --- /dev/null +++ b/cores/arduino/wiring_analog.c @@ -0,0 +1,435 @@ +/* + Copyright (c) 2011 Arduino. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "Arduino.h" + +#ifdef __cplusplus +extern "C" { +#endif + +// static int _readResolution = 10; +// static int _writeResolution = 8; + +// void analogReadResolution(int res) { + // _readResolution = res; +// } + +// void analogWriteResolution(int res) { + // _writeResolution = res; +// } + +// static inline uint32_t mapResolution(uint32_t value, uint32_t from, uint32_t to) { + // if (from == to) + // return value; + // if (from > to) + // return value >> (from-to); + // else + // return value << (to-from); +// } + +// eAnalogReference analog_reference = AR_DEFAULT; + +// void analogReference(eAnalogReference ulMode) +// { + // analog_reference = ulMode; +// } + +// uint32_t analogRead(uint32_t ulPin) +// { + // uint32_t ulValue = 0; + // uint32_t ulChannel; + + // if (ulPin < A0) + // ulPin += A0; + + // ulChannel = g_APinDescription[ulPin].ulADCChannelNumber ; + +// #if defined __SAM3U4E__ + // switch ( g_APinDescription[ulPin].ulAnalogChannel ) + // { + // // Handling ADC 10 bits channels + // case ADC0 : + // case ADC1 : + // case ADC2 : + // case ADC3 : + // case ADC4 : + // case ADC5 : + // case ADC6 : + // case ADC7 : + // // Enable the corresponding channel + // adc_enable_channel( ADC, ulChannel ); + + // // Start the ADC + // adc_start( ADC ); + + // // Wait for end of conversion + // while ((adc_get_status(ADC) & ADC_SR_DRDY) != ADC_SR_DRDY) + // ; + + // // Read the value + // ulValue = adc_get_latest_value(ADC); + // ulValue = mapResolution(ulValue, 10, _readResolution); + + // // Disable the corresponding channel + // adc_disable_channel( ADC, ulChannel ); + + // // Stop the ADC + // // adc_stop( ADC ) ; // never do adc_stop() else we have to reconfigure the ADC each time + // break; + + // // Handling ADC 12 bits channels + // case ADC8 : + // case ADC9 : + // case ADC10 : + // case ADC11 : + // case ADC12 : + // case ADC13 : + // case ADC14 : + // case ADC15 : + // // Enable the corresponding channel + // adc12b_enable_channel( ADC12B, ulChannel ); + + // // Start the ADC12B + // adc12b_start( ADC12B ); + + // // Wait for end of conversion + // while ((adc12b_get_status(ADC12B) & ADC12B_SR_DRDY) != ADC12B_SR_DRDY) + // ; + + // // Read the value + // ulValue = adc12b_get_latest_value(ADC12B) >> 2; + // ulValue = mapResolution(ulValue, 12, _readResolution); + + // // Stop the ADC12B + // // adc12_stop( ADC12B ) ; // never do adc12_stop() else we have to reconfigure the ADC12B each time + + // // Disable the corresponding channel + // adc12b_disable_channel( ADC12B, ulChannel ); + // break; + + // // Compiler could yell because we don't handle DAC pins + // default : + // ulValue=0; + // break; + // } +// #endif + +// #if defined __SAM3X8E__ || defined __SAM3X8H__ + // static uint32_t latestSelectedChannel = -1; + // switch ( g_APinDescription[ulPin].ulAnalogChannel ) + // { + // // Handling ADC 12 bits channels + // case ADC0 : + // case ADC1 : + // case ADC2 : + // case ADC3 : + // case ADC4 : + // case ADC5 : + // case ADC6 : + // case ADC7 : + // case ADC8 : + // case ADC9 : + // case ADC10 : + // case ADC11 : + + // // Enable the corresponding channel + // if (ulChannel != latestSelectedChannel) { + // adc_enable_channel( ADC, ulChannel ); + // if ( latestSelectedChannel != -1 ) + // adc_disable_channel( ADC, latestSelectedChannel ); + // latestSelectedChannel = ulChannel; + // } + + // // Start the ADC + // adc_start( ADC ); + + // // Wait for end of conversion + // while ((adc_get_status(ADC) & ADC_ISR_DRDY) != ADC_ISR_DRDY) + // ; + + // // Read the value + // ulValue = adc_get_latest_value(ADC); + // ulValue = mapResolution(ulValue, ADC_RESOLUTION, _readResolution); + + // break; + + // // Compiler could yell because we don't handle DAC pins + // default : + // ulValue=0; + // break; + // } +// #endif + + // return ulValue; +// } + + +// Right now, PWM output only works on the pins with +// hardware support. These are defined in the appropriate +// pins_*.c file. For the rest of the pins, we default +// to digital output. + +void analogWrite(uint32_t ulPin, uint32_t ulValue) { + + uint32_t attr = g_APinDescription[ulPin].ulPinAttribute; + uint32_t pwm_name = g_APinDescription[ulPin].ulTCChannel; + uint8_t isTC = 0; + uint8_t Channelx; + Tc* TCx; + Tcc* TCCx; + + // if ((attr & PIN_ATTR_ANALOG) == PIN_ATTR_ANALOG) { + // EAnalogChannel channel = g_APinDescription[ulPin].ulADCChannelNumber; + // if (channel == DA0 || channel == DA1) { + // uint32_t chDACC = ((channel == DA0) ? 0 : 1); + // if (dacc_get_channel_status(DACC_INTERFACE) == 0) { + // /* Enable clock for DACC_INTERFACE */ + // pmc_enable_periph_clk(DACC_INTERFACE_ID); + + // /* Reset DACC registers */ + // dacc_reset(DACC_INTERFACE); + + // /* Half word transfer mode */ + // dacc_set_transfer_mode(DACC_INTERFACE, 0); + + // /* Power save: + // * sleep mode - 0 (disabled) + // * fast wakeup - 0 (disabled) + // */ + // dacc_set_power_save(DACC_INTERFACE, 0, 0); + // /* Timing: + // * refresh - 0x08 (1024*8 dacc clocks) + // * max speed mode - 0 (disabled) + // * startup time - 0x10 (1024 dacc clocks) + // */ + // dacc_set_timing(DACC_INTERFACE, 0x08, 0, 0x10); + + // /* Set up analog current */ + // dacc_set_analog_control(DACC_INTERFACE, DACC_ACR_IBCTLCH0(0x02) | + // DACC_ACR_IBCTLCH1(0x02) | + // DACC_ACR_IBCTLDACCORE(0x01)); + // } + + // /* Disable TAG and select output channel chDACC */ + // dacc_set_channel_selection(DACC_INTERFACE, chDACC); + + // if ((dacc_get_channel_status(DACC_INTERFACE) & (1 << chDACC)) == 0) { + // dacc_enable_channel(DACC_INTERFACE, chDACC); + // } + + // // Write user value + // ulValue = mapResolution(ulValue, _writeResolution, DACC_RESOLUTION); + // dacc_write_conversion_data(DACC_INTERFACE, ulValue); + // while ((dacc_get_interrupt_status(DACC_INTERFACE) & DACC_ISR_EOC) == 0); + // return; + // } + // } + + if ((attr & PIN_ATTR_PWM) == PIN_ATTR_PWM) { + + if (g_APinDescription[ulPin].ulPinType == PIO_TIMER) + { + // Set selected Pin as TC/TCC Waveform out (PMUX : E ) + if(g_APinDescription[ulPin].ulPin <= 15) + { + PORT->Group[g_APinDescription[ulPin].ulPort].WRCONFIG.reg = (uint32_t)(PORT_WRCONFIG_WRPINCFG |PORT_WRCONFIG_WRPMUX| 1 << (g_APinDescription[ulPin].ulPin)|(PORT_WRCONFIG_PMUXEN)|(0x4 << PORT_WRCONFIG_PMUX_Pos) ); + } else { + PORT->Group[g_APinDescription[ulPin].ulPort].WRCONFIG.reg = (uint32_t)(PORT_WRCONFIG_WRPINCFG | PORT_WRCONFIG_WRPMUX| PORT_WRCONFIG_HWSEL| 1 << (g_APinDescription[ulPin].ulPin - 16)|(PORT_WRCONFIG_PMUXEN)|(0x4 << PORT_WRCONFIG_PMUX_Pos) ); + } + } + + if (g_APinDescription[ulPin].ulPinType == PIO_TIMER_ALT) + { + // Set selected Pin as TC/TCC Waveform out (PMUX : F ) + if(g_APinDescription[ulPin].ulPin <= 15) + { + PORT->Group[g_APinDescription[ulPin].ulPort].WRCONFIG.reg = (uint32_t)(PORT_WRCONFIG_WRPINCFG |PORT_WRCONFIG_WRPMUX| 1 << (g_APinDescription[ulPin].ulPin)|(PORT_WRCONFIG_PMUXEN)|(0x5 << PORT_WRCONFIG_PMUX_Pos) ); + } else { + PORT->Group[g_APinDescription[ulPin].ulPort].WRCONFIG.reg = (uint32_t)(PORT_WRCONFIG_WRPINCFG | PORT_WRCONFIG_WRPMUX| PORT_WRCONFIG_HWSEL| 1 << (g_APinDescription[ulPin].ulPin - 16)|(PORT_WRCONFIG_PMUXEN)|(0x5 << PORT_WRCONFIG_PMUX_Pos) ); + } + } + + + switch (g_APinDescription[ulPin].ulPWMChannel) + { + case PWM3_CH0 : + TCx = TC3; + Channelx = 0; + isTC = 1; + break; + + case PWM3_CH1: + TCx = TC3 ; + Channelx = 1; + isTC = 1; + break; + + case PWM0_CH0 : + TCCx = TCC0; + Channelx = 0; + break; + + case PWM0_CH1 : + TCCx = TCC0; + Channelx = 1; + break; + + case PWM0_CH4 : + TCCx = TCC0; + //Channelx = 4; + Channelx = 0; + break; + + case PWM0_CH5 : + TCCx = TCC0; + //Channelx = 5; + Channelx = 1; + break; + + case PWM0_CH6 : + TCCx = TCC0; + //Channelx = 6; + Channelx = 2; + break; + + case PWM0_CH7 : + TCCx = TCC0; + //Channelx = 7; + Channelx = 3; + break; + + case PWM1_CH0 : + TCCx = TCC1; + Channelx = 0; + break; + + case PWM1_CH1 : + TCCx = TCC1; + Channelx = 1; + break; + + case PWM2_CH0 : + TCCx = TCC2; + Channelx = 0; + break; + + case PWM2_CH1 : + TCCx = TCC2; + Channelx = 1; + break; + } + + // --Set PORT + + if (isTC) + { + // -- Enable clocks according to TCCx instance to use + switch ((uint32_t) TCx) + { + case (uint32_t) TC3 : + //Enable TCx Bus clock (Timer counter control clock) + PM->APBCMASK.reg |= PM_APBCMASK_TC3; + //Enable GCLK for TC3 (timer counter input clock) + GCLK->CLKCTRL.reg = (uint16_t) ((GCLK_CLKCTRL_CLKEN | GCLK_CLKCTRL_GEN_GCLK0 | ( 0x1B << GCLK_CLKCTRL_ID_Pos))); + break; + + case (uint32_t) TC4 : + //Enable TCx Bus clock (Timer counter control clock) + PM->APBCMASK.reg |= PM_APBCMASK_TC4; + //Enable GCLK for TC4 (timer counter input clock) + GCLK->CLKCTRL.reg = (uint16_t) ((GCLK_CLKCTRL_CLKEN | GCLK_CLKCTRL_GEN_GCLK0 | ( 0x1C << GCLK_CLKCTRL_ID_Pos))); + break; + + case (uint32_t) TC5 : + //Enable TCx Bus clock (Timer counter control clock) + PM->APBCMASK.reg |= PM_APBCMASK_TC5; + //Enable GCLK for TC5 (timer counter input clock) + GCLK->CLKCTRL.reg = (uint16_t) ((GCLK_CLKCTRL_CLKEN | GCLK_CLKCTRL_GEN_GCLK0 | ( 0x1C << GCLK_CLKCTRL_ID_Pos))); + break; + + } + + // -- Configure TC + //DISABLE TCx + TCx->COUNT8.CTRLA.reg &=~(TC_CTRLA_ENABLE); + //Set Timer counter Mode to 8 bits + TCx->COUNT8.CTRLA.reg |= TC_CTRLA_MODE_COUNT8; + //Set TCx as normal PWM + TCx->COUNT8.CTRLA.reg |= TC_CTRLA_WAVEGEN_NPWM; + //Set TCx in waveform mode Normal PWM + TCx->COUNT8.CC[Channelx].reg = (uint8_t) ulValue; + //Set PER to maximum counter value (resolution : 0xFF) + TCx->COUNT8.PER.reg = 0xFF; + // Enable TCx + TCx->COUNT8.CTRLA.reg |= TC_CTRLA_ENABLE; + + } else { + + // -- Enable clocks according to TCCx instance to use + switch ((uint32_t) TCCx) + { + case (uint32_t) TCC0 : + //Enable TCC0 Bus clock (Timer counter control clock) + PM->APBCMASK.reg |= PM_APBCMASK_TCC0; + //Enable GCLK for TCC0 (timer counter input clock) + GCLK->CLKCTRL.reg = (uint16_t) ((GCLK_CLKCTRL_CLKEN | GCLK_CLKCTRL_GEN_GCLK0 | ( 0x1A << GCLK_CLKCTRL_ID_Pos))); + break; + + case (uint32_t) TCC1 : + //Enable TCC1 Bus clock (Timer counter control clock) + PM->APBCMASK.reg |= PM_APBCMASK_TCC1; + //Enable GCLK for TCC1 (timer counter input clock) + GCLK->CLKCTRL.reg = (uint16_t) ((GCLK_CLKCTRL_CLKEN | GCLK_CLKCTRL_GEN_GCLK0 | ( 0x1A << GCLK_CLKCTRL_ID_Pos))); + break; + + case (uint32_t) TCC2 : + //Enable TCC2 Bus clock (Timer counter control clock) + PM->APBCMASK.reg |= PM_APBCMASK_TCC2; + //Enable GCLK for TCC2 (timer counter input clock) + GCLK->CLKCTRL.reg = (uint16_t) ((GCLK_CLKCTRL_CLKEN | GCLK_CLKCTRL_GEN_GCLK0 | ( 0x1B << GCLK_CLKCTRL_ID_Pos))); + break; + } + + // -- Configure TCC + + //DISABLE TCCx + TCCx->CTRLA.reg &=~(TCC_CTRLA_ENABLE); + //Set TCx as normal PWM + TCCx->WAVE.reg |= TCC_WAVE_WAVEGEN_NPWM; + //Set TCx in waveform mode Normal PWM + TCCx->CC[Channelx].reg = (uint32_t)ulValue; + //Set PER to maximum counter value (resolution : 0xFF) + TCCx->PER.reg = 0xFF; + //ENABLE TCCx + TCCx->CTRLA.reg |= TCC_CTRLA_ENABLE ; + } + return; + } + + // -- Defaults to digital write + pinMode(ulPin, OUTPUT); + //ulValue = mapResolution(ulValue, _writeResolution, 8); + if (ulValue < 128) + digitalWrite(ulPin, LOW); + else + digitalWrite(ulPin, HIGH); +} + +#ifdef __cplusplus +} +#endif diff --git a/cores/arduino/wiring_analog.c.disabled b/cores/arduino/wiring_analog.c.disabled deleted file mode 100644 index bdc7de8788a32866ba84d3e5163ee9bd33951d43..0000000000000000000000000000000000000000 --- a/cores/arduino/wiring_analog.c.disabled +++ /dev/null @@ -1,286 +0,0 @@ -/* - Copyright (c) 2011 Arduino. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include "Arduino.h" - -#ifdef __cplusplus -extern "C" { -#endif - -static int _readResolution = 10; -static int _writeResolution = 8; - -void analogReadResolution(int res) { - _readResolution = res; -} - -void analogWriteResolution(int res) { - _writeResolution = res; -} - -static inline uint32_t mapResolution(uint32_t value, uint32_t from, uint32_t to) { - if (from == to) - return value; - if (from > to) - return value >> (from-to); - else - return value << (to-from); -} - -eAnalogReference analog_reference = AR_DEFAULT; - -void analogReference(eAnalogReference ulMode) -{ - analog_reference = ulMode; -} - -uint32_t analogRead(uint32_t ulPin) -{ - uint32_t ulValue = 0; - uint32_t ulChannel; - - if (ulPin < A0) - ulPin += A0; - - ulChannel = g_APinDescription[ulPin].ulADCChannelNumber ; - -#if defined __SAM3X8E__ || defined __SAM3X8H__ - static uint32_t latestSelectedChannel = -1; - switch ( g_APinDescription[ulPin].ulAnalogChannel ) - { - // Handling ADC 12 bits channels - case ADC0 : - case ADC1 : - case ADC2 : - case ADC3 : - case ADC4 : - case ADC5 : - case ADC6 : - case ADC7 : - case ADC8 : - case ADC9 : - case ADC10 : - case ADC11 : - - // Enable the corresponding channel - if (ulChannel != latestSelectedChannel) { - adc_enable_channel( ADC, ulChannel ); - if ( latestSelectedChannel != -1 ) - adc_disable_channel( ADC, latestSelectedChannel ); - latestSelectedChannel = ulChannel; - } - - // Start the ADC - adc_start( ADC ); - - // Wait for end of conversion - while ((adc_get_status(ADC) & ADC_ISR_DRDY) != ADC_ISR_DRDY) - ; - - // Read the value - ulValue = adc_get_latest_value(ADC); - ulValue = mapResolution(ulValue, ADC_RESOLUTION, _readResolution); - - break; - - // Compiler could yell because we don't handle DAC pins - default : - ulValue=0; - break; - } -#endif - - return ulValue; -} - -static void TC_SetCMR_ChannelA(Tc *tc, uint32_t chan, uint32_t v) -{ - tc->TC_CHANNEL[chan].TC_CMR = (tc->TC_CHANNEL[chan].TC_CMR & 0xFFF0FFFF) | v; -} - -static void TC_SetCMR_ChannelB(Tc *tc, uint32_t chan, uint32_t v) -{ - tc->TC_CHANNEL[chan].TC_CMR = (tc->TC_CHANNEL[chan].TC_CMR & 0xF0FFFFFF) | v; -} - -static uint8_t PWMEnabled = 0; -static uint8_t pinEnabled[PINS_COUNT]; -static uint8_t TCChanEnabled[] = {0, 0, 0, 0, 0, 0, 0, 0, 0}; - -void analogOutputInit(void) { - uint8_t i; - for (i=0; i<PINS_COUNT; i++) - pinEnabled[i] = 0; -} - -// Right now, PWM output only works on the pins with -// hardware support. These are defined in the appropriate -// pins_*.c file. For the rest of the pins, we default -// to digital output. -void analogWrite(uint32_t ulPin, uint32_t ulValue) { - uint32_t attr = g_APinDescription[ulPin].ulPinAttribute; - - if ((attr & PIN_ATTR_ANALOG) == PIN_ATTR_ANALOG) { - EAnalogChannel channel = g_APinDescription[ulPin].ulADCChannelNumber; - if (channel == DA0 || channel == DA1) { - uint32_t chDACC = ((channel == DA0) ? 0 : 1); - if (dacc_get_channel_status(DACC_INTERFACE) == 0) { - /* Enable clock for DACC_INTERFACE */ - pmc_enable_periph_clk(DACC_INTERFACE_ID); - - /* Reset DACC registers */ - dacc_reset(DACC_INTERFACE); - - /* Half word transfer mode */ - dacc_set_transfer_mode(DACC_INTERFACE, 0); - - /* Power save: - * sleep mode - 0 (disabled) - * fast wakeup - 0 (disabled) - */ - dacc_set_power_save(DACC_INTERFACE, 0, 0); - /* Timing: - * refresh - 0x08 (1024*8 dacc clocks) - * max speed mode - 0 (disabled) - * startup time - 0x10 (1024 dacc clocks) - */ - dacc_set_timing(DACC_INTERFACE, 0x08, 0, 0x10); - - /* Set up analog current */ - dacc_set_analog_control(DACC_INTERFACE, DACC_ACR_IBCTLCH0(0x02) | - DACC_ACR_IBCTLCH1(0x02) | - DACC_ACR_IBCTLDACCORE(0x01)); - } - - /* Disable TAG and select output channel chDACC */ - dacc_set_channel_selection(DACC_INTERFACE, chDACC); - - if ((dacc_get_channel_status(DACC_INTERFACE) & (1 << chDACC)) == 0) { - dacc_enable_channel(DACC_INTERFACE, chDACC); - } - - // Write user value - ulValue = mapResolution(ulValue, _writeResolution, DACC_RESOLUTION); - dacc_write_conversion_data(DACC_INTERFACE, ulValue); - while ((dacc_get_interrupt_status(DACC_INTERFACE) & DACC_ISR_EOC) == 0); - return; - } - } - - if ((attr & PIN_ATTR_PWM) == PIN_ATTR_PWM) { - ulValue = mapResolution(ulValue, _writeResolution, PWM_RESOLUTION); - - if (!PWMEnabled) { - // PWM Startup code - pmc_enable_periph_clk(PWM_INTERFACE_ID); - PWMC_ConfigureClocks(PWM_FREQUENCY * PWM_MAX_DUTY_CYCLE, 0, VARIANT_MCK); - PWMEnabled = 1; - } - - uint32_t chan = g_APinDescription[ulPin].ulPWMChannel; - if (!pinEnabled[ulPin]) { - // Setup PWM for this pin - PIO_Configure(g_APinDescription[ulPin].pPort, - g_APinDescription[ulPin].ulPinType, - g_APinDescription[ulPin].ulPin, - g_APinDescription[ulPin].ulPinConfiguration); - PWMC_ConfigureChannel(PWM_INTERFACE, chan, PWM_CMR_CPRE_CLKA, 0, 0); - PWMC_SetPeriod(PWM_INTERFACE, chan, PWM_MAX_DUTY_CYCLE); - PWMC_SetDutyCycle(PWM_INTERFACE, chan, ulValue); - PWMC_EnableChannel(PWM_INTERFACE, chan); - pinEnabled[ulPin] = 1; - } - - PWMC_SetDutyCycle(PWM_INTERFACE, chan, ulValue); - return; - } - - if ((attr & PIN_ATTR_TIMER) == PIN_ATTR_TIMER) { - // We use MCLK/2 as clock. - const uint32_t TC = VARIANT_MCK / 2 / TC_FREQUENCY; - - // Map value to Timer ranges 0..255 => 0..TC - ulValue = mapResolution(ulValue, _writeResolution, TC_RESOLUTION); - ulValue = ulValue * TC; - ulValue = ulValue / TC_MAX_DUTY_CYCLE; - - // Setup Timer for this pin - ETCChannel channel = g_APinDescription[ulPin].ulTCChannel; - static const uint32_t channelToChNo[] = { 0, 0, 1, 1, 2, 2, 0, 0, 1, 1, 2, 2, 0, 0, 1, 1, 2, 2 }; - static const uint32_t channelToAB[] = { 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0 }; - static const Tc *channelToTC[] = { - TC0, TC0, TC0, TC0, TC0, TC0, - TC1, TC1, TC1, TC1, TC1, TC1, - TC2, TC2, TC2, TC2, TC2, TC2 }; - static const uint32_t channelToId[] = { 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8 }; - uint32_t chNo = channelToChNo[channel]; - uint32_t chA = channelToAB[channel]; - Tc *chTC = channelToTC[channel]; - uint32_t interfaceID = channelToId[channel]; - - if (!TCChanEnabled[interfaceID]) { - pmc_enable_periph_clk(TC_INTERFACE_ID + interfaceID); - TC_Configure(chTC, chNo, - TC_CMR_TCCLKS_TIMER_CLOCK1 | - TC_CMR_WAVE | // Waveform mode - TC_CMR_WAVSEL_UP_RC | // Counter running up and reset when equals to RC - TC_CMR_EEVT_XC0 | // Set external events from XC0 (this setup TIOB as output) - TC_CMR_ACPA_CLEAR | TC_CMR_ACPC_CLEAR | - TC_CMR_BCPB_CLEAR | TC_CMR_BCPC_CLEAR); - TC_SetRC(chTC, chNo, TC); - } - if (ulValue == 0) { - if (chA) - TC_SetCMR_ChannelA(chTC, chNo, TC_CMR_ACPA_CLEAR | TC_CMR_ACPC_CLEAR); - else - TC_SetCMR_ChannelB(chTC, chNo, TC_CMR_BCPB_CLEAR | TC_CMR_BCPC_CLEAR); - } else { - if (chA) { - TC_SetRA(chTC, chNo, ulValue); - TC_SetCMR_ChannelA(chTC, chNo, TC_CMR_ACPA_CLEAR | TC_CMR_ACPC_SET); - } else { - TC_SetRB(chTC, chNo, ulValue); - TC_SetCMR_ChannelB(chTC, chNo, TC_CMR_BCPB_CLEAR | TC_CMR_BCPC_SET); - } - } - if (!pinEnabled[ulPin]) { - PIO_Configure(g_APinDescription[ulPin].pPort, - g_APinDescription[ulPin].ulPinType, - g_APinDescription[ulPin].ulPin, - g_APinDescription[ulPin].ulPinConfiguration); - pinEnabled[ulPin] = 1; - } - if (!TCChanEnabled[interfaceID]) { - TC_Start(chTC, chNo); - TCChanEnabled[interfaceID] = 1; - } - return; - } - - // Defaults to digital write - pinMode(ulPin, OUTPUT); - ulValue = mapResolution(ulValue, _writeResolution, 8); - if (ulValue < 128) - digitalWrite(ulPin, LOW); - else - digitalWrite(ulPin, HIGH); -} - -#ifdef __cplusplus -} -#endif diff --git a/cores/validation/validation_core/build_as6/test.cppproj b/cores/validation/validation_core/build_as6/test.cppproj deleted file mode 100644 index 402e9aae3a17a7fa2ce4b9ea098a30b12095fe23..0000000000000000000000000000000000000000 --- a/cores/validation/validation_core/build_as6/test.cppproj +++ /dev/null @@ -1,458 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <PropertyGroup> - <SchemaVersion>2.0</SchemaVersion> - <ProjectVersion>6.2</ProjectVersion> - <ToolchainName>com.Atmel.ARMGCC.CPP</ToolchainName> - <ProjectGuid>{b3f859ad-e162-4c2f-9684-eac6932fec80}</ProjectGuid> - <avrdevice>ATSAMD21G18A</avrdevice> - <avrdeviceseries>none</avrdeviceseries> - <OutputType>Executable</OutputType> - <Language>CPP</Language> - <OutputFileName>$(MSBuildProjectName)</OutputFileName> - <OutputFileExtension>.elf</OutputFileExtension> - <OutputDirectory>$(MSBuildProjectDirectory)\$(Configuration)</OutputDirectory> - <AssemblyName>test</AssemblyName> - <Name>test</Name> - <RootNamespace>test</RootNamespace> - <ToolchainFlavour>Native</ToolchainFlavour> - <KeepTimersRunning>true</KeepTimersRunning> - <OverrideVtor>false</OverrideVtor> - <CacheFlash>false</CacheFlash> - <ProgFlashFromRam>true</ProgFlashFromRam> - <RamSnippetAddress>0x20000000</RamSnippetAddress> - <UncachedRange /> - <OverrideVtorValue>exception_table</OverrideVtorValue> - <BootSegment>2</BootSegment> - <eraseonlaunchrule>1</eraseonlaunchrule> - <AsfFrameworkConfig> - <framework-data xmlns=""> - <options /> - <configurations /> - <files /> - <documentation help="" /> - <offline-documentation help="" /> - <dependencies> - <content-extension eid="atmel.asf" uuidref="Atmel.ASF" version="3.17.0" /> - </dependencies> - </framework-data> - </AsfFrameworkConfig> - <avrtool>com.atmel.avrdbg.tool.edbg</avrtool> - <avrtoolinterface>SWD</avrtoolinterface> - <com_atmel_avrdbg_tool_samice> - <ToolOptions> - <InterfaceProperties> - </InterfaceProperties> - <InterfaceName>SWD</InterfaceName> - </ToolOptions> - <ToolType>com.atmel.avrdbg.tool.samice</ToolType> - <ToolNumber>28001042</ToolNumber> - <ToolName>SAM-ICE</ToolName> - </com_atmel_avrdbg_tool_samice> - <UseGdb>True</UseGdb> - <com_atmel_avrdbg_tool_edbg> - <ToolOptions> - <InterfaceProperties> - <SwdClock>4000000</SwdClock> - </InterfaceProperties> - <InterfaceName>SWD</InterfaceName> - </ToolOptions> - <ToolType>com.atmel.avrdbg.tool.edbg</ToolType> - <ToolNumber>ATML2320021800000012</ToolNumber> - <ToolName>EDBG</ToolName> - </com_atmel_avrdbg_tool_edbg> - </PropertyGroup> - <PropertyGroup Condition=" '$(Configuration)' == 'Release' "> - <ToolchainSettings> - <ArmGccCpp> - <armgcc.common.outputfiles.hex>True</armgcc.common.outputfiles.hex> - <armgcc.common.outputfiles.lss>True</armgcc.common.outputfiles.lss> - <armgcc.common.outputfiles.eep>True</armgcc.common.outputfiles.eep> - <armgcc.common.outputfiles.bin>True</armgcc.common.outputfiles.bin> - <armgcc.common.outputfiles.srec>True</armgcc.common.outputfiles.srec> - <armgcc.compiler.symbols.DefSymbols> - <ListValues> - <Value>NDEBUG</Value> - </ListValues> - </armgcc.compiler.symbols.DefSymbols> - <armgcc.compiler.directories.IncludePaths> - <ListValues> - <Value>../../../../../../../tools/CMSIS/Device/ATMEL</Value> - <Value>../../../../../../../tools/CMSIS/CMSIS/Include</Value> - <Value>../../../../arduino</Value> - <Value>../../../../arduino/USB</Value> - <Value>../../../../../variants/arduino_zero</Value> - <Value>../../../../../libraries/SPI</Value> - <Value>../../../../../libraries/Wire</Value> - </ListValues> - </armgcc.compiler.directories.IncludePaths> - <armgcc.compiler.optimization.level>Optimize for size (-Os)</armgcc.compiler.optimization.level> - <armgcc.compiler.optimization.PrepareFunctionsForGarbageCollection>True</armgcc.compiler.optimization.PrepareFunctionsForGarbageCollection> - <armgcc.compiler.warnings.AllWarnings>True</armgcc.compiler.warnings.AllWarnings> - <armgcccpp.compiler.symbols.DefSymbols> - <ListValues> - <Value>NDEBUG</Value> - </ListValues> - </armgcccpp.compiler.symbols.DefSymbols> - <armgcccpp.compiler.directories.IncludePaths> - <ListValues> - <Value>../../../../../../../tools/CMSIS/Device/ATMEL</Value> - <Value>../../../../../../../tools/CMSIS/CMSIS/Include</Value> - <Value>../../../../arduino</Value> - <Value>../../../../arduino/USB</Value> - <Value>../../../../../variants/arduino_zero</Value> - <Value>../../../../../libraries/SPI</Value> - <Value>../../../../../libraries/Wire</Value> - </ListValues> - </armgcccpp.compiler.directories.IncludePaths> - <armgcccpp.compiler.optimization.level>Optimize for size (-Os)</armgcccpp.compiler.optimization.level> - <armgcccpp.compiler.optimization.PrepareFunctionsForGarbageCollection>True</armgcccpp.compiler.optimization.PrepareFunctionsForGarbageCollection> - <armgcccpp.compiler.warnings.AllWarnings>True</armgcccpp.compiler.warnings.AllWarnings> - <armgcccpp.linker.libraries.Libraries> - <ListValues> - <Value>libm</Value> - </ListValues> - </armgcccpp.linker.libraries.Libraries> - <armgcccpp.linker.libraries.LibrarySearchPaths> - <ListValues> - <Value>../cmsis/linkerScripts</Value> - </ListValues> - </armgcccpp.linker.libraries.LibrarySearchPaths> - <armgcccpp.linker.optimization.GarbageCollectUnusedSections>True</armgcccpp.linker.optimization.GarbageCollectUnusedSections> - <armgcccpp.linker.miscellaneous.LinkerFlags>-Tsamd21g18a_flash.ld</armgcccpp.linker.miscellaneous.LinkerFlags> - <armgcccpp.preprocessingassembler.general.IncludePaths> - <ListValues> - <Value>../../../../../../../tools/CMSIS/Device/ATMEL</Value> - <Value>../../../../../../../tools/CMSIS/CMSIS/Include</Value> - <Value>../../../../arduino</Value> - <Value>../../../../arduino/USB</Value> - <Value>../../../../../variants/arduino_zero</Value> - <Value>../../../../../libraries/SPI</Value> - <Value>../../../../../libraries/Wire</Value> - </ListValues> - </armgcccpp.preprocessingassembler.general.IncludePaths> - </ArmGccCpp> - </ToolchainSettings> - </PropertyGroup> - <PropertyGroup Condition=" '$(Configuration)' == 'Debug' "> - <ToolchainSettings> - <ArmGccCpp> - <armgcc.common.outputfiles.hex>True</armgcc.common.outputfiles.hex> - <armgcc.common.outputfiles.lss>True</armgcc.common.outputfiles.lss> - <armgcc.common.outputfiles.eep>True</armgcc.common.outputfiles.eep> - <armgcc.common.outputfiles.bin>True</armgcc.common.outputfiles.bin> - <armgcc.common.outputfiles.srec>True</armgcc.common.outputfiles.srec> - <armgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</armgcc.compiler.general.ChangeDefaultCharTypeUnsigned> - <armgcc.compiler.symbols.DefSymbols> - <ListValues> - <Value>DEBUG</Value> - </ListValues> - </armgcc.compiler.symbols.DefSymbols> - <armgcc.compiler.directories.DefaultIncludePath>False</armgcc.compiler.directories.DefaultIncludePath> - <armgcc.compiler.directories.IncludePaths> - <ListValues> - <Value>../../../../../../../tools/CMSIS/Device/ATMEL</Value> - <Value>../../../../../../../tools/CMSIS/CMSIS/Include</Value> - <Value>../../../../arduino</Value> - <Value>../../../../arduino/USB</Value> - <Value>../../../../../variants/arduino_zero</Value> - <Value>../../../../../libraries/SPI</Value> - <Value>../../../../../libraries/Wire</Value> - </ListValues> - </armgcc.compiler.directories.IncludePaths> - <armgcc.compiler.optimization.level>Optimize (-O1)</armgcc.compiler.optimization.level> - <armgcc.compiler.optimization.PrepareFunctionsForGarbageCollection>True</armgcc.compiler.optimization.PrepareFunctionsForGarbageCollection> - <armgcc.compiler.optimization.PrepareDataForGarbageCollection>True</armgcc.compiler.optimization.PrepareDataForGarbageCollection> - <armgcc.compiler.optimization.DebugLevel>Maximum (-g3)</armgcc.compiler.optimization.DebugLevel> - <armgcc.compiler.warnings.AllWarnings>True</armgcc.compiler.warnings.AllWarnings> - <armgcc.compiler.miscellaneous.OtherFlags>-std=c99</armgcc.compiler.miscellaneous.OtherFlags> - <armgcccpp.compiler.general.ChangeDefaultCharTypeUnsigned>True</armgcccpp.compiler.general.ChangeDefaultCharTypeUnsigned> - <armgcccpp.compiler.symbols.DefSymbols> - <ListValues> - <Value>DEBUG</Value> - <Value>USB_VID=0x2341</Value> - <Value>USB_PID=0x004d</Value> - </ListValues> - </armgcccpp.compiler.symbols.DefSymbols> - <armgcccpp.compiler.directories.DefaultIncludePath>False</armgcccpp.compiler.directories.DefaultIncludePath> - <armgcccpp.compiler.directories.IncludePaths> - <ListValues> - <Value>../../../../../../../tools/CMSIS/Device/ATMEL</Value> - <Value>../../../../../../../tools/CMSIS/CMSIS/Include</Value> - <Value>../../../../arduino</Value> - <Value>../../../../arduino/USB</Value> - <Value>../../../../../variants/arduino_zero</Value> - <Value>../../../../../libraries/SPI</Value> - <Value>../../../../../libraries/Wire</Value> - </ListValues> - </armgcccpp.compiler.directories.IncludePaths> - <armgcccpp.compiler.optimization.level>Optimize (-O1)</armgcccpp.compiler.optimization.level> - <armgcccpp.compiler.optimization.PrepareFunctionsForGarbageCollection>True</armgcccpp.compiler.optimization.PrepareFunctionsForGarbageCollection> - <armgcccpp.compiler.optimization.PrepareDataForGarbageCollection>True</armgcccpp.compiler.optimization.PrepareDataForGarbageCollection> - <armgcccpp.compiler.optimization.DebugLevel>Maximum (-g3)</armgcccpp.compiler.optimization.DebugLevel> - <armgcccpp.compiler.warnings.AllWarnings>True</armgcccpp.compiler.warnings.AllWarnings> - <armgcccpp.compiler.miscellaneous.OtherFlags>-std=c++98</armgcccpp.compiler.miscellaneous.OtherFlags> - <armgcccpp.linker.general.UseNewlibNano>True</armgcccpp.linker.general.UseNewlibNano> - <armgcccpp.linker.libraries.Libraries> - <ListValues> - <Value>libm</Value> - </ListValues> - </armgcccpp.linker.libraries.Libraries> - <armgcccpp.linker.libraries.LibrarySearchPaths> - <ListValues> - <Value>../../../../../variants/arduino_zero/linker_scripts/gcc</Value> - </ListValues> - </armgcccpp.linker.libraries.LibrarySearchPaths> - <armgcccpp.linker.optimization.GarbageCollectUnusedSections>True</armgcccpp.linker.optimization.GarbageCollectUnusedSections> - <armgcccpp.linker.memorysettings.ExternalRAM /> - <armgcccpp.linker.miscellaneous.LinkerFlags>-Tflash.ld</armgcccpp.linker.miscellaneous.LinkerFlags> - <armgcccpp.assembler.general.IncludePaths> - <ListValues> - <Value>../../../arduino</Value> - </ListValues> - </armgcccpp.assembler.general.IncludePaths> - <armgcccpp.assembler.debugging.DebugLevel>Default (-g)</armgcccpp.assembler.debugging.DebugLevel> - <armgcccpp.preprocessingassembler.general.DefaultIncludePath>False</armgcccpp.preprocessingassembler.general.DefaultIncludePath> - <armgcccpp.preprocessingassembler.general.IncludePaths> - <ListValues> - <Value>../../../arduino</Value> - </ListValues> - </armgcccpp.preprocessingassembler.general.IncludePaths> - <armgcccpp.preprocessingassembler.debugging.DebugLevel>Default (-Wa,-g)</armgcccpp.preprocessingassembler.debugging.DebugLevel> - </ArmGccCpp> - </ToolchainSettings> - </PropertyGroup> - <ItemGroup> - <Folder Include="core" /> - <Folder Include="Wire" /> - <Folder Include="SPI" /> - <Folder Include="variant" /> - </ItemGroup> - <ItemGroup> - <Compile Include="..\..\..\..\libraries\SPI\SPI.cpp"> - <SubType>compile</SubType> - <Link>SPI\SPI.cpp</Link> - </Compile> - <Compile Include="..\..\..\..\libraries\SPI\SPI.h"> - <SubType>compile</SubType> - <Link>SPI\SPI.h</Link> - </Compile> - <Compile Include="..\..\..\..\libraries\Wire\Wire.cpp"> - <SubType>compile</SubType> - <Link>Wire\Wire.cpp</Link> - </Compile> - <Compile Include="..\..\..\..\libraries\Wire\Wire.h"> - <SubType>compile</SubType> - <Link>Wire\Wire.h</Link> - </Compile> - <Compile Include="..\..\..\..\variants\arduino_zero\pins_arduino.h"> - <SubType>compile</SubType> - <Link>variant\pins_arduino.h</Link> - </Compile> - <Compile Include="..\..\..\..\variants\arduino_zero\variant.cpp"> - <SubType>compile</SubType> - <Link>variant\variant.cpp</Link> - </Compile> - <Compile Include="..\..\..\..\variants\arduino_zero\variant.h"> - <SubType>compile</SubType> - <Link>variant\variant.h</Link> - </Compile> - <Compile Include="..\..\..\arduino\Arduino.h"> - <SubType>compile</SubType> - <Link>core\Arduino.h</Link> - </Compile> - <Compile Include="..\..\..\arduino\binary.h"> - <SubType>compile</SubType> - <Link>core\binary.h</Link> - </Compile> - <Compile Include="..\..\..\arduino\Client.h"> - <SubType>compile</SubType> - <Link>core\Client.h</Link> - </Compile> - <Compile Include="..\..\..\arduino\delay.c"> - <SubType>compile</SubType> - <Link>core\delay.c</Link> - </Compile> - <Compile Include="..\..\..\arduino\delay.h"> - <SubType>compile</SubType> - <Link>core\delay.h</Link> - </Compile> - <Compile Include="..\..\..\arduino\HardwareSerial.h"> - <SubType>compile</SubType> - <Link>core\HardwareSerial.h</Link> - </Compile> - <Compile Include="..\..\..\arduino\hooks.c"> - <SubType>compile</SubType> - <Link>core\hooks.c</Link> - </Compile> - <Compile Include="..\..\..\arduino\IPAddress.cpp"> - <SubType>compile</SubType> - <Link>core\IPAddress.cpp</Link> - </Compile> - <Compile Include="..\..\..\arduino\IPAddress.h"> - <SubType>compile</SubType> - <Link>core\IPAddress.h</Link> - </Compile> - <Compile Include="..\..\..\arduino\itoa.c"> - <SubType>compile</SubType> - <Link>core\itoa.c</Link> - </Compile> - <Compile Include="..\..\..\arduino\itoa.h"> - <SubType>compile</SubType> - <Link>core\itoa.h</Link> - </Compile> - <Compile Include="..\..\..\arduino\main.cpp"> - <SubType>compile</SubType> - <Link>core\main.cpp</Link> - </Compile> - <Compile Include="..\..\..\arduino\Print.cpp"> - <SubType>compile</SubType> - <Link>core\Print.cpp</Link> - </Compile> - <Compile Include="..\..\..\arduino\Print.h"> - <SubType>compile</SubType> - <Link>core\Print.h</Link> - </Compile> - <Compile Include="..\..\..\arduino\Printable.h"> - <SubType>compile</SubType> - <Link>core\Printable.h</Link> - </Compile> - <Compile Include="..\..\..\arduino\Reset.cpp"> - <SubType>compile</SubType> - <Link>core\Reset.cpp</Link> - </Compile> - <Compile Include="..\..\..\arduino\Reset.h"> - <SubType>compile</SubType> - <Link>core\Reset.h</Link> - </Compile> - <Compile Include="..\..\..\arduino\RingBuffer.cpp"> - <SubType>compile</SubType> - <Link>core\RingBuffer.cpp</Link> - </Compile> - <Compile Include="..\..\..\arduino\RingBuffer.h"> - <SubType>compile</SubType> - <Link>core\RingBuffer.h</Link> - </Compile> - <Compile Include="..\..\..\arduino\SERCOM.cpp"> - <SubType>compile</SubType> - <Link>core\SERCOM.cpp</Link> - </Compile> - <Compile Include="..\..\..\arduino\SERCOM.h"> - <SubType>compile</SubType> - <Link>core\SERCOM.h</Link> - </Compile> - <Compile Include="..\..\..\arduino\Server.h"> - <SubType>compile</SubType> - <Link>core\Server.h</Link> - </Compile> - <Compile Include="..\..\..\arduino\startup.c"> - <SubType>compile</SubType> - <Link>core\startup.c</Link> - </Compile> - <Compile Include="..\..\..\arduino\Stream.cpp"> - <SubType>compile</SubType> - <Link>core\Stream.cpp</Link> - </Compile> - <Compile Include="..\..\..\arduino\Stream.h"> - <SubType>compile</SubType> - <Link>core\Stream.h</Link> - </Compile> - <Compile Include="..\..\..\arduino\syscalls.c"> - <SubType>compile</SubType> - <Link>core\syscalls.c</Link> - </Compile> - <Compile Include="..\..\..\arduino\syscalls.h"> - <SubType>compile</SubType> - <Link>core\syscalls.h</Link> - </Compile> - <Compile Include="..\..\..\arduino\Tone.h"> - <SubType>compile</SubType> - <Link>core\Tone.h</Link> - </Compile> - <Compile Include="..\..\..\arduino\Uart.cpp"> - <SubType>compile</SubType> - <Link>core\Uart.cpp</Link> - </Compile> - <Compile Include="..\..\..\arduino\Uart.h"> - <SubType>compile</SubType> - <Link>core\Uart.h</Link> - </Compile> - <Compile Include="..\..\..\arduino\Udp.h"> - <SubType>compile</SubType> - <Link>core\Udp.h</Link> - </Compile> - <Compile Include="..\..\..\arduino\WCharacter.h"> - <SubType>compile</SubType> - <Link>core\WCharacter.h</Link> - </Compile> - <Compile Include="..\..\..\arduino\WInterrupts.h"> - <SubType>compile</SubType> - <Link>core\WInterrupts.h</Link> - </Compile> - <Compile Include="..\..\..\arduino\wiring.c"> - <SubType>compile</SubType> - <Link>core\wiring.c</Link> - </Compile> - <Compile Include="..\..\..\arduino\wiring.h"> - <SubType>compile</SubType> - <Link>core\wiring.h</Link> - </Compile> - <Compile Include="..\..\..\arduino\wiring_analog.h"> - <SubType>compile</SubType> - <Link>core\wiring_analog.h</Link> - </Compile> - <Compile Include="..\..\..\arduino\wiring_constants.h"> - <SubType>compile</SubType> - <Link>core\wiring_constants.h</Link> - </Compile> - <Compile Include="..\..\..\arduino\wiring_digital.c"> - <SubType>compile</SubType> - <Link>core\wiring_digital.c</Link> - </Compile> - <Compile Include="..\..\..\arduino\wiring_digital.h"> - <SubType>compile</SubType> - <Link>core\wiring_digital.h</Link> - </Compile> - <Compile Include="..\..\..\arduino\wiring_private.h"> - <SubType>compile</SubType> - <Link>core\wiring_private.h</Link> - </Compile> - <Compile Include="..\..\..\arduino\wiring_pulse.h"> - <SubType>compile</SubType> - <Link>core\wiring_pulse.h</Link> - </Compile> - <Compile Include="..\..\..\arduino\wiring_shift.c"> - <SubType>compile</SubType> - <Link>core\wiring_shift.c</Link> - </Compile> - <Compile Include="..\..\..\arduino\wiring_shift.h"> - <SubType>compile</SubType> - <Link>core\wiring_shift.h</Link> - </Compile> - <Compile Include="..\..\..\arduino\WMath.cpp"> - <SubType>compile</SubType> - <Link>core\WMath.cpp</Link> - </Compile> - <Compile Include="..\..\..\arduino\WMath.h"> - <SubType>compile</SubType> - <Link>core\WMath.h</Link> - </Compile> - <Compile Include="..\..\..\arduino\WString.cpp"> - <SubType>compile</SubType> - <Link>core\WString.cpp</Link> - </Compile> - <Compile Include="..\..\..\arduino\WString.h"> - <SubType>compile</SubType> - <Link>core\WString.h</Link> - </Compile> - <Compile Include="..\..\..\arduino\WVariant.h"> - <SubType>compile</SubType> - <Link>core\WVariant.h</Link> - </Compile> - <Compile Include="..\test.cpp"> - <SubType>compile</SubType> - <Link>test.cpp</Link> - </Compile> - </ItemGroup> - <Import Project="$(AVRSTUDIO_EXE_PATH)\\Vs\\Compiler.targets" /> -</Project> \ No newline at end of file diff --git a/cores/validation/validation_core/test.cpp b/cores/validation/validation_core/test.cpp index ac1e28d118977b68b6f0d2cfde6713da1873cb3a..e3387a8bd366896c665964f1878396e92458e0e1 100644 --- a/cores/validation/validation_core/test.cpp +++ b/cores/validation/validation_core/test.cpp @@ -62,6 +62,29 @@ static void led_step2( void ) digitalWrite( PIN_LED3, LOW ) ; // set the red LED on } +static void analog_write_step (void) +{ + // test PWM generation on all PWM pins (duty cycle from 0x00 to 0xFF) + for( uint8_t duty_cycle = 0x00;duty_cycle<=0xFF;duty_cycle++) + { + analogWrite(13,duty_cycle); + analogWrite(12,duty_cycle); + analogWrite(11,duty_cycle); + analogWrite(10,duty_cycle); + analogWrite(9,duty_cycle); + analogWrite(8,duty_cycle); + analogWrite(7,duty_cycle); + analogWrite(6,duty_cycle); + analogWrite(5,duty_cycle); + analogWrite(4,duty_cycle); + analogWrite(3,duty_cycle); + analogWrite(2,duty_cycle); + delay( 10 ) ; + } + + +} + void loop( void ) { volatile int pin_value=0 ; @@ -83,6 +106,7 @@ void loop( void ) Serial.write( (pin_value == LOW)?"LOW\n":"HIGH\n" ) ; delay( 1000 ) ; // wait for a second + analog_write_step(); /* Serial.print("Analog pins: "); diff --git a/variants/arduino_zero/variant.cpp b/variants/arduino_zero/variant.cpp index 879255343204d11dd445b2cd2fb73c29cc62138e..34ed553d9c3429447f43c5b63973f6dce9f22938 100644 --- a/variants/arduino_zero/variant.cpp +++ b/variants/arduino_zero/variant.cpp @@ -125,7 +125,7 @@ const PinDescription g_APinDescription[]= { PORTA, 19, PIO_TIMER, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM|PIN_ATTR_TIMER), No_ADC_Channel, PWM3_CH1, TC3_CH1 }, // TC3/WO[1] // 13 (LED) - { PORTA, 17, PIO_PWM, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), No_ADC_Channel, PWM2_CH1, NOT_ON_TIMER }, // TCC2/WO[1] + { PORTA, 17, PIO_PWM, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), No_ADC_Channel, PWM2_CH1, NOT_ON_TIMER }, // TCC2/WO[1] // 14 (GND) { NOT_A_PORT, 0, PIO_NOT_A_PIN, PIN_ATTR_NONE, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER },