From de7bb19599a28715826bf6ce0f4a54be2a34f7f0 Mon Sep 17 00:00:00 2001 From: Fabien Poussin Date: Wed, 2 Oct 2019 15:19:07 +0200 Subject: NRF51 ADC fix --- os/hal/ports/NRF5/LLD/ADCv1/hal_adc_lld.h | 140 +++++++----------------------- 1 file changed, 33 insertions(+), 107 deletions(-) (limited to 'os/hal/ports/NRF5') diff --git a/os/hal/ports/NRF5/LLD/ADCv1/hal_adc_lld.h b/os/hal/ports/NRF5/LLD/ADCv1/hal_adc_lld.h index 4e185d5..1497727 100644 --- a/os/hal/ports/NRF5/LLD/ADCv1/hal_adc_lld.h +++ b/os/hal/ports/NRF5/LLD/ADCv1/hal_adc_lld.h @@ -73,6 +73,15 @@ /*===========================================================================*/ /* Driver data structures and types. */ /*===========================================================================*/ +/** + * @brief Possible ADC failure causes. + * @note Error codes are architecture dependent and should not relied + * upon. + */ +typedef enum { + ADC_ERR_DMAFAILURE = 0, /**< DMA operations failure. */ + ADC_ERR_OVERFLOW = 1 /**< ADC overflow condition. */ +} adcerror_t; /** * @brief ADC sample data type. @@ -85,118 +94,35 @@ typedef uint16_t adcsample_t; typedef uint8_t adc_channels_num_t; /** - * @brief Type of a structure representing an ADC driver. - */ -typedef struct ADCDriver ADCDriver; - -/** - * @brief ADC notification callback type. - * - * @param[in] adcp pointer to the @p ADCDriver object triggering the - * callback - * @param[in] buffer pointer to the most recent samples data - * @param[in] n number of buffer rows available starting from @p buffer + * @brief Low level fields of the ADC driver structure. */ -typedef void (*adccallback_t)(ADCDriver *adcp, adcsample_t *buffer, size_t n); +#define adc_lld_driver_fields \ + /* @brief Pointer to the ADCx registers block. */ \ + NRF_ADC_Type *adc; \ + /* @brief Number of samples expected. */ \ + size_t number_of_samples; \ + /* @brief Current position in the buffer. */ \ + size_t current_index; \ + /* @brief Current channel index into group channel_mask. */ \ + size_t current_channel; /** - * @brief Conversion group configuration structure. - * @details This implementation-dependent structure describes a conversion - * operation. - * @note The use of this configuration structure requires knowledge of - * STM32 ADC cell registers interface, please refer to the STM32 - * reference manual for details. + * @brief Low level fields of the ADC configuration structure. */ -typedef struct { - /** - * @brief Enables the circular buffer mode for the group. - */ - bool circular; - /** - * @brief Number of the analog channels belonging to the conversion group. - */ - adc_channels_num_t num_channels; - /** - * @brief Callback function associated to the group or @p NULL. - */ - adccallback_t end_cb; - /* End of the mandatory fields.*/ - /** - * @brief Bitmask of channels for ADC conversion. - */ - uint32_t channel_mask; - /** - * @brief ADC CONFIG register details. - * @note All the required bits must be defined into this field. - */ +#define adc_lld_config_fields \ + /* Dummy configuration, it is not needed.*/ \ + uint32_t dummy + +#define adc_lld_configuration_group_fields \ + /** \ + * @brief Bitmask of channels for ADC conversion. \ + */ \ + uint32_t channel_mask; \ + /** \ + * @brief ADC CONFIG register details. \ + * @note All the required bits must be defined into this field. \ + */ \ uint32_t cfg; -} ADCConversionGroup; - -/** - * @brief Driver configuration structure. - * @note It could be empty on some architectures. - */ -typedef struct { - uint32_t dummy; -} ADCConfig; - -/** - * @brief Structure representing an ADC driver. - */ -struct ADCDriver { - /** - * @brief Driver state. - */ - adcstate_t state; - /** - * @brief Current configuration data. - */ - const ADCConfig *config; - /** - * @brief Current samples buffer pointer or @p NULL. - */ - adcsample_t *samples; - /** - * @brief Current samples buffer depth or @p 0. - */ - size_t depth; - /** - * @brief Current conversion group pointer or @p NULL. - */ - const ADCConversionGroup *grpp; -#if ADC_USE_WAIT || defined(__DOXYGEN__) - /** - * @brief Waiting thread. - */ - thread_reference_t thread; -#endif -#if ADC_USE_MUTUAL_EXCLUSION || defined(__DOXYGEN__) - /** - * @brief Mutex protecting the peripheral. - */ - mutex_t mutex; -#endif /* ADC_USE_MUTUAL_EXCLUSION */ -#if defined(ADC_DRIVER_EXT_FIELDS) - ADC_DRIVER_EXT_FIELDS -#endif - /* End of the mandatory fields.*/ - /** - * @brief Pointer to the ADCx registers block. - */ - NRF_ADC_Type *adc; - /** - * @brief Number of samples expected. - */ - size_t number_of_samples; - /** - * @brief Current position in the buffer. - */ - size_t current_index; - /** - * @brief Current channel index into group channel_mask. - */ - size_t current_channel; -}; /*===========================================================================*/ /* Driver macros. */ -- cgit v1.2.3 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(-) (limited to 'os/hal/ports/NRF5') 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