From f74e47796647190d32303553d05472545402a871 Mon Sep 17 00:00:00 2001 From: Scott Shawcroft Date: Thu, 19 Jan 2017 11:26:41 -0800 Subject: [PATCH] atmel-samd: Fully reset the ADC state on reset to prevent a crash. --- atmel-samd/common-hal/nativeio/AnalogIn.c | 10 +++++++ atmel-samd/common-hal/nativeio/AnalogIn.h | 32 +++++++++++++++++++++++ atmel-samd/main.c | 4 +++ 3 files changed, 46 insertions(+) create mode 100644 atmel-samd/common-hal/nativeio/AnalogIn.h diff --git a/atmel-samd/common-hal/nativeio/AnalogIn.c b/atmel-samd/common-hal/nativeio/AnalogIn.c index 37f8c13e6b..7e97577e4d 100644 --- a/atmel-samd/common-hal/nativeio/AnalogIn.c +++ b/atmel-samd/common-hal/nativeio/AnalogIn.c @@ -24,6 +24,8 @@ * THE SOFTWARE. */ +#include "common-hal/nativeio/AnalogIn.h" + #include #include "py/gc.h" @@ -82,6 +84,14 @@ void common_hal_nativeio_analogin_deinit(nativeio_analogin_obj_t *self) { reset_pin(self->pin->pin); } +void analogin_reset() { + if (adc_instance != NULL) { + adc_reset(adc_instance); + adc_instance = NULL; + } + active_channel_count = 0; +} + uint16_t common_hal_nativeio_analogin_get_value(nativeio_analogin_obj_t *self) { adc_set_positive_input(adc_instance, self->pin->adc_input); diff --git a/atmel-samd/common-hal/nativeio/AnalogIn.h b/atmel-samd/common-hal/nativeio/AnalogIn.h new file mode 100644 index 0000000000..d975f6cb42 --- /dev/null +++ b/atmel-samd/common-hal/nativeio/AnalogIn.h @@ -0,0 +1,32 @@ +/* + * This file is part of the MicroPython project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2016 Scott Shawcroft + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#ifndef __MICROPY_INCLUDED_ATMEL_SAMD_COMMON_HAL_NATIVEIO_ANALOGIN_H__ +#define __MICROPY_INCLUDED_ATMEL_SAMD_COMMON_HAL_NATIVEIO_ANALOGIN_H__ + +void analogin_reset(void); + +#endif // __MICROPY_INCLUDED_ATMEL_SAMD_COMMON_HAL_NATIVEIO_ANALOGIN_H__ diff --git a/atmel-samd/main.c b/atmel-samd/main.c index 5285a8c6e4..e224f1adda 100644 --- a/atmel-samd/main.c +++ b/atmel-samd/main.c @@ -22,6 +22,8 @@ #include "asf/sam0/drivers/system/system.h" #include +#include "common-hal/nativeio/AnalogIn.h" + #ifdef EXPRESS_BOARD #include "common-hal/nativeio/types.h" #include "QTouch/touch_api_ptc.h" @@ -157,6 +159,8 @@ void reset_samd21(void) { selfcap_config.num_sensors = 0; #endif + analogin_reset(); + struct system_pinmux_config config; system_pinmux_get_config_defaults(&config); config.powersave = true;