diff options
Diffstat (limited to 'os/hal')
-rw-r--r-- | os/hal/ports/KINETIS/LLD/ADCv1/hal_adc_lld.h | 145 | ||||
-rw-r--r-- | os/hal/ports/KINETIS/LLD/SPIv1/hal_spi_lld.h | 85 | ||||
-rw-r--r-- | os/hal/ports/NRF5/LLD/ADCv1/hal_adc_lld.h | 140 | ||||
-rw-r--r-- | os/hal/ports/NRF5/LLD/SPIv1/hal_spi_lld.h | 124 | ||||
-rw-r--r-- | os/hal/ports/STM32/LLD/COMPv1/hal_comp_lld.c | 2 | ||||
-rwxr-xr-x | os/hal/ports/STM32/LLD/CRCv1/hal_crc_lld.c | 2 | ||||
-rw-r--r-- | os/hal/ports/STM32/LLD/FSMCv1/hal_nand_lld.c | 10 |
7 files changed, 108 insertions, 400 deletions
diff --git a/os/hal/ports/KINETIS/LLD/ADCv1/hal_adc_lld.h b/os/hal/ports/KINETIS/LLD/ADCv1/hal_adc_lld.h index 2d11a7d..45cf95b 100644 --- a/os/hal/ports/KINETIS/LLD/ADCv1/hal_adc_lld.h +++ b/os/hal/ports/KINETIS/LLD/ADCv1/hal_adc_lld.h @@ -201,132 +201,47 @@ typedef enum { /**
* @brief Type of a structure representing an ADC driver.
*/
-typedef struct ADCDriver ADCDriver;
+typedef struct hal_adc_driver 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
- */
-typedef void (*adccallback_t)(ADCDriver *adcp, adcsample_t *buffer, size_t n);
-
-/**
- * @brief ADC error callback type.
- *
- * @param[in] adcp pointer to the @p ADCDriver object triggering the
- * callback
- * @param[in] err ADC error code
+ * @brief Low level fields of the ADC configuration structure.
*/
-typedef void (*adcerrorcallback_t)(ADCDriver *adcp, adcerror_t err);
-
-/**
- * @brief Conversion group configuration structure.
- * @details This implementation-dependent structure describes a conversion
- * operation.
- */
-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;
- /**
- * @brief Error callback or @p NULL.
- */
- adcerrorcallback_t error_cb;
- /* End of the mandatory fields.*/
- /**
- * @brief Bitmask of channels for ADC conversion.
- */
- uint32_t channel_mask;
- /**
- * @brief ADC CFG1 register initialization data.
- * @note All the required bits must be defined into this field.
- */
- uint32_t cfg1;
- /**
- * @brief ADC SC3 register initialization data.
- * @note All the required bits must be defined into this field.
- */
+#define adc_lld_configuration_group_fields \
+ /** \
+ * @brief Bitmask of channels for ADC conversion. \
+ */ \
+ uint32_t channel_mask; \
+ /** \
+ * @brief ADC CFG1 register initialization data. \
+ * @note All the required bits must be defined into this field. \
+ */ \
+ uint32_t cfg1; \
+ /** \
+ * @brief ADC SC3 register initialization data. \
+ * @note All the required bits must be defined into this field. \
+ */ \
uint32_t sc3;
-} ADCConversionGroup;
+
/**
- * @brief Driver configuration structure.
- * @note It could be empty on some architectures.
+ * @brief Low level fields of the ADC configuration structure.
*/
-typedef struct {
- /* Perform first time calibration */
+#define adc_lld_config_fields \
+ /* Perform first time calibration */ \
bool calibrate;
-} ADCConfig;
/**
- * @brief Structure representing an ADC driver.
+ * @brief Low level fields of the ADC driver structure.
*/
-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.
- */
- ADC_TypeDef *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;
-};
+#define adc_lld_driver_fields \
+ /* Pointer to the ADCx registers block.*/ \
+ ADC_TypeDef *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. */
diff --git a/os/hal/ports/KINETIS/LLD/SPIv1/hal_spi_lld.h b/os/hal/ports/KINETIS/LLD/SPIv1/hal_spi_lld.h index d25dd75..cadc240 100644 --- a/os/hal/ports/KINETIS/LLD/SPIv1/hal_spi_lld.h +++ b/os/hal/ports/KINETIS/LLD/SPIv1/hal_spi_lld.h @@ -106,11 +106,6 @@ /*===========================================================================*/ /** - * @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 @@ -119,77 +114,23 @@ typedef struct SPIDriver SPIDriver; typedef void (*spicallback_t)(SPIDriver *spip); /** - * @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; - /* End of the mandatory fields.*/ - /** - * @brief The chip select line port - when not using pcs. - */ - ioportid_t ssport; - /** - * @brief The chip select line pad number - when not using pcs. - */ - uint16_t sspad; - /** - * @brief SPI initialization data. - */ +#define spi_lld_config_fields \ + /* @brief SPI initialization data. */ \ uint32_t tar0; -} SPIConfig; -/** - * @brief Structure representing a SPI driver. - */ -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__) - /** - * @brief Mutex protecting the bus. - */ - mutex_t mutex; -#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 SPIx registers block. - */ - SPI_TypeDef *spi; - /** - * @brief Number of bytes/words of data to transfer. - */ - size_t count; - /** - * @brief Word size in bytes. - */ - size_t word_size; - /** - * @brief Pointer to the buffer with data to send. - */ - const uint8_t *txbuf; - /** - * @brief Pointer to the buffer to put received data. - */ +#define spi_lld_driver_fields \ + /* @brief Pointer to the SPIx registers block. */ \ + SPI_TypeDef *spi; \ + /* @brief Number of bytes/words of data to transfer. */ \ + size_t count; \ + /* @brief Word size in bytes. */ \ + size_t word_size; \ + /* @brief Pointer to the buffer with data to send. */ \ + const uint8_t *txbuf; \ + /* @brief Pointer to the buffer to put received data. */ \ uint8_t *rxbuf; -}; /*===========================================================================*/ /* Driver macros. */ 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. */
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 @@ -80,19 +80,6 @@ /*===========================================================================*/
/**
- * @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
*/
typedef enum {
@@ -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. */
diff --git a/os/hal/ports/STM32/LLD/COMPv1/hal_comp_lld.c b/os/hal/ports/STM32/LLD/COMPv1/hal_comp_lld.c index b1dde2f..a54290e 100644 --- a/os/hal/ports/STM32/LLD/COMPv1/hal_comp_lld.c +++ b/os/hal/ports/STM32/LLD/COMPv1/hal_comp_lld.c @@ -303,7 +303,7 @@ void comp_ext_lld_channel_enable(COMPDriver *compp, uint32_t channel) { if (channel < 32) { #endif /* Masked out lines must not be touched by this driver.*/ - if ((cmask & STM32_EXTI_IMR_MASK) != 0U) { + if ((cmask & STM32_EXTI_IMR1_MASK) != 0U) { return; } diff --git a/os/hal/ports/STM32/LLD/CRCv1/hal_crc_lld.c b/os/hal/ports/STM32/LLD/CRCv1/hal_crc_lld.c index 882022b..993a3ab 100755 --- a/os/hal/ports/STM32/LLD/CRCv1/hal_crc_lld.c +++ b/os/hal/ports/STM32/LLD/CRCv1/hal_crc_lld.c @@ -235,7 +235,7 @@ void crc_lld_start(CRCDriver *crcp) { */ void crc_lld_stop(CRCDriver *crcp) { #if CRC_USE_DMA == TRUE - dmaStreamRelease(crcp->dma); + dmaStreamFree(crcp->dma); #else (void)crcp; #endif diff --git a/os/hal/ports/STM32/LLD/FSMCv1/hal_nand_lld.c b/os/hal/ports/STM32/LLD/FSMCv1/hal_nand_lld.c index 5729f92..cc6dc20 100644 --- a/os/hal/ports/STM32/LLD/FSMCv1/hal_nand_lld.c +++ b/os/hal/ports/STM32/LLD/FSMCv1/hal_nand_lld.c @@ -328,10 +328,10 @@ void nand_lld_start(NANDDriver *nandp) { fsmc_start(&FSMCD1); if (nandp->state == NAND_STOP) { - b = dmaStreamAllocate(nandp->dma, - STM32_EMC_FSMC1_IRQ_PRIORITY, - (stm32_dmaisr_t)nand_lld_serve_transfer_end_irq, - (void *)nandp); + b = dmaStreamAlloc(nandp->dma, + STM32_EMC_FSMC1_IRQ_PRIORITY, + (stm32_dmaisr_t)nand_lld_serve_transfer_end_irq, + (void *)nandp); osalDbgAssert(!b, "stream already allocated"); #if AHB_TRANSACTION_WIDTH == 4 @@ -377,7 +377,7 @@ void nand_lld_start(NANDDriver *nandp) { void nand_lld_stop(NANDDriver *nandp) { if (nandp->state == NAND_READY) { - dmaStreamRelease(nandp->dma); + dmaStreamFree(nandp->dma); nandp->nand->PCR &= ~FSMC_PCR_PBKEN; nand_ready_isr_disable(nandp); nandp->isr_handler = NULL; |