From 8282de41346a9a761db877c53f3f1f697eadac5a Mon Sep 17 00:00:00 2001 From: Fabien Poussin Date: Wed, 2 Oct 2019 15:57:56 +0200 Subject: NRF SPI driver fix --- os/hal/ports/NRF5/LLD/SPIv1/hal_spi_lld.h | 124 ++++++------------------------ 1 file changed, 25 insertions(+), 99 deletions(-) diff --git a/os/hal/ports/NRF5/LLD/SPIv1/hal_spi_lld.h b/os/hal/ports/NRF5/LLD/SPIv1/hal_spi_lld.h index 1c6d858..09ff381 100644 --- a/os/hal/ports/NRF5/LLD/SPIv1/hal_spi_lld.h +++ b/os/hal/ports/NRF5/LLD/SPIv1/hal_spi_lld.h @@ -79,19 +79,6 @@ /* Driver data structures and types. */ /*===========================================================================*/ -/** - * @brief Type of a structure representing an SPI driver. - */ -typedef struct SPIDriver SPIDriver; - -/** - * @brief SPI notification callback type. - * - * @param[in] spip pointer to the @p SPIDriver object triggering the - * callback - */ -typedef void (*spicallback_t)(SPIDriver *spip); - /** * @brief SPI frequency */ @@ -106,97 +93,36 @@ typedef enum { } spifreq_t; /** - * @brief Driver configuration structure. + * @brief Low level fields of the SPI configuration structure. */ -typedef struct { - /** - * @brief Operation complete callback or @p NULL. - */ - spicallback_t end_cb; - /** - * @brief The frequency of the SPI peripheral - */ - spifreq_t freq; - /** - * @brief The SCK pad - */ - uint16_t sckpad; - /** - * @brief The MOSI pad - */ - uint16_t mosipad; - /** - * @brief The MOSI pad - */ - uint16_t misopad; - /* End of the mandatory fields.*/ - /** - * @brief The chip select line pad number. - */ - uint16_t sspad; - /** - * @brief Shift out least significant bit first - */ - uint8_t lsbfirst; - /** - * @brief SPI mode - */ - uint8_t mode; -} SPIConfig; +#define spi_lld_config_fields \ + /* @brief The frequency of the SPI peripheral */ \ + spifreq_t freq; \ + /* @brief The SCK pad */ \ + uint16_t sckpad; \ + /* @brief The MOSI pad */ \ + uint16_t mosipad; \ + /* @brief The MOSI pad */ \ + uint16_t misopad; \ + /* @brief Shift out least significant bit first */ \ + uint8_t lsbfirst; \ + /* @brief SPI mode */ \ + uint8_t mode; \ /** - * @brief Structure representing a SPI driver. + * @brief Low level fields of the SPI driver structure. */ -struct SPIDriver { - /** - * @brief Driver state. - */ - spistate_t state; - /** - * @brief Current configuration data. - */ - const SPIConfig *config; -#if SPI_USE_WAIT || defined(__DOXYGEN__) - /** - * @brief Waiting thread. - */ - thread_reference_t thread; -#endif /* SPI_USE_WAIT */ -#if SPI_USE_MUTUAL_EXCLUSION || defined(__DOXYGEN__) -#if CH_CFG_USE_MUTEXES || defined(__DOXYGEN__) - /** - * @brief Mutex protecting the bus. - */ - mutex_t mutex; -#elif CH_CFG_USE_SEMAPHORES - semaphore_t semaphore; -#endif -#endif /* SPI_USE_MUTUAL_EXCLUSION */ -#if defined(SPI_DRIVER_EXT_FIELDS) - SPI_DRIVER_EXT_FIELDS -#endif - /* End of the mandatory fields.*/ - /** - * @brief Pointer to the SPI port. - */ - NRF_SPI_Type *port; - /** - * @brief Number of bytes yet to be received. - */ - uint32_t rxcnt; - /** - * @brief Receive pointer or @p NULL. - */ - void *rxptr; - /** - * @brief Number of bytes yet to be transmitted. - */ - uint32_t txcnt; - /** - * @brief Transmit pointer or @p NULL. - */ +#define spi_lld_driver_fields \ + /* @brief Pointer to the SPI port. */ \ + NRF_SPI_Type *port; \ + /* @brief Number of bytes yet to be received. */ \ + uint32_t rxcnt; \ + /* @brief Receive pointer or @p NULL. */ \ + void *rxptr; \ + /* @brief Number of bytes yet to be transmitted. */ \ + uint32_t txcnt; \ + /* @brief Transmit pointer or @p NULL. */ \ const void *txptr; -}; /*===========================================================================*/ /* Driver macros. */ -- cgit v1.2.3