8#include "ch32_can_def.hpp"
11#include DEF2STR(LIBXR_CH32_CONFIG_FILE)
39 explicit CH32CAN(ch32_can_id_t
id, uint32_t pool_size);
82 static CH32CAN* map[CH32_CAN_NUMBER];
85 static inline void BuildTxMsg(
const ClassicPack& p, CanTxMsg& m);
93 CAN_TypeDef* instance_{
nullptr};
94 ch32_can_id_t id_{CH32_CAN_ID_ERROR};
97 uint8_t filter_bank_{0};
101 std::atomic<uint32_t> tx_lock_{0};
102 std::atomic<uint32_t> tx_pend_{0};
CAN 通信抽象类,定义经典 CAN 帧与订阅接口。 Abstract class for CAN communication with classic CAN frames and subscript...
CH32CAN driver (bxCAN-like) for LibXR::CAN.
ErrorCode SetConfig(const CAN::Configuration &cfg) override
Set CAN configuration (bit timing + mode). Also (re-)enables IRQs.
void ProcessTxInterrupt()
Process TX interrupt (call from CANx_TX handler).
void ProcessErrorInterrupt()
Process SCE/error interrupt (call from CANx_SCE handler).
ErrorCode AddMessage(const ClassicPack &pack) override
Enqueue a ClassicPack for transmission.
void ProcessRxInterrupt()
Process RX interrupt (call from CANx_RX0 / CANx_RX1 handlers).
ErrorCode Init()
Initialize filter + IRQ routing. Does NOT force a bitrate; call SetConfig().
ErrorCode GetErrorState(CAN::ErrorState &state) const override
Read bus error state and counters.
uint32_t GetClockFreq() const override
CAN clock frequency (Hz). CH32 CAN is on APB1.
CH32CAN(ch32_can_id_t id, uint32_t pool_size)
Construct CH32CAN.
无锁无序槽池 / Lock-free, unordered slot pool
经典 CAN 帧数据结构。Classic CAN frame structure.
CAN 配置参数。CAN configuration parameters.
CAN 当前错误状态快照(来自硬件计数器/状态机)。 Snapshot of current CAN controller error state (from HW counters/state).