commit
9f5bbf6e5c
|
@ -53,6 +53,19 @@ SECTIONS
|
|||
_etext = .; /* define a global symbols at end of code */
|
||||
} >FLASH
|
||||
|
||||
/* Critical program code goes into CCM RAM */
|
||||
/* Copy specific fast-executing code to CCM RAM */
|
||||
ccm_code = LOADADDR(.ccm_code);
|
||||
.ccm_code :
|
||||
{
|
||||
. = ALIGN(4);
|
||||
ccm_code_start = .;
|
||||
*(.ccm_code)
|
||||
*(.ccm_code*)
|
||||
. = ALIGN(4);
|
||||
ccm_code_end = .;
|
||||
} >CCM AT >FLASH
|
||||
|
||||
|
||||
.ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH
|
||||
.ARM : {
|
||||
|
|
|
@ -52,6 +52,7 @@ static dmaChannelDescriptor_t dmaDescriptors[DMA_LAST_HANDLER] = {
|
|||
/*
|
||||
* DMA IRQ Handlers
|
||||
*/
|
||||
|
||||
DEFINE_DMA_IRQ_HANDLER(1, 1, DMA1_CH1_HANDLER)
|
||||
DEFINE_DMA_IRQ_HANDLER(1, 2, DMA1_CH2_HANDLER)
|
||||
DEFINE_DMA_IRQ_HANDLER(1, 3, DMA1_CH3_HANDLER)
|
||||
|
|
|
@ -168,7 +168,13 @@ typedef enum {
|
|||
.owner.resourceIndex = 0 \
|
||||
}
|
||||
|
||||
#define DEFINE_DMA_IRQ_HANDLER(d, c, i) void DMA ## d ## _Channel ## c ## _IRQHandler(void) {\
|
||||
#if defined(USE_CCM_CODE) && defined(STM32F3)
|
||||
#define DMA_HANDLER_CODE CCM_CODE
|
||||
#else
|
||||
#define DMA_HANDLER_CODE
|
||||
#endif
|
||||
|
||||
#define DEFINE_DMA_IRQ_HANDLER(d, c, i) DMA_HANDLER_CODE void DMA ## d ## _Channel ## c ## _IRQHandler(void) {\
|
||||
const uint8_t index = DMA_IDENTIFIER_TO_INDEX(i); \
|
||||
dmaCallbackHandlerFuncPtr handler = dmaDescriptors[index].irqHandlerCallback; \
|
||||
if (handler) \
|
||||
|
|
|
@ -120,7 +120,12 @@ FAST_CODE void pwmDshotSetDirectionOutput(
|
|||
|
||||
|
||||
#ifdef USE_DSHOT_TELEMETRY
|
||||
FAST_CODE static void pwmDshotSetDirectionInput(
|
||||
#if defined(STM32F3)
|
||||
CCM_CODE
|
||||
#else
|
||||
FAST_CODE
|
||||
#endif
|
||||
static void pwmDshotSetDirectionInput(
|
||||
motorDmaOutput_t * const motor
|
||||
)
|
||||
{
|
||||
|
@ -183,6 +188,11 @@ void pwmCompleteDshotMotorUpdate(void)
|
|||
}
|
||||
}
|
||||
|
||||
#if defined(STM32F3)
|
||||
CCM_CODE
|
||||
#else
|
||||
FAST_CODE
|
||||
#endif
|
||||
static void motor_DMA_IRQHandler(dmaChannelDescriptor_t *descriptor)
|
||||
{
|
||||
if (DMA_GET_FLAG_STATUS(descriptor, DMA_IT_TCIF)) {
|
||||
|
|
|
@ -98,7 +98,7 @@ void pwmDshotSetDirectionOutput(
|
|||
}
|
||||
|
||||
#ifdef USE_DSHOT_TELEMETRY
|
||||
static void pwmDshotSetDirectionInput(
|
||||
FAST_CODE static void pwmDshotSetDirectionInput(
|
||||
motorDmaOutput_t * const motor
|
||||
)
|
||||
{
|
||||
|
@ -164,7 +164,7 @@ FAST_CODE void pwmCompleteDshotMotorUpdate(void)
|
|||
}
|
||||
}
|
||||
|
||||
static void motor_DMA_IRQHandler(dmaChannelDescriptor_t* descriptor)
|
||||
FAST_CODE static void motor_DMA_IRQHandler(dmaChannelDescriptor_t* descriptor)
|
||||
{
|
||||
if (DMA_GET_FLAG_STATUS(descriptor, DMA_IT_TCIF)) {
|
||||
motorDmaOutput_t * const motor = &dmaMotors[descriptor->userParam];
|
||||
|
|
|
@ -253,6 +253,14 @@ void initialiseMemorySections(void)
|
|||
memcpy(&tcm_code_start, &tcm_code, (size_t) (&tcm_code_end - &tcm_code_start));
|
||||
#endif
|
||||
|
||||
#ifdef USE_CCM_CODE
|
||||
/* Load functions into RAM */
|
||||
extern uint8_t ccm_code_start;
|
||||
extern uint8_t ccm_code_end;
|
||||
extern uint8_t ccm_code;
|
||||
memcpy(&ccm_code_start, &ccm_code, (size_t) (&ccm_code_end - &ccm_code_start));
|
||||
#endif
|
||||
|
||||
#ifdef USE_FAST_RAM
|
||||
/* Load FAST_RAM variable intializers into DTCM RAM */
|
||||
extern uint8_t _sfastram_data;
|
||||
|
|
|
@ -44,6 +44,7 @@
|
|||
#define MINIMAL_CLI
|
||||
#define USE_DSHOT
|
||||
#define USE_GYRO_DATA_ANALYSE
|
||||
#define USE_CCM_CODE
|
||||
#endif
|
||||
|
||||
#ifdef STM32F4
|
||||
|
@ -135,6 +136,7 @@
|
|||
#define DEFAULT_AUX_CHANNEL_COUNT 6
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef USE_ITCM_RAM
|
||||
#define FAST_CODE __attribute__((section(".tcm_code")))
|
||||
#define FAST_CODE_NOINLINE NOINLINE
|
||||
|
@ -143,6 +145,12 @@
|
|||
#define FAST_CODE_NOINLINE
|
||||
#endif // USE_ITCM_RAM
|
||||
|
||||
#ifdef USE_CCM_CODE
|
||||
#define CCM_CODE __attribute__((section(".ccm_code")))
|
||||
#else
|
||||
#define CCM_CODE
|
||||
#endif
|
||||
|
||||
#ifdef USE_FAST_RAM
|
||||
#define FAST_RAM_ZERO_INIT __attribute__ ((section(".fastram_bss"), aligned(4)))
|
||||
#define FAST_RAM __attribute__ ((section(".fastram_data"), aligned(4)))
|
||||
|
|
Loading…
Reference in New Issue