Added support for FDCAN3

pull/13565/head
Martin Eckardt 2020-09-07 01:22:29 +02:00
parent 9bc2deb9aa
commit 9886532029
1 changed files with 28 additions and 0 deletions

View File

@ -76,6 +76,11 @@ static void _can_init_freq_direct(can_t *obj, const can_pinmap_t *pinmap, int hz
else if (pinmap->peripheral == CAN_2) { else if (pinmap->peripheral == CAN_2) {
obj->index = 1; obj->index = 1;
} }
#endif
#if defined(FDCAN3_BASE)
else if (pinmap->peripheral == CAN_3) {
obj->index = 2;
}
#endif #endif
else { else {
error("can_init wrong instance\n"); error("can_init wrong instance\n");
@ -199,6 +204,12 @@ void can_irq_free(can_t *obj)
HAL_NVIC_DisableIRQ(FDCAN2_IT0_IRQn); HAL_NVIC_DisableIRQ(FDCAN2_IT0_IRQn);
HAL_NVIC_DisableIRQ(FDCAN2_IT1_IRQn); HAL_NVIC_DisableIRQ(FDCAN2_IT1_IRQn);
} }
#endif
#if defined(FDCAN3_BASE)
else if (can == CAN_3) {
HAL_NVIC_DisableIRQ(FDCAN3_IT0_IRQn);
HAL_NVIC_DisableIRQ(FDCAN3_IT1_IRQn);
}
#endif #endif
else { else {
return; return;
@ -505,6 +516,17 @@ void FDCAN2_IT1_IRQHandler(void)
can_irq(CAN_2, 1); can_irq(CAN_2, 1);
} }
void FDCAN3_IT0_IRQHandler(void)
{
can_irq(CAN_3, 2);
}
void FDCAN3_IT1_IRQHandler(void)
{
can_irq(CAN_3, 2);
}
// TODO Add other interrupts ? // TODO Add other interrupts ?
void can_irq_set(can_t *obj, CanIrqType type, uint32_t enable) void can_irq_set(can_t *obj, CanIrqType type, uint32_t enable)
{ {
@ -549,6 +571,12 @@ void can_irq_set(can_t *obj, CanIrqType type, uint32_t enable)
NVIC_SetVector(FDCAN2_IT1_IRQn, (uint32_t)&FDCAN2_IT1_IRQHandler); NVIC_SetVector(FDCAN2_IT1_IRQn, (uint32_t)&FDCAN2_IT1_IRQHandler);
NVIC_EnableIRQ(FDCAN2_IT1_IRQn); NVIC_EnableIRQ(FDCAN2_IT1_IRQn);
#endif #endif
#if defined(FDCAN3_BASE)
NVIC_SetVector(FDCAN3_IT0_IRQn, (uint32_t)&FDCAN3_IT0_IRQHandler);
NVIC_EnableIRQ(FDCAN3_IT0_IRQn);
NVIC_SetVector(FDCAN3_IT1_IRQn, (uint32_t)&FDCAN3_IT1_IRQHandler);
NVIC_EnableIRQ(FDCAN3_IT1_IRQn);
#endif
} }
#else /* FDCAN1 */ #else /* FDCAN1 */