converted files to cpp continued stubs
This commit is contained in:
parent
39d2a49ca1
commit
cb121b9faf
@ -2,6 +2,5 @@ add_subdirectory(spi)
|
|||||||
add_subdirectory(devicetest)
|
add_subdirectory(devicetest)
|
||||||
|
|
||||||
target_sources(${TARGET_NAME} PRIVATE
|
target_sources(${TARGET_NAME} PRIVATE
|
||||||
interrupts.c
|
|
||||||
dma_interrupts.c
|
dma_interrupts.c
|
||||||
)
|
)
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
#ifndef FSFW_HAL_STM32H7_DMA_INTERRUPTS_H_
|
#ifndef FSFW_HAL_STM32H7_DMA_INTERRUPTS_H_
|
||||||
#define FSFW_HAL_STM32H7_DMA_INTERRUPTS_H_
|
#define FSFW_HAL_STM32H7_DMA_INTERRUPTS_H_
|
||||||
|
|
||||||
#include "interrupts.h"
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include "interrupts.h"
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
DMA_1 = 0,
|
DMA_1 = 0,
|
||||||
DMA_2 = 1
|
DMA_2 = 1
|
||||||
|
@ -1,2 +0,0 @@
|
|||||||
#include "interrupts.h"
|
|
||||||
#include <stddef.h>
|
|
@ -1,8 +1,8 @@
|
|||||||
target_sources(${TARGET_NAME} PRIVATE
|
target_sources(${TARGET_NAME} PRIVATE
|
||||||
spiCore.c
|
spiCore.cpp
|
||||||
spiDefinitions.cpp
|
spiDefinitions.cpp
|
||||||
interrupts.c
|
spiInterrupts.cpp
|
||||||
mspInit.c
|
mspInit.cpp
|
||||||
SpiCookie.cpp
|
SpiCookie.cpp
|
||||||
SpiComIF.cpp
|
SpiComIF.cpp
|
||||||
)
|
)
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
#include "SpiComIF.h"
|
#include "SpiComIF.h"
|
||||||
|
|
||||||
SpiComIF::SpiComIF(object_id_t objectId): SystemObject(objectId) {
|
SpiComIF::SpiComIF(object_id_t objectId, SPI_TypeDef* spiInstance,
|
||||||
|
spi::TransferModes transferMode): SystemObject(objectId) {
|
||||||
}
|
}
|
||||||
|
|
||||||
ReturnValue_t SpiComIF::initializeInterface(CookieIF *cookie) {
|
ReturnValue_t SpiComIF::initializeInterface(CookieIF *cookie) {
|
||||||
|
@ -1,14 +1,19 @@
|
|||||||
#ifndef FSFW_HAL_STM32H7_SPI_SPICOMIF_H_
|
#ifndef FSFW_HAL_STM32H7_SPI_SPICOMIF_H_
|
||||||
#define FSFW_HAL_STM32H7_SPI_SPICOMIF_H_
|
#define FSFW_HAL_STM32H7_SPI_SPICOMIF_H_
|
||||||
|
|
||||||
|
|
||||||
#include "fsfw/devicehandlers/DeviceCommunicationIF.h"
|
#include "fsfw/devicehandlers/DeviceCommunicationIF.h"
|
||||||
#include "fsfw/objectmanager/SystemObject.h"
|
#include "fsfw/objectmanager/SystemObject.h"
|
||||||
|
|
||||||
|
#include "fsfw_hal/stm32h7/spi/spiDefinitions.h"
|
||||||
|
#include "stm32h7xx_hal_spi.h"
|
||||||
|
#include "stm32h743xx.h"
|
||||||
|
|
||||||
class SpiComIF:
|
class SpiComIF:
|
||||||
public SystemObject,
|
public SystemObject,
|
||||||
public DeviceCommunicationIF {
|
public DeviceCommunicationIF {
|
||||||
public:
|
public:
|
||||||
SpiComIF(object_id_t objectId);
|
SpiComIF(object_id_t objectId, SPI_TypeDef* spiInstance, spi::TransferModes transferMode);
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
// DeviceCommunicationIF overrides
|
// DeviceCommunicationIF overrides
|
||||||
@ -21,7 +26,7 @@ protected:
|
|||||||
virtual ReturnValue_t readReceivedMessage(CookieIF *cookie,
|
virtual ReturnValue_t readReceivedMessage(CookieIF *cookie,
|
||||||
uint8_t **buffer, size_t *size) override;
|
uint8_t **buffer, size_t *size) override;
|
||||||
private:
|
private:
|
||||||
|
SPI_HandleTypeDef spiHandle;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,4 +1,9 @@
|
|||||||
#include "SpiCookie.h"
|
#include "SpiCookie.h"
|
||||||
|
|
||||||
SpiCookie::SpiCookie() {
|
|
||||||
|
|
||||||
|
SpiCookie::SpiCookie(address_t deviceAddress, spi::SpiBus spiIdx, uint32_t spiSpeed,
|
||||||
|
spi::SpiModes spiMode, uint16_t chipSelectGpioPin, GPIO_TypeDef* chipSelectGpioPort):
|
||||||
|
deviceAddress(deviceAddress), spiIdx(spiIdx), spiSpeed(spiSpeed), spiMode(spiMode),
|
||||||
|
chipSelectGpioPin(chipSelectGpioPin), chipSelectGpioPort(chipSelectGpioPort) {
|
||||||
}
|
}
|
||||||
|
@ -1,13 +1,23 @@
|
|||||||
#ifndef FSFW_HAL_STM32H7_SPI_SPICOOKIE_H_
|
#ifndef FSFW_HAL_STM32H7_SPI_SPICOOKIE_H_
|
||||||
#define FSFW_HAL_STM32H7_SPI_SPICOOKIE_H_
|
#define FSFW_HAL_STM32H7_SPI_SPICOOKIE_H_
|
||||||
|
|
||||||
|
#include "spiDefinitions.h"
|
||||||
|
|
||||||
#include "fsfw/devicehandlers/CookieIF.h"
|
#include "fsfw/devicehandlers/CookieIF.h"
|
||||||
|
|
||||||
|
#include "stm32h743xx.h"
|
||||||
|
|
||||||
class SpiCookie: public CookieIF {
|
class SpiCookie: public CookieIF {
|
||||||
public:
|
public:
|
||||||
SpiCookie();
|
SpiCookie(address_t deviceAddress, spi::SpiBus spiIdx, uint32_t spiSpeed, spi::SpiModes spiMode,
|
||||||
|
uint16_t chipSelectGpioPin, GPIO_TypeDef* chipSelectGpioPort);
|
||||||
private:
|
private:
|
||||||
|
address_t deviceAddress;
|
||||||
|
spi::SpiBus spiIdx;
|
||||||
|
uint32_t spiSpeed;
|
||||||
|
spi::SpiModes spiMode;
|
||||||
|
uint16_t chipSelectGpioPin;
|
||||||
|
GPIO_TypeDef* chipSelectGpioPort;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
#include "mspInit.h"
|
#include "mspInit.h"
|
||||||
#include "spiConf.h"
|
#include "spiConf.h"
|
||||||
#include "spiCore.h"
|
#include "spiCore.h"
|
||||||
|
#include "spiInterrupts.h"
|
||||||
#include "../dma_interrupts.h"
|
#include "../dma_interrupts.h"
|
||||||
#include "interrupts.h"
|
|
||||||
|
|
||||||
#include "stm32h743xx.h"
|
#include "stm32h743xx.h"
|
||||||
#include "stm32h7xx_hal_spi.h"
|
#include "stm32h7xx_hal_spi.h"
|
||||||
@ -90,20 +90,20 @@ void hal_spi_msp_init_dma(void *spi_handle) {
|
|||||||
/*##-4- Configure the NVIC for DMA #########################################*/
|
/*##-4- Configure the NVIC for DMA #########################################*/
|
||||||
/* NVIC configuration for DMA transfer complete interrupt (SPI1_RX) */
|
/* NVIC configuration for DMA transfer complete interrupt (SPI1_RX) */
|
||||||
// Assign the interrupt handler
|
// Assign the interrupt handler
|
||||||
assign_dma_user_handler(DMA_2, 2, &dma_rx_irq_handler, hdma_rx);
|
assign_dma_user_handler(DMA_2, DMAStreams::STREAM_2, &dma_rx_irq_handler, hdma_rx);
|
||||||
HAL_NVIC_SetPriority(SPIx_DMA_RX_IRQn, 1, 0);
|
HAL_NVIC_SetPriority(SPIx_DMA_RX_IRQn, 1, 0);
|
||||||
HAL_NVIC_EnableIRQ(SPIx_DMA_RX_IRQn);
|
HAL_NVIC_EnableIRQ(SPIx_DMA_RX_IRQn);
|
||||||
|
|
||||||
/* NVIC configuration for DMA transfer complete interrupt (SPI1_TX) */
|
/* NVIC configuration for DMA transfer complete interrupt (SPI1_TX) */
|
||||||
// Assign the interrupt handler
|
// Assign the interrupt handler
|
||||||
assign_dma_user_handler(DMA_2, 3, &dma_tx_irq_handler, hdma_tx);
|
assign_dma_user_handler(DMA_2, DMAStreams::STREAM_3, &dma_tx_irq_handler, hdma_tx);
|
||||||
HAL_NVIC_SetPriority(SPIx_DMA_TX_IRQn, 1, 1);
|
HAL_NVIC_SetPriority(SPIx_DMA_TX_IRQn, 1, 1);
|
||||||
HAL_NVIC_EnableIRQ(SPIx_DMA_TX_IRQn);
|
HAL_NVIC_EnableIRQ(SPIx_DMA_TX_IRQn);
|
||||||
|
|
||||||
/*##-5- Configure the NVIC for SPI #########################################*/
|
/*##-5- Configure the NVIC for SPI #########################################*/
|
||||||
/* NVIC configuration for SPI transfer complete interrupt (SPI1) */
|
/* NVIC configuration for SPI transfer complete interrupt (SPI1) */
|
||||||
// Assign the interrupt handler
|
// Assign the interrupt handler
|
||||||
assign_spi_user_handler(SPI_1, &spi1_irq_handler, hspi);
|
assign_spi_user_handler(spi::SPI_1, &spi1_irq_handler, hspi);
|
||||||
HAL_NVIC_SetPriority(SPIx_IRQn, 1, 0);
|
HAL_NVIC_SetPriority(SPIx_IRQn, 1, 0);
|
||||||
HAL_NVIC_EnableIRQ(SPIx_IRQn);
|
HAL_NVIC_EnableIRQ(SPIx_IRQn);
|
||||||
}
|
}
|
||||||
@ -195,7 +195,7 @@ void hal_spi_msp_deinit_polling(void *hspi) {
|
|||||||
void hal_spi_msp_init_interrupt(void *hspi) {
|
void hal_spi_msp_init_interrupt(void *hspi) {
|
||||||
hal_spi_msp_init_polling(hspi);
|
hal_spi_msp_init_polling(hspi);
|
||||||
// Configure the NVIC for SPI
|
// Configure the NVIC for SPI
|
||||||
assign_spi_user_handler(SPI_1, &spi1_irq_handler, hspi);
|
assign_spi_user_handler(spi::SPI_1, &spi1_irq_handler, hspi);
|
||||||
HAL_NVIC_SetPriority(SPIx_IRQn, 1, 0);
|
HAL_NVIC_SetPriority(SPIx_IRQn, 1, 0);
|
||||||
HAL_NVIC_EnableIRQ(SPIx_IRQn);
|
HAL_NVIC_EnableIRQ(SPIx_IRQn);
|
||||||
}
|
}
|
@ -1,15 +1,15 @@
|
|||||||
#include "spiCore.h"
|
#include "spiCore.h"
|
||||||
#include <stdio.h>
|
#include <cstdio>
|
||||||
|
|
||||||
SPI_HandleTypeDef* spiHandle = NULL;
|
SPI_HandleTypeDef* spiHandle = nullptr;
|
||||||
DMA_HandleTypeDef* hdma_tx = NULL;
|
DMA_HandleTypeDef* hdma_tx = nullptr;
|
||||||
DMA_HandleTypeDef* hdma_rx = NULL;
|
DMA_HandleTypeDef* hdma_rx = nullptr;
|
||||||
|
|
||||||
msp_func_t msp_init_func = NULL;
|
msp_func_t msp_init_func = nullptr;
|
||||||
void* msp_init_args = NULL;
|
void* msp_init_args = nullptr;
|
||||||
|
|
||||||
msp_func_t msp_deinit_func = NULL;
|
msp_func_t msp_deinit_func = nullptr;
|
||||||
void* msp_deinit_args = NULL;
|
void* msp_deinit_args = nullptr;
|
||||||
|
|
||||||
void set_dma_handles(DMA_HandleTypeDef* txHandle, DMA_HandleTypeDef* rxHandle) {
|
void set_dma_handles(DMA_HandleTypeDef* txHandle, DMA_HandleTypeDef* rxHandle) {
|
||||||
hdma_tx = txHandle;
|
hdma_tx = txHandle;
|
||||||
@ -64,7 +64,7 @@ void get_msp_deinit_function(msp_func_t* deinit_func, void **args) {
|
|||||||
* @param hspi: SPI handle pointer
|
* @param hspi: SPI handle pointer
|
||||||
* @retval None
|
* @retval None
|
||||||
*/
|
*/
|
||||||
void HAL_SPI_MspInit(SPI_HandleTypeDef *hspi) {
|
extern "C" void HAL_SPI_MspInit(SPI_HandleTypeDef *hspi) {
|
||||||
if(msp_init_func != NULL) {
|
if(msp_init_func != NULL) {
|
||||||
msp_init_func(msp_init_args);
|
msp_init_func(msp_init_args);
|
||||||
}
|
}
|
||||||
@ -81,7 +81,7 @@ void HAL_SPI_MspInit(SPI_HandleTypeDef *hspi) {
|
|||||||
* @param hspi: SPI handle pointer
|
* @param hspi: SPI handle pointer
|
||||||
* @retval None
|
* @retval None
|
||||||
*/
|
*/
|
||||||
void HAL_SPI_MspDeInit(SPI_HandleTypeDef *hspi) {
|
extern "C" void HAL_SPI_MspDeInit(SPI_HandleTypeDef *hspi) {
|
||||||
if(msp_deinit_func != NULL) {
|
if(msp_deinit_func != NULL) {
|
||||||
msp_deinit_func(msp_deinit_args);
|
msp_deinit_func(msp_deinit_args);
|
||||||
}
|
}
|
@ -8,7 +8,7 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
typedef void (*msp_func_t) (void* args);
|
using msp_func_t = void (*) (void* args);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Assign MSP init functions. Important for SPI configuration
|
* Assign MSP init functions. Important for SPI configuration
|
||||||
|
@ -8,6 +8,11 @@
|
|||||||
|
|
||||||
namespace spi {
|
namespace spi {
|
||||||
|
|
||||||
|
enum SpiBus {
|
||||||
|
SPI_1,
|
||||||
|
SPI_2
|
||||||
|
};
|
||||||
|
|
||||||
enum TransferModes {
|
enum TransferModes {
|
||||||
POLLING,
|
POLLING,
|
||||||
INTERRUPT,
|
INTERRUPT,
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#include "interrupts.h"
|
#include "spiInterrupts.h"
|
||||||
|
|
||||||
#include "stm32h7xx_hal.h"
|
#include "stm32h7xx_hal.h"
|
||||||
#include "stm32h7xx_hal_dma.h"
|
#include "stm32h7xx_hal_dma.h"
|
||||||
@ -7,41 +7,12 @@
|
|||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
|
|
||||||
|
|
||||||
void (*spi1_user_handler) (void* args) = NULL;
|
void (*spi1_user_handler) (void* args) = nullptr;
|
||||||
void * spi1_user_args = NULL;
|
void * spi1_user_args = nullptr;
|
||||||
|
|
||||||
void (*spi2_user_handler) (void* args) = NULL;
|
void (*spi2_user_handler) (void* args) = nullptr;
|
||||||
void * spi2_user_args = NULL;
|
void * spi2_user_args = nullptr;
|
||||||
|
|
||||||
void assign_spi_user_handler(SpiBus spi_idx, user_handler_t user_handler, user_args_t user_args) {
|
|
||||||
if(spi_idx == SPI_1) {
|
|
||||||
spi1_user_handler = user_handler;
|
|
||||||
spi1_user_args = user_args;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
spi2_user_handler = user_handler;
|
|
||||||
spi2_user_args = user_args;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Do not change these function names! They need to be exactly equal to the name of the functions
|
|
||||||
defined in the startup_stm32h743xx.s files! */
|
|
||||||
|
|
||||||
void SPI1_IRQHandler() {
|
|
||||||
if(spi1_user_handler != NULL) {
|
|
||||||
spi1_user_handler(spi1_user_args);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Default_Handler();
|
|
||||||
}
|
|
||||||
|
|
||||||
void SPI2_IRQHandler() {
|
|
||||||
if(spi2_user_handler != NULL) {
|
|
||||||
spi2_user_handler(spi2_user_args);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Default_Handler();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief This function handles DMA Rx interrupt request.
|
* @brief This function handles DMA Rx interrupt request.
|
||||||
@ -71,3 +42,35 @@ void spi1_irq_handler(void* spi_handle)
|
|||||||
HAL_SPI_IRQHandler((SPI_HandleTypeDef *) spi_handle);
|
HAL_SPI_IRQHandler((SPI_HandleTypeDef *) spi_handle);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void assign_spi_user_handler(spi::SpiBus spi_idx, user_handler_t user_handler,
|
||||||
|
user_args_t user_args) {
|
||||||
|
if(spi_idx == spi::SpiBus::SPI_1) {
|
||||||
|
spi1_user_handler = user_handler;
|
||||||
|
spi1_user_args = user_args;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
spi2_user_handler = user_handler;
|
||||||
|
spi2_user_args = user_args;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Do not change these function names! They need to be exactly equal to the name of the functions
|
||||||
|
defined in the startup_stm32h743xx.s files! */
|
||||||
|
|
||||||
|
extern "C" void SPI1_IRQHandler() {
|
||||||
|
if(spi1_user_handler != NULL) {
|
||||||
|
spi1_user_handler(spi1_user_args);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Default_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
extern "C" void SPI2_IRQHandler() {
|
||||||
|
if(spi2_user_handler != NULL) {
|
||||||
|
spi2_user_handler(spi2_user_args);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Default_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -2,23 +2,20 @@
|
|||||||
#define FSFW_HAL_STM32H7_SPI_INTERRUPTS_H_
|
#define FSFW_HAL_STM32H7_SPI_INTERRUPTS_H_
|
||||||
|
|
||||||
#include "../interrupts.h"
|
#include "../interrupts.h"
|
||||||
|
#include "spiDefinitions.h"
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
SPI_1,
|
|
||||||
SPI_2
|
|
||||||
} SpiBus;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Assign a user interrupt handler for SPI bus 1, allowing to pass an arbitrary argument as well.
|
* Assign a user interrupt handler for SPI bus 1, allowing to pass an arbitrary argument as well.
|
||||||
* Generally, this argument will be the related SPI handle.
|
* Generally, this argument will be the related SPI handle.
|
||||||
* @param user_handler
|
* @param user_handler
|
||||||
* @param user_args
|
* @param user_args
|
||||||
*/
|
*/
|
||||||
void assign_spi_user_handler(SpiBus spiBus, user_handler_t user_handler, user_args_t user_args);
|
void assign_spi_user_handler(spi::SpiBus spiBus, user_handler_t user_handler,
|
||||||
|
user_args_t user_args);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generic interrupt handlers supplied for convenience. Do not call these directly! Set them
|
* Generic interrupt handlers supplied for convenience. Do not call these directly! Set them
|
Loading…
Reference in New Issue
Block a user