1
0
Fork 0
mirror of https://github.com/betaflight/betaflight.git synced 2025-07-20 14:55:21 +03:00

[H7] Enable transponder

This commit is contained in:
jflyper 2019-05-05 02:37:35 +09:00
parent 77ef37bad0
commit f346336aa8
5 changed files with 19 additions and 6 deletions

View file

@ -80,7 +80,7 @@
uint8_t erlt[TRANSPONDER_DMA_BUFFER_SIZE_ERLT]; // 91-200 uint8_t erlt[TRANSPONDER_DMA_BUFFER_SIZE_ERLT]; // 91-200
} transponderIrDMABuffer_t; } transponderIrDMABuffer_t;
#elif defined(STM32F4) || defined(STM32F7) #elif defined(STM32F4) || defined(STM32F7) || defined(STM32H7)
typedef union transponderIrDMABuffer_s { typedef union transponderIrDMABuffer_s {
uint32_t arcitimer[TRANSPONDER_DMA_BUFFER_SIZE_ARCITIMER]; // 620 uint32_t arcitimer[TRANSPONDER_DMA_BUFFER_SIZE_ARCITIMER]; // 620
@ -96,7 +96,7 @@ typedef struct transponder_s {
uint16_t bitToggleOne; uint16_t bitToggleOne;
uint32_t dma_buffer_size; uint32_t dma_buffer_size;
#if defined(STM32F3) || defined(STM32F4)|| defined(STM32F7) || defined(UNIT_TEST) #if defined(STM32F3) || defined(STM32F4)|| defined(STM32F7) || defined(STM32H7) || defined(UNIT_TEST)
transponderIrDMABuffer_t transponderIrDMABuffer; transponderIrDMABuffer_t transponderIrDMABuffer;
#endif #endif

View file

@ -29,7 +29,7 @@
#include "drivers/transponder_ir.h" #include "drivers/transponder_ir.h"
#include "drivers/transponder_ir_arcitimer.h" #include "drivers/transponder_ir_arcitimer.h"
#if defined(STM32F3) || defined(STM32F4) || defined(STM32F7) || defined(UNIT_TEST) #if defined(STM32F3) || defined(STM32F4) || defined(STM32F7) || defined(STM32H7) || defined(UNIT_TEST)
extern const struct transponderVTable arcitimerTansponderVTable; extern const struct transponderVTable arcitimerTansponderVTable;
static uint16_t dmaBufferOffset; static uint16_t dmaBufferOffset;

View file

@ -28,7 +28,7 @@
#include "drivers/transponder_ir.h" #include "drivers/transponder_ir.h"
#include "drivers/transponder_ir_erlt.h" #include "drivers/transponder_ir_erlt.h"
#if defined(STM32F3) || defined(STM32F4) || defined(STM32F7) || defined(UNIT_TEST) #if defined(STM32F3) || defined(STM32F4) || defined(STM32F7) || defined(STM32H7) || defined(UNIT_TEST)
static uint16_t dmaBufferOffset; static uint16_t dmaBufferOffset;
extern const struct transponderVTable erltTansponderVTable; extern const struct transponderVTable erltTansponderVTable;

View file

@ -28,7 +28,7 @@
#include "drivers/transponder_ir.h" #include "drivers/transponder_ir.h"
#include "drivers/transponder_ir_ilap.h" #include "drivers/transponder_ir_ilap.h"
#if defined(STM32F3) || defined(STM32F4) || defined(STM32F7) || defined(UNIT_TEST) #if defined(STM32F3) || defined(STM32F4) || defined(STM32F7) || defined(STM32H7) || defined(UNIT_TEST)
static uint16_t dmaBufferOffset; static uint16_t dmaBufferOffset;
extern const struct transponderVTable ilapTansponderVTable; extern const struct transponderVTable ilapTansponderVTable;

View file

@ -48,11 +48,15 @@ static uint16_t timerChannel = 0;
static uint8_t output; static uint8_t output;
static uint8_t alternateFunction; static uint8_t alternateFunction;
#if !defined(STM32F7) #if !(defined(STM32F7) || defined(STM32H7))
#error "Transponder (via HAL) not supported on this MCU." #error "Transponder (via HAL) not supported on this MCU."
#endif #endif
#ifdef STM32H7
DMA_RAM transponder_t transponder;
#else
transponder_t transponder; transponder_t transponder;
#endif
bool transponderInitialised = false; bool transponderInitialised = false;
static void TRANSPONDER_DMA_IRQHandler(dmaChannelDescriptor_t* descriptor) static void TRANSPONDER_DMA_IRQHandler(dmaChannelDescriptor_t* descriptor)
@ -85,7 +89,11 @@ void transponderIrHardwareInit(ioTag_t ioTag, transponder_t *transponder)
uint32_t dmaChannel = dmaSpec->channel; uint32_t dmaChannel = dmaSpec->channel;
#else #else
dmaStream_t *dmaRef = timerHardware->dmaRef; dmaStream_t *dmaRef = timerHardware->dmaRef;
#ifdef STM32H7
uint32_t dmaChannel = timerHardware->dmaRequest;
#else
uint32_t dmaChannel = timerHardware->dmaChannel; uint32_t dmaChannel = timerHardware->dmaChannel;
#endif
#endif #endif
if (dmaRef == NULL) { if (dmaRef == NULL) {
@ -119,9 +127,14 @@ void transponderIrHardwareInit(ioTag_t ioTag, transponder_t *transponder)
IOConfigGPIOAF(transponderIO, IO_CONFIG(GPIO_MODE_AF_PP, GPIO_SPEED_FREQ_VERY_HIGH, GPIO_PULLDOWN), timerHardware->alternateFunction); IOConfigGPIOAF(transponderIO, IO_CONFIG(GPIO_MODE_AF_PP, GPIO_SPEED_FREQ_VERY_HIGH, GPIO_PULLDOWN), timerHardware->alternateFunction);
__DMA1_CLK_ENABLE(); __DMA1_CLK_ENABLE();
__DMA2_CLK_ENABLE();
/* Set the parameters to be configured */ /* Set the parameters to be configured */
#ifdef STM32H7
hdma_tim.Init.Request = dmaChannel;
#else
hdma_tim.Init.Channel = dmaChannel; hdma_tim.Init.Channel = dmaChannel;
#endif
hdma_tim.Init.Direction = DMA_MEMORY_TO_PERIPH; hdma_tim.Init.Direction = DMA_MEMORY_TO_PERIPH;
hdma_tim.Init.PeriphInc = DMA_PINC_DISABLE; hdma_tim.Init.PeriphInc = DMA_PINC_DISABLE;
hdma_tim.Init.MemInc = DMA_MINC_ENABLE; hdma_tim.Init.MemInc = DMA_MINC_ENABLE;