aboutsummaryrefslogtreecommitdiffstats
path: root/os/hal
diff options
context:
space:
mode:
Diffstat (limited to 'os/hal')
-rw-r--r--os/hal/ports/KINETIS/LLD/ADCv1/hal_adc_lld.h145
-rw-r--r--os/hal/ports/KINETIS/LLD/SPIv1/hal_spi_lld.h85
-rw-r--r--os/hal/ports/NRF5/LLD/ADCv1/hal_adc_lld.h140
-rw-r--r--os/hal/ports/NRF5/LLD/SPIv1/hal_spi_lld.h124
-rw-r--r--os/hal/ports/STM32/LLD/COMPv1/hal_comp_lld.c2
-rwxr-xr-xos/hal/ports/STM32/LLD/CRCv1/hal_crc_lld.c2
-rw-r--r--os/hal/ports/STM32/LLD/FSMCv1/hal_nand_lld.c10
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;