mirror of
https://github.com/betaflight/betaflight.git
synced 2025-07-23 16:25:31 +03:00
Fix F4 targets
This commit is contained in:
parent
acdcff176f
commit
801add3ce3
3 changed files with 19 additions and 18 deletions
|
@ -20,7 +20,6 @@ struct dmaChannelDescriptor_s;
|
||||||
typedef void (*dmaCallbackHandlerFuncPtr)(struct dmaChannelDescriptor_s *channelDescriptor);
|
typedef void (*dmaCallbackHandlerFuncPtr)(struct dmaChannelDescriptor_s *channelDescriptor);
|
||||||
|
|
||||||
#ifdef STM32F4
|
#ifdef STM32F4
|
||||||
typedef void(*dmaCallbackHandlerFuncPtr)(DMA_Stream_TypeDef *stream);
|
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
DMA1_ST1_HANDLER = 0,
|
DMA1_ST1_HANDLER = 0,
|
||||||
|
@ -55,7 +54,7 @@ typedef struct dmaChannelDescriptor_s {
|
||||||
dmaDescriptors[i].irqHandlerCallback(&dmaDescriptors[i]);\
|
dmaDescriptors[i].irqHandlerCallback(&dmaDescriptors[i]);\
|
||||||
}
|
}
|
||||||
|
|
||||||
#define DMA_CLEAR_FLAG(d, flag) d->flagsShift > 31 ? d->dma->HIFCR = (flag << (d->flagsShift - 32)) : d->dma->LIFCR = (flag << d->flagsShift)
|
#define DMA_CLEAR_FLAG(d, flag) if(d->flagsShift > 31) d->dma->HIFCR = (flag << (d->flagsShift - 32)); else d->dma->LIFCR = (flag << d->flagsShift)
|
||||||
#define DMA_GET_FLAG_STATUS(d, flag) (d->flagsShift > 31 ? d->dma->HISR & (flag << (d->flagsShift - 32)): d->dma->LISR & (flag << d->flagsShift))
|
#define DMA_GET_FLAG_STATUS(d, flag) (d->flagsShift > 31 ? d->dma->HISR & (flag << (d->flagsShift - 32)): d->dma->LISR & (flag << d->flagsShift))
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -53,18 +53,18 @@ static dmaChannelDescriptor_t dmaDescriptors[] = {
|
||||||
/*
|
/*
|
||||||
* DMA IRQ Handlers
|
* DMA IRQ Handlers
|
||||||
*/
|
*/
|
||||||
DEFINE_DMA_IRQ_HANDLER(1, 1, DMA1_CH1_HANDLER)
|
DEFINE_DMA_IRQ_HANDLER(1, 1, DMA1_ST1_HANDLER)
|
||||||
DEFINE_DMA_IRQ_HANDLER(1, 2, DMA1_CH2_HANDLER)
|
DEFINE_DMA_IRQ_HANDLER(1, 2, DMA1_ST2_HANDLER)
|
||||||
DEFINE_DMA_IRQ_HANDLER(1, 3, DMA1_CH3_HANDLER)
|
DEFINE_DMA_IRQ_HANDLER(1, 3, DMA1_ST3_HANDLER)
|
||||||
DEFINE_DMA_IRQ_HANDLER(1, 4, DMA1_CH4_HANDLER)
|
DEFINE_DMA_IRQ_HANDLER(1, 4, DMA1_ST4_HANDLER)
|
||||||
DEFINE_DMA_IRQ_HANDLER(1, 5, DMA1_CH5_HANDLER)
|
DEFINE_DMA_IRQ_HANDLER(1, 5, DMA1_ST5_HANDLER)
|
||||||
DEFINE_DMA_IRQ_HANDLER(1, 6, DMA1_CH6_HANDLER)
|
DEFINE_DMA_IRQ_HANDLER(1, 6, DMA1_ST6_HANDLER)
|
||||||
DEFINE_DMA_IRQ_HANDLER(1, 7, DMA1_CH7_HANDLER)
|
DEFINE_DMA_IRQ_HANDLER(1, 7, DMA1_ST7_HANDLER)
|
||||||
DEFINE_DMA_IRQ_HANDLER(2, 1, DMA2_CH1_HANDLER)
|
DEFINE_DMA_IRQ_HANDLER(2, 1, DMA2_ST1_HANDLER)
|
||||||
DEFINE_DMA_IRQ_HANDLER(2, 2, DMA2_CH2_HANDLER)
|
DEFINE_DMA_IRQ_HANDLER(2, 2, DMA2_ST2_HANDLER)
|
||||||
DEFINE_DMA_IRQ_HANDLER(2, 3, DMA2_CH3_HANDLER)
|
DEFINE_DMA_IRQ_HANDLER(2, 3, DMA2_ST3_HANDLER)
|
||||||
DEFINE_DMA_IRQ_HANDLER(2, 4, DMA2_CH4_HANDLER)
|
DEFINE_DMA_IRQ_HANDLER(2, 4, DMA2_ST4_HANDLER)
|
||||||
DEFINE_DMA_IRQ_HANDLER(2, 5, DMA2_CH5_HANDLER)
|
DEFINE_DMA_IRQ_HANDLER(2, 5, DMA2_ST5_HANDLER)
|
||||||
|
|
||||||
|
|
||||||
void dmaInit(void)
|
void dmaInit(void)
|
||||||
|
@ -72,12 +72,13 @@ void dmaInit(void)
|
||||||
// TODO: Do we need this?
|
// TODO: Do we need this?
|
||||||
}
|
}
|
||||||
|
|
||||||
void dmaSetHandler(dmaHandlerIdentifier_e identifier, dmaCallbackHandlerFuncPtr callback, uint32_t priority)
|
void dmaSetHandler(dmaHandlerIdentifier_e identifier, dmaCallbackHandlerFuncPtr callback, uint32_t priority, uint32_t userParam)
|
||||||
{
|
{
|
||||||
NVIC_InitTypeDef NVIC_InitStructure;
|
NVIC_InitTypeDef NVIC_InitStructure;
|
||||||
|
|
||||||
RCC_AHB1PeriphClockCmd(dmaDescriptors[identifier].periphClk, ENABLE);
|
RCC_AHB1PeriphClockCmd(dmaDescriptors[identifier].rrc, ENABLE);
|
||||||
dmaDescriptors[identifier].irqHandlerCallback = callback;
|
dmaDescriptors[identifier].irqHandlerCallback = callback;
|
||||||
|
dmaDescriptors[identifier].userParam = userParam;
|
||||||
|
|
||||||
NVIC_InitStructure.NVIC_IRQChannel = dmaDescriptors[identifier].irqN;
|
NVIC_InitStructure.NVIC_IRQChannel = dmaDescriptors[identifier].irqN;
|
||||||
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = NVIC_PRIORITY_BASE(priority);
|
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = NVIC_PRIORITY_BASE(priority);
|
||||||
|
|
|
@ -25,6 +25,7 @@
|
||||||
#include "io.h"
|
#include "io.h"
|
||||||
#include "rcc.h"
|
#include "rcc.h"
|
||||||
#include "nvic.h"
|
#include "nvic.h"
|
||||||
|
#include "dma.h"
|
||||||
|
|
||||||
#include "serial.h"
|
#include "serial.h"
|
||||||
#include "serial_uart.h"
|
#include "serial_uart.h"
|
||||||
|
@ -278,9 +279,9 @@ static void handleUsartTxDma(uartPort_t *s)
|
||||||
s->txDMAEmpty = true;
|
s->txDMAEmpty = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void dmaIRQHandler(dmaChannelDescriptor_t descriptor)
|
void dmaIRQHandler(dmaChannelDescriptor_t* descriptor)
|
||||||
{
|
{
|
||||||
uartPort_t *s = &((uartDevice_t*)(descriptor->userParam)->port);
|
uartPort_t *s = &(((uartDevice_t*)(descriptor->userParam))->port);
|
||||||
if (DMA_GET_FLAG_STATUS(descriptor, DMA_IT_TCIF))
|
if (DMA_GET_FLAG_STATUS(descriptor, DMA_IT_TCIF))
|
||||||
{
|
{
|
||||||
DMA_CLEAR_FLAG(descriptor, DMA_IT_TCIF);
|
DMA_CLEAR_FLAG(descriptor, DMA_IT_TCIF);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue