Skip to content

Commit 9886532

Browse files
committed
Added support for FDCAN3
1 parent 9bc2deb commit 9886532

File tree

1 file changed

+28
-0
lines changed

1 file changed

+28
-0
lines changed

targets/TARGET_STM/can_api.c

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,11 @@ static void _can_init_freq_direct(can_t *obj, const can_pinmap_t *pinmap, int hz
7676
else if (pinmap->peripheral == CAN_2) {
7777
obj->index = 1;
7878
}
79+
#endif
80+
#if defined(FDCAN3_BASE)
81+
else if (pinmap->peripheral == CAN_3) {
82+
obj->index = 2;
83+
}
7984
#endif
8085
else {
8186
error("can_init wrong instance\n");
@@ -199,6 +204,12 @@ void can_irq_free(can_t *obj)
199204
HAL_NVIC_DisableIRQ(FDCAN2_IT0_IRQn);
200205
HAL_NVIC_DisableIRQ(FDCAN2_IT1_IRQn);
201206
}
207+
#endif
208+
#if defined(FDCAN3_BASE)
209+
else if (can == CAN_3) {
210+
HAL_NVIC_DisableIRQ(FDCAN3_IT0_IRQn);
211+
HAL_NVIC_DisableIRQ(FDCAN3_IT1_IRQn);
212+
}
202213
#endif
203214
else {
204215
return;
@@ -505,6 +516,17 @@ void FDCAN2_IT1_IRQHandler(void)
505516
can_irq(CAN_2, 1);
506517
}
507518

519+
void FDCAN3_IT0_IRQHandler(void)
520+
{
521+
can_irq(CAN_3, 2);
522+
}
523+
524+
void FDCAN3_IT1_IRQHandler(void)
525+
{
526+
can_irq(CAN_3, 2);
527+
}
528+
529+
508530
// TODO Add other interrupts ?
509531
void can_irq_set(can_t *obj, CanIrqType type, uint32_t enable)
510532
{
@@ -549,6 +571,12 @@ void can_irq_set(can_t *obj, CanIrqType type, uint32_t enable)
549571
NVIC_SetVector(FDCAN2_IT1_IRQn, (uint32_t)&FDCAN2_IT1_IRQHandler);
550572
NVIC_EnableIRQ(FDCAN2_IT1_IRQn);
551573
#endif
574+
#if defined(FDCAN3_BASE)
575+
NVIC_SetVector(FDCAN3_IT0_IRQn, (uint32_t)&FDCAN3_IT0_IRQHandler);
576+
NVIC_EnableIRQ(FDCAN3_IT0_IRQn);
577+
NVIC_SetVector(FDCAN3_IT1_IRQn, (uint32_t)&FDCAN3_IT1_IRQHandler);
578+
NVIC_EnableIRQ(FDCAN3_IT1_IRQn);
579+
#endif
552580
}
553581

554582
#else /* FDCAN1 */

0 commit comments

Comments
 (0)