1
0
Fork 0
mirror of https://github.com/betaflight/betaflight.git synced 2025-07-26 09:45:37 +03:00

STM32H7 - Use FAST_CODE on all HOT ISRs to avoid flash access on targets where

FAST_CODE functions are placed in RAM.
This commit is contained in:
Dominic Clifton 2021-05-17 16:57:57 +02:00
parent 37412289dd
commit 0b7fcb7df4
8 changed files with 14 additions and 7 deletions

View file

@ -111,7 +111,7 @@ typedef enum {
.owner.resourceIndex = 0 \
}
#define DEFINE_DMA_IRQ_HANDLER(d, s, i) void DMA ## d ## _Stream ## s ## _IRQHandler(void) {\
#define DEFINE_DMA_IRQ_HANDLER(d, s, i) FAST_IRQ_HANDLER void DMA ## d ## _Stream ## s ## _IRQHandler(void) {\
const uint8_t index = DMA_IDENTIFIER_TO_INDEX(i); \
dmaCallbackHandlerFuncPtr handler = dmaDescriptors[index].irqHandlerCallback; \
if (handler) \

View file

@ -291,7 +291,7 @@ static void bbSetupDma(bbPort_t *bbPort)
bbDMA_ITConfig(bbPort);
}
void bbDMAIrqHandler(dmaChannelDescriptor_t *descriptor)
FAST_IRQ_HANDLER void bbDMAIrqHandler(dmaChannelDescriptor_t *descriptor)
{
dbgPinHi(0);

View file

@ -42,7 +42,7 @@ static IO_t ws2811IO = IO_NONE;
static TIM_HandleTypeDef TimHandle;
static uint16_t timerChannel = 0;
void WS2811_DMA_IRQHandler(dmaChannelDescriptor_t* descriptor)
FAST_IRQ_HANDLER void WS2811_DMA_IRQHandler(dmaChannelDescriptor_t* descriptor)
{
HAL_DMA_IRQHandler(TimHandle.hdma[descriptor->userParam]);
TIM_DMACmd(&TimHandle, timerChannel, DISABLE);

View file

@ -210,7 +210,7 @@ void pwmCompleteDshotMotorUpdate(void)
}
}
static void motor_DMA_IRQHandler(dmaChannelDescriptor_t* descriptor)
FAST_IRQ_HANDLER static void motor_DMA_IRQHandler(dmaChannelDescriptor_t* descriptor)
{
if (DMA_GET_FLAG_STATUS(descriptor, DMA_IT_TCIF)) {

View file

@ -365,7 +365,7 @@ void uartConfigureDma(uartDevice_t *uartdev)
#endif
#define UART_IRQHandler(type, number, dev) \
void type ## number ## _IRQHandler(void) \
FAST_IRQ_HANDLER void type ## number ## _IRQHandler(void) \
{ \
uartPort_t *uartPort = &(uartDevmap[UARTDEV_ ## dev]->port); \
uartIrqHandler(uartPort); \

View file

@ -301,7 +301,7 @@ void uartDmaIrqHandler(dmaChannelDescriptor_t* descriptor)
}
#endif
void uartIrqHandler(uartPort_t *s)
FAST_IRQ_HANDLER void uartIrqHandler(uartPort_t *s)
{
UART_HandleTypeDef *huart = &s->Handle;
/* UART in mode Receiver ---------------------------------------------------*/

View file

@ -59,7 +59,7 @@ transponder_t transponder;
#endif
bool transponderInitialised = false;
static void TRANSPONDER_DMA_IRQHandler(dmaChannelDescriptor_t* descriptor)
FAST_IRQ_HANDLER static void TRANSPONDER_DMA_IRQHandler(dmaChannelDescriptor_t* descriptor)
{
HAL_DMA_IRQHandler(TimHandle.hdma[descriptor->userParam]);
TIM_DMACmd(&TimHandle, timerChannel, DISABLE);

View file

@ -157,6 +157,13 @@
#define DEFAULT_CPU_OVERCLOCK 0
#endif
#if defined(STM32H7)
// Move ISRs to fast ram to avoid flash latency.
#define FAST_IRQ_HANDLER FAST_CODE
#else
#define FAST_IRQ_HANDLER
#endif
#ifdef USE_ITCM_RAM
#if defined(ITCM_RAM_OPTIMISATION) && !defined(DEBUG)