From 36ec6781e85b9907848a3a6593d404ab96287006 Mon Sep 17 00:00:00 2001 From: Pavel Kirienko Date: Tue, 7 Jul 2015 01:33:11 +0300 Subject: [PATCH] STM32 IRQ fix --- libuavcan_drivers/stm32/driver/src/uc_stm32_can.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/libuavcan_drivers/stm32/driver/src/uc_stm32_can.cpp b/libuavcan_drivers/stm32/driver/src/uc_stm32_can.cpp index c9a364188d..059dc85c1c 100644 --- a/libuavcan_drivers/stm32/driver/src/uc_stm32_can.cpp +++ b/libuavcan_drivers/stm32/driver/src/uc_stm32_can.cpp @@ -819,10 +819,12 @@ int CanDriver::init(uavcan::uint32_t bitrate) IRQ_ATTACH(STM32_IRQ_CAN1TX, can1_irq); IRQ_ATTACH(STM32_IRQ_CAN1RX0, can1_irq); IRQ_ATTACH(STM32_IRQ_CAN1RX1, can1_irq); + IRQ_ATTACH(STM32_IRQ_CAN1SCE, can1_irq); # if UAVCAN_STM32_NUM_IFACES > 1 IRQ_ATTACH(STM32_IRQ_CAN2TX, can2_irq); IRQ_ATTACH(STM32_IRQ_CAN2RX0, can2_irq); IRQ_ATTACH(STM32_IRQ_CAN2RX1, can2_irq); + IRQ_ATTACH(STM32_IRQ_CAN2SCE, can2_irq); # endif # undef IRQ_ATTACH #else @@ -831,10 +833,12 @@ int CanDriver::init(uavcan::uint32_t bitrate) nvicEnableVector(CAN1_TX_IRQn, UAVCAN_STM32_IRQ_PRIORITY_MASK); nvicEnableVector(CAN1_RX0_IRQn, UAVCAN_STM32_IRQ_PRIORITY_MASK); nvicEnableVector(CAN1_RX1_IRQn, UAVCAN_STM32_IRQ_PRIORITY_MASK); + nvicEnableVector(CAN1_SCE_IRQn, UAVCAN_STM32_IRQ_PRIORITY_MASK); # if UAVCAN_STM32_NUM_IFACES > 1 nvicEnableVector(CAN2_TX_IRQn, UAVCAN_STM32_IRQ_PRIORITY_MASK); nvicEnableVector(CAN2_RX0_IRQn, UAVCAN_STM32_IRQ_PRIORITY_MASK); nvicEnableVector(CAN2_RX1_IRQn, UAVCAN_STM32_IRQ_PRIORITY_MASK); + nvicEnableVector(CAN2_SCE_IRQn, UAVCAN_STM32_IRQ_PRIORITY_MASK); # endif } #endif @@ -906,6 +910,10 @@ static int can1_irq(const int irq, void*) { uavcan_stm32::handleRxInterrupt(0, 1); } + else if (irq == STM32_IRQ_CAN1SCE) + { + uavcan_stm32::handleStatusChangeInterrupt(0); + } else { PANIC(); @@ -929,6 +937,10 @@ static int can2_irq(const int irq, void*) { uavcan_stm32::handleRxInterrupt(1, 1); } + else if (irq == STM32_IRQ_CAN2SCE) + { + uavcan_stm32::handleStatusChangeInterrupt(1); + } else { PANIC();