From 6afe5e109b7839a8d1a839106158becdc093cadd Mon Sep 17 00:00:00 2001 From: Dan Halbert Date: Mon, 16 Oct 2017 18:28:38 -0400 Subject: [PATCH 1/2] Set DRVSTR on output pins to strong (more current capability). --- atmel-samd/common-hal/digitalio/DigitalInOut.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/atmel-samd/common-hal/digitalio/DigitalInOut.c b/atmel-samd/common-hal/digitalio/DigitalInOut.c index abb4547cc10f2..16654f0fe8151 100644 --- a/atmel-samd/common-hal/digitalio/DigitalInOut.c +++ b/atmel-samd/common-hal/digitalio/DigitalInOut.c @@ -80,6 +80,9 @@ void common_hal_digitalio_digitalinout_switch_to_output( pin_conf.input_pull = PORT_PIN_PULL_NONE; port_pin_set_config(self->pin->pin, &pin_conf); + // Turn on "strong" pin driving (more current available). See DRVSTR doc in datasheet. + system_pinmux_pin_set_output_strength(self->pin->pin, SYSTEM_PINMUX_PIN_STRENGTH_HIGH); + self->output = true; self->open_drain = drive_mode == DRIVE_MODE_OPEN_DRAIN; common_hal_digitalio_digitalinout_set_value(self, value); From 49acf09b35c6854940a9e30b187b5e7a475aa143 Mon Sep 17 00:00:00 2001 From: Dan Halbert Date: Mon, 16 Oct 2017 23:48:26 -0400 Subject: [PATCH 2/2] redo time.monotonic() to avoid double precision --- shared-bindings/time/__init__.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/shared-bindings/time/__init__.c b/shared-bindings/time/__init__.c index 105758951fb03..6956cc4e65a28 100644 --- a/shared-bindings/time/__init__.c +++ b/shared-bindings/time/__init__.c @@ -52,7 +52,9 @@ //| :rtype: float //| STATIC mp_obj_t time_monotonic(void) { - return mp_obj_new_float(common_hal_time_monotonic() / 1000.0); + uint64_t time64 = common_hal_time_monotonic(); + // 4294967296 = 2^32 + return mp_obj_new_float(((uint32_t) (time64 >> 32) * 4294967296.0f + (uint32_t) (time64 & 0xffffffff)) / 1000.0f); } MP_DEFINE_CONST_FUN_OBJ_0(time_monotonic_obj, time_monotonic);