adding irq abstraction

This commit is contained in:
Robin Müller 2021-06-03 15:12:53 +02:00
parent 0d9c3eef4f
commit 72aa8fec69
No known key found for this signature in database
GPG Key ID: 71B58F8A3CDFA9AC
4 changed files with 52 additions and 46 deletions

View File

@ -43,6 +43,6 @@
#define SPIx_DMA_RX_IRQHandler DMA2_Stream2_IRQHandler #define SPIx_DMA_RX_IRQHandler DMA2_Stream2_IRQHandler
#define SPIx_IRQn SPI1_IRQn #define SPIx_IRQn SPI1_IRQn
#define SPIx_IRQHandler SPI1_IRQHandler #define SPIx_IRQHandler SPIx_IRQHandler
#endif /* FSFW_HAL_STM32H7_DEVICETEST_SPICONF_H_ */ #endif /* FSFW_HAL_STM32H7_DEVICETEST_SPICONF_H_ */

View File

@ -7,7 +7,6 @@
extern "C" { extern "C" {
#endif #endif
void setDmaHandles(DMA_HandleTypeDef* txHandle, DMA_HandleTypeDef* rxHandle);
#ifdef __cplusplus #ifdef __cplusplus
} }

View File

@ -1,5 +1,7 @@
#include "spiConf.h" #include "spiConf.h"
#include "fsfw_hal/stm32h7/spi/spiCore.h"
#include "stm32h743xx.h" #include "stm32h743xx.h"
#include "stm32h7xx_hal_spi.h" #include "stm32h7xx_hal_spi.h"
#include "stm32h7xx_hal_dma.h" #include "stm32h7xx_hal_dma.h"
@ -7,14 +9,6 @@
#include <stdio.h> #include <stdio.h>
DMA_HandleTypeDef* hdma_tx = NULL;
DMA_HandleTypeDef* hdma_rx = NULL;
SPI_HandleTypeDef* spi_handle = NULL;
void setDmaHandles(DMA_HandleTypeDef* txHandle, DMA_HandleTypeDef* rxHandle) {
hdma_tx = txHandle;
hdma_rx = rxHandle;
}
/** /**
* @brief SPI MSP Initialization * @brief SPI MSP Initialization
@ -33,8 +27,11 @@ void HAL_SPI_MspInit(SPI_HandleTypeDef *hspi)
printf("HAL_SPI_MspInit: Invalid SPI handle!\n"); printf("HAL_SPI_MspInit: Invalid SPI handle!\n");
return; return;
} }
spi_handle = hspi; assignSpiHandle(hspi);
DMA_HandleTypeDef* hdma_tx = NULL;
DMA_HandleTypeDef* hdma_rx = NULL;
getDmaHandles(&hdma_tx, &hdma_rx);
if(hdma_tx == NULL || hdma_rx == NULL) { if(hdma_tx == NULL || hdma_rx == NULL) {
printf("HAL_SPI_MspInit: Invalid DMA handles. Make sure to call setDmaHandles!\n"); printf("HAL_SPI_MspInit: Invalid DMA handles. Make sure to call setDmaHandles!\n");
return; return;
@ -140,6 +137,8 @@ void HAL_SPI_MspDeInit(SPI_HandleTypeDef *hspi)
{ {
if(hspi->Instance == SPIx) if(hspi->Instance == SPIx)
{ {
/*##-1- Reset peripherals ##################################################*/ /*##-1- Reset peripherals ##################################################*/
SPIx_FORCE_RESET(); SPIx_FORCE_RESET();
SPIx_RELEASE_RESET(); SPIx_RELEASE_RESET();
@ -152,11 +151,19 @@ void HAL_SPI_MspDeInit(SPI_HandleTypeDef *hspi)
/* Deconfigure SPI MOSI */ /* Deconfigure SPI MOSI */
HAL_GPIO_DeInit(SPIx_MOSI_GPIO_PORT, SPIx_MOSI_PIN); HAL_GPIO_DeInit(SPIx_MOSI_GPIO_PORT, SPIx_MOSI_PIN);
/*##-3- Disable the DMA ####################################################*/ DMA_HandleTypeDef* hdma_tx = NULL;
/* De-Initialize the DMA associated to transmission process */ DMA_HandleTypeDef* hdma_rx = NULL;
HAL_DMA_DeInit(hdma_tx); getDmaHandles(&hdma_tx, &hdma_rx);
/* De-Initialize the DMA associated to reception process */ if(hdma_tx == NULL || hdma_rx == NULL) {
HAL_DMA_DeInit(hdma_rx); printf("HAL_SPI_MspInit: Invalid DMA handles. Make sure to call setDmaHandles!\n");
}
else {
/*##-3- Disable the DMA ####################################################*/
/* De-Initialize the DMA associated to transmission process */
HAL_DMA_DeInit(hdma_tx);
/* De-Initialize the DMA associated to reception process */
HAL_DMA_DeInit(hdma_rx);
}
/*##-4- Disable the NVIC for DMA ###########################################*/ /*##-4- Disable the NVIC for DMA ###########################################*/
HAL_NVIC_DisableIRQ(SPIx_DMA_TX_IRQn); HAL_NVIC_DisableIRQ(SPIx_DMA_TX_IRQn);
@ -167,32 +174,32 @@ void HAL_SPI_MspDeInit(SPI_HandleTypeDef *hspi)
} }
} }
/** ///**
* @brief This function handles DMA Rx interrupt request. // * @brief This function handles DMA Rx interrupt request.
* @param None // * @param None
* @retval None // * @retval None
*/ // */
void SPIx_DMA_RX_IRQHandler(void) //void SPIx_DMA_RX_IRQHandler(void)
{ //{
HAL_DMA_IRQHandler(spi_handle->hdmarx); // HAL_DMA_IRQHandler(getSpiHandle()->hdmarx);
} //}
//
/** ///**
* @brief This function handles DMA Tx interrupt request. // * @brief This function handles DMA Tx interrupt request.
* @param None // * @param None
* @retval None // * @retval None
*/ // */
void SPIx_DMA_TX_IRQHandler(void) //void SPIx_DMA_TX_IRQHandler(void)
{ //{
HAL_DMA_IRQHandler(spi_handle->hdmatx); // HAL_DMA_IRQHandler(getSpiHandle()->hdmatx);
} //}
//
/** ///**
* @brief This function handles SPIx interrupt request. // * @brief This function handles SPIx interrupt request.
* @param None // * @param None
* @retval None // * @retval None
*/ // */
void SPIx_IRQHandler(void) //void SPIx_IRQHandler(void)
{ //{
HAL_SPI_IRQHandler(spi_handle); // HAL_SPI_IRQHandler(getSpiHandle());
} //}

@ -1 +1 @@
Subproject commit dc6327b909005c968a4794c3d8b2f9ac94ad59e1 Subproject commit 78a66e1b677ae0daa532db222ecdd0097c01399a