1#include "ch32_usbcan_shared.hpp"
3namespace LibXR::CH32UsbCanShared
5void register_usb_irq(IrqFn fn) { usb_irq_cb.store(fn, std::memory_order_release); }
7void register_can1_rx0(IrqFn fn)
9 if constexpr (K_USB_CAN_IRQ_SHARE)
11 can1_rx0_cb.store(fn, std::memory_order_release);
19void register_can1_tx(IrqFn fn)
21 if constexpr (K_USB_CAN_IRQ_SHARE)
23 can1_tx_cb.store(fn, std::memory_order_release);
32#if defined(RCC_APB1Periph_USB) && defined(CAN1)
35extern "C" __attribute__((interrupt(
"WCH-Interrupt-fast"))) void
36USB_LP_CAN1_RX0_IRQHandler(
void)
38 using namespace LibXR::CH32UsbCanShared;
40 if (
auto fn = usb_irq_cb.load(std::memory_order_acquire))
44 if (
auto fn = can1_rx0_cb.load(std::memory_order_acquire))
51extern "C" __attribute__((interrupt(
"WCH-Interrupt-fast"))) void
52USB_HP_CAN1_TX_IRQHandler(
void)
54 using namespace LibXR::CH32UsbCanShared;
56 if (
auto fn = usb_irq_cb.load(std::memory_order_acquire))
60 if (
auto fn = can1_tx_cb.load(std::memory_order_acquire))