From 9859c60751efb38fcb96b5479d6596c40f25d804 Mon Sep 17 00:00:00 2001 From: jmcloud Date: Thu, 30 Nov 2023 13:19:29 -0800 Subject: [PATCH] Don't overlap STM32 FDCAN RAM sections --- targets/TARGET_STM/can_api.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/targets/TARGET_STM/can_api.c b/targets/TARGET_STM/can_api.c index 4f27b21c3bf..7cd93cc3933 100644 --- a/targets/TARGET_STM/can_api.c +++ b/targets/TARGET_STM/can_api.c @@ -183,8 +183,11 @@ static void _can_init_freq_direct(can_t *obj, const can_pinmap_t *pinmap, int hz obj->CanHandle.Init.DataTimeSeg1 = 0x1; // Not used - only in FDCAN obj->CanHandle.Init.DataTimeSeg2 = 0x1; // Not used - only in FDCAN #ifdef TARGET_STM32H7 - /* Message RAM offset is only supported in STM32H7 platforms of supported FDCAN platforms */ - obj->CanHandle.Init.MessageRAMOffset = 0; + /* Message RAM offset is only supported in STM32H7 platforms of supported FDCAN platforms + * Total RAM size is 2560 words, each FDCAN object allocates approx 300 words, so offset each by + * 512 to make sure RAM sections don't overlap if using multiple FDCAN instances on one chip + */ + obj->CanHandle.Init.MessageRAMOffset = obj->index * 512; /* The number of Standard and Extended ID filters are initialized to the maximum possile extent * for STM32H7 platforms @@ -1222,7 +1225,6 @@ static void can_irq(CANName name, int id) // rx interrupts will be unamsked in read operation. reads must be deffered to thread context. // refer to the CAN receive interrupt problem due to mutex and resolution section of README doc. __HAL_CAN_DISABLE_IT(&CanHandle, CAN_IT_FMP0); - irq_handler(can_irq_contexts[id], IRQ_RX); }