diff --git a/stm32h7/CMakeLists.txt b/stm32h7/CMakeLists.txt index 730f7f1..e568b38 100644 --- a/stm32h7/CMakeLists.txt +++ b/stm32h7/CMakeLists.txt @@ -1,2 +1,6 @@ add_subdirectory(spi) add_subdirectory(devicetest) + +target_sources(${TARGET_NAME} PRIVATE + interrupts.c +) diff --git a/stm32h7/interrupts.c b/stm32h7/interrupts.c new file mode 100644 index 0000000..99e0272 --- /dev/null +++ b/stm32h7/interrupts.c @@ -0,0 +1,35 @@ +#include "interrupts.h" + +#include + +void Default_Handler(); + +void (*dma2_stream3_user_handler) (void* args) = NULL; +void * dma2_stream3_user_args = NULL; + +void (*dma2_stream2_user_handler) (void* args) = NULL; +void * dma2_stream2_user_args = NULL; + +void assign_dma2_stream2_user_handler(user_handler_t user_handler, user_args_t user_args) { + dma2_stream2_user_handler = user_handler; + dma2_stream2_user_args = user_args; +} + +void assign_dma2_stream3_user_handler(user_handler_t user_handler, user_args_t user_args) { + dma2_stream3_user_handler = user_handler; + dma2_stream3_user_args = user_args; +} + +void DMA2_Stream3_IRQHandler() { + if(dma2_stream3_user_handler != NULL) { + dma2_stream3_user_handler(dma2_stream3_user_args); + } + Default_Handler(); +} + +void DMA2_Stream2_IRQHandler() { + if(dma2_stream2_user_handler != NULL) { + dma2_stream2_user_handler(dma2_stream2_user_args); + } + Default_Handler(); +} diff --git a/stm32h7/interrupts.h b/stm32h7/interrupts.h new file mode 100644 index 0000000..de4ba81 --- /dev/null +++ b/stm32h7/interrupts.h @@ -0,0 +1,23 @@ +#ifndef FSFW_HAL_STM32H7_INTERRUPTS_H_ +#define FSFW_HAL_STM32H7_INTERRUPTS_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Default handler which is defined in startup file as assembly code. + */ +extern void Default_Handler(); + +typedef void (*user_handler_t) (void*); +typedef void* user_args_t; + +void assign_dma2_stream2_user_handler(user_handler_t user_handler, user_args_t user_args); +void assign_dma2_stream3_user_handler(user_handler_t user_handler, user_args_t user_args); + +#ifdef __cplusplus +} +#endif + +#endif /* FSFW_HAL_STM32H7_INTERRUPTS_H_ */ diff --git a/stm32h7/spi/CMakeLists.txt b/stm32h7/spi/CMakeLists.txt index 99d39dd..b1a3dcb 100644 --- a/stm32h7/spi/CMakeLists.txt +++ b/stm32h7/spi/CMakeLists.txt @@ -1,4 +1,5 @@ target_sources(${TARGET_NAME} PRIVATE spiCore.c spiDefinitions.cpp + interrupts.c ) diff --git a/stm32h7/spi/interrupts.c b/stm32h7/spi/interrupts.c new file mode 100644 index 0000000..bd28771 --- /dev/null +++ b/stm32h7/spi/interrupts.c @@ -0,0 +1,12 @@ +#include "interrupts.h" + +#include + +void SPI1_IRQHandler() { + +} + +void SPI2_IRQHandler() { + +} + diff --git a/stm32h7/spi/interrupts.h b/stm32h7/spi/interrupts.h new file mode 100644 index 0000000..2c7734a --- /dev/null +++ b/stm32h7/spi/interrupts.h @@ -0,0 +1,8 @@ +#ifndef FSFW_HAL_STM32H7_INTERRUPTS_H_ +#define FSFW_HAL_STM32H7_INTERRUPTS_H_ + + + + + +#endif /* FSFW_HAL_STM32H7_INTERRUPTS_H_ */ diff --git a/stm32h7/spi/spiCore.c b/stm32h7/spi/spiCore.c index ebb956d..44aa1a4 100644 --- a/stm32h7/spi/spiCore.c +++ b/stm32h7/spi/spiCore.c @@ -25,32 +25,44 @@ SPI_HandleTypeDef* getSpiHandle() { return spiHandle; } -/** - * @brief This function handles DMA Rx interrupt request. - * @param None - * @retval None - */ -void SPIx_DMA_RX_IRQHandler(void) -{ - HAL_DMA_IRQHandler(spiHandle->hdmarx); -} - -/** - * @brief This function handles DMA Tx interrupt request. - * @param None - * @retval None - */ -void SPIx_DMA_TX_IRQHandler(void) -{ - HAL_DMA_IRQHandler(spiHandle->hdmatx); -} - -/** - * @brief This function handles SPIx interrupt request. - * @param None - * @retval None - */ -void SPIx_IRQHandler(void) -{ - HAL_SPI_IRQHandler(spiHandle); -} +///** +// * @brief This function handles DMA Rx interrupt request. +// * @param None +// * @retval None +// */ +//void SPIx_DMA_RX_IRQHandler(void) +//{ +// HAL_DMA_IRQHandler(spiHandle->hdmarx); +//} +// +///** +// * @brief This function handles DMA Tx interrupt request. +// * @param None +// * @retval None +// */ +//void SPIx_DMA_TX_IRQHandler(void) +//{ +// HAL_DMA_IRQHandler(spiHandle->hdmatx); +//} +// +//void DMA2_Stream3_IRQHandler() { +// SPIx_DMA_TX_IRQHandler(); +//} +// +//void DMA2_Stream2_IRQHandler() { +// SPIx_DMA_RX_IRQHandler(); +//} +// +///** +// * @brief This function handles SPIx interrupt request. +// * @param None +// * @retval None +// */ +//void SPIx_IRQHandler(void) +//{ +// HAL_SPI_IRQHandler(spiHandle); +//} +// +//void SPI1_IRQHandler(void) { +// SPIx_IRQHandler(); +//}