From e50eda27608ce98e58e899c31e0df73209c1b346 Mon Sep 17 00:00:00 2001 From: bkleiner Date: Wed, 10 Apr 2024 11:27:24 +0200 Subject: [PATCH] spi: initialize spi_dev array avoids hitting an infitine loop while waiting on spi1 in the dshot driver. --- src/driver/spi.c | 4 +++- src/driver/spi.h | 5 +++-- src/driver/spi_sdcard.c | 2 +- src/util/util.h | 3 +++ 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/driver/spi.c b/src/driver/spi.c index 7ee868a4d..cf8e9cd04 100644 --- a/src/driver/spi.c +++ b/src/driver/spi.c @@ -5,7 +5,9 @@ #include "core/failloop.h" #include "driver/interrupt.h" -FAST_RAM spi_device_t spi_dev[SPI_PORT_MAX]; +FAST_RAM spi_device_t spi_dev[SPI_PORT_MAX] = { + [RANGE_INIT(0, SPI_PORT_MAX)] = {.is_init = false, .dma_done = true, .txn_head = 0, .txn_tail = 0}, +}; FAST_RAM spi_txn_t txn_pool[SPI_TXN_MAX]; DMA_RAM uint8_t txn_buffers[SPI_TXN_MAX][DMA_ALIGN(512)]; diff --git a/src/driver/spi.h b/src/driver/spi.h index 98ee2282d..b850bce81 100644 --- a/src/driver/spi.h +++ b/src/driver/spi.h @@ -106,12 +106,13 @@ typedef struct { bool is_init; volatile bool dma_done; - spi_txn_t *txns[SPI_TXN_MAX]; // only modified by the main loop volatile uint8_t txn_head; // only modified by the intterupt or protected code volatile uint8_t txn_tail; + spi_txn_t *txns[SPI_TXN_MAX]; + spi_mode_t mode; uint32_t hz; } spi_device_t; @@ -137,7 +138,7 @@ static inline void spi_bus_device_reconfigure(spi_bus_device_t *bus, spi_mode_t bus->hz = hz; } -static inline uint8_t spi_dma_is_ready(spi_ports_t port) { +static inline bool spi_dma_is_ready(spi_ports_t port) { const spi_device_t *dev = &spi_dev[port]; return dev->dma_done; } diff --git a/src/driver/spi_sdcard.c b/src/driver/spi_sdcard.c index 8e7b19009..0fde3138f 100644 --- a/src/driver/spi_sdcard.c +++ b/src/driver/spi_sdcard.c @@ -299,7 +299,7 @@ sdcard_status_t sdcard_update() { break; } - const uint8_t buf[20] = {[0 ... 19] = 0xff}; + const uint8_t buf[20] = {[RANGE_INIT(0, 20)] = 0xff}; const spi_txn_segment_t segs[] = { spi_make_seg_buffer(NULL, buf, 20), }; diff --git a/src/util/util.h b/src/util/util.h index 34ca1e7d3..9551db882 100644 --- a/src/util/util.h +++ b/src/util/util.h @@ -44,6 +44,9 @@ #define MAKE_SEMVER(major, minor, patch) ((major << 16) | (minor << 8) | patch) +// workaround for vscode not reconginzing this synatx +#define RANGE_INIT(start, end) start...(end - 1) + float mapf(float x, float in_min, float in_max, float out_min, float out_max); float atan2approx(float y, float x);