From ff1942cff68a4e192f984a14a83b59800186e45a Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Thu, 11 Feb 2021 16:37:34 -0600 Subject: Enable protomatter on RP2040 builds Also found a race condition between timer_disable and redraw, which would happen if I debugger-paused inside common_hal_rgbmatrix_timer_disable or put a delay or print inside it. That's what pausing inside reconstruct fixes. So that the "right timer" can be chosen, `timer_allocate` now gets the `self` pointer. It's guaranteed at this point that the pin information is accurate, so you can e.g., find a PWM unit related to the pins themselves. This required touching each port to add the parameter even though it's unused everywhere but raspberrypi. --- ports/nrf/common-hal/rgbmatrix/RGBMatrix.c | 2 +- ports/nrf/common-hal/rgbmatrix/RGBMatrix.h | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) (limited to 'ports/nrf/common-hal') diff --git a/ports/nrf/common-hal/rgbmatrix/RGBMatrix.c b/ports/nrf/common-hal/rgbmatrix/RGBMatrix.c index e13b761ab..d8289f56f 100644 --- a/ports/nrf/common-hal/rgbmatrix/RGBMatrix.c +++ b/ports/nrf/common-hal/rgbmatrix/RGBMatrix.c @@ -32,7 +32,7 @@ extern void _PM_IRQ_HANDLER(void); -void *common_hal_rgbmatrix_timer_allocate() { +void *common_hal_rgbmatrix_timer_allocate(rgbmatrix_rgbmatrix_obj_t *self) { nrfx_timer_t *timer = nrf_peripherals_allocate_timer_or_throw(); nrf_peripherals_timer_never_reset(timer); return timer->p_reg; diff --git a/ports/nrf/common-hal/rgbmatrix/RGBMatrix.h b/ports/nrf/common-hal/rgbmatrix/RGBMatrix.h index 24d86f177..6cf7354fc 100644 --- a/ports/nrf/common-hal/rgbmatrix/RGBMatrix.h +++ b/ports/nrf/common-hal/rgbmatrix/RGBMatrix.h @@ -27,7 +27,9 @@ #ifndef MICROPY_INCLUDED_NRF_COMMON_HAL_RGBMATRIX_RGBMATRIX_H #define MICROPY_INCLUDED_NRF_COMMON_HAL_RGBMATRIX_RGBMATRIX_H -void *common_hal_rgbmatrix_timer_allocate(void); +#include "shared-module/rgbmatrix/RGBMatrix.h" + +void *common_hal_rgbmatrix_timer_allocate(rgbmatrix_rgbmatrix_obj_t *self); void common_hal_rgbmatrix_timer_enable(void*); void common_hal_rgbmatrix_timer_disable(void*); void common_hal_rgbmatrix_timer_free(void*); -- cgit v1.2.3