8#include "ch32_can_def.hpp"
11#include DEF2STR(LIBXR_CH32_CONFIG_FILE)
32 explicit CH32CAN(ch32_can_id_t
id, uint32_t pool_size);
79 static inline void BuildTxMsg(
const ClassicPack& p, CanTxMsg& m);
87 CAN_TypeDef* instance_{
nullptr};
88 ch32_can_id_t id_{CH32_CAN_ID_ERROR};
91 uint8_t filter_bank_{0};
93 LockFreePool<ClassicPack> tx_pool_;
95 std::atomic<uint32_t> tx_lock_{0};
96 std::atomic<uint32_t> tx_pend_{0};
CAN 通信抽象类,定义经典 CAN 帧与订阅接口。 Abstract class for CAN communication with classic CAN frames and subscript...
CH32 CAN 驱动实现 / CH32 CAN driver implementation.
ErrorCode SetConfig(const CAN::Configuration &cfg) override
设置 CAN 配置 / Set CAN configuration
void ProcessTxInterrupt()
处理发送中断 / Handle TX interrupt
void ProcessErrorInterrupt()
处理错误中断 / Handle error interrupt
CAN::Configuration cfg_cache_
缓存配置(用于保留原值语义) / Cached configuration for keep-previous semantics
ErrorCode AddMessage(const ClassicPack &pack) override
发送消息入队 / Enqueue TX message
void ProcessRxInterrupt()
处理接收中断 / Handle RX interrupt
ErrorCode Init()
初始化过滤器和中断路由 / Initialize filters and IRQ routing
ErrorCode GetErrorState(CAN::ErrorState &state) const override
获取总线错误状态 / Get bus error state
uint32_t GetClockFreq() const override
获取 CAN 时钟频率 / Get CAN clock frequency
static CH32CAN * map[CH32_CAN_NUMBER]
中断分发表 / IRQ dispatch map
CH32CAN(ch32_can_id_t id, uint32_t pool_size)
构造 CAN 驱动对象 / Construct CAN driver object
CanRxMsg rx_msg_
中断上下文收发缓冲 / RX/TX buffers in IRQ context
经典 CAN 帧数据结构。Classic CAN frame structure.
CAN 配置参数。CAN configuration parameters.
CAN 当前错误状态快照(来自硬件计数器/状态机)。 Snapshot of current CAN controller error state (from HW counters/state).