@@ -76,6 +76,11 @@ static void _can_init_freq_direct(can_t *obj, const can_pinmap_t *pinmap, int hz
76
76
else if (pinmap -> peripheral == CAN_2 ) {
77
77
obj -> index = 1 ;
78
78
}
79
+ #endif
80
+ #if defined(FDCAN3_BASE )
81
+ else if (pinmap -> peripheral == CAN_3 ) {
82
+ obj -> index = 2 ;
83
+ }
79
84
#endif
80
85
else {
81
86
error ("can_init wrong instance\n" );
@@ -199,6 +204,12 @@ void can_irq_free(can_t *obj)
199
204
HAL_NVIC_DisableIRQ (FDCAN2_IT0_IRQn );
200
205
HAL_NVIC_DisableIRQ (FDCAN2_IT1_IRQn );
201
206
}
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
+ }
202
213
#endif
203
214
else {
204
215
return ;
@@ -505,6 +516,17 @@ void FDCAN2_IT1_IRQHandler(void)
505
516
can_irq (CAN_2 , 1 );
506
517
}
507
518
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
+
508
530
// TODO Add other interrupts ?
509
531
void can_irq_set (can_t * obj , CanIrqType type , uint32_t enable )
510
532
{
@@ -549,6 +571,12 @@ void can_irq_set(can_t *obj, CanIrqType type, uint32_t enable)
549
571
NVIC_SetVector (FDCAN2_IT1_IRQn , (uint32_t )& FDCAN2_IT1_IRQHandler );
550
572
NVIC_EnableIRQ (FDCAN2_IT1_IRQn );
551
573
#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
552
580
}
553
581
554
582
#else /* FDCAN1 */
0 commit comments