Skip to content

Commit

Permalink
Don't overlap STM32 FDCAN RAM sections
Browse files Browse the repository at this point in the history
  • Loading branch information
jmcloud committed Nov 30, 2023
1 parent 30c2ea2 commit 9859c60
Showing 1 changed file with 5 additions and 3 deletions.
8 changes: 5 additions & 3 deletions targets/TARGET_STM/can_api.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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);
}

Expand Down

0 comments on commit 9859c60

Please sign in to comment.