8#include "ch32_can_def.hpp"
11#include DEF2STR(LIBXR_CH32_CONFIG_FILE)
33 explicit CH32CAN(ch32_can_id_t
id, uint32_t queue_size);
80 static inline void BuildTxMsg(
const ClassicPack& p, CanTxMsg& m);
88 CAN_TypeDef* instance_{
nullptr};
89 ch32_can_id_t id_{CH32_CAN_ID_ERROR};
92 uint8_t filter_bank_{0};
95 SlotPool<ClassicPack> tx_queue_;
97 bool tx_retry_valid_{
false};
99 ClassicPack tx_retry_pack_{};
101 std::atomic<uint32_t> tx_lock_{0};
102 std::atomic<uint32_t> tx_pend_{0};
105 CAN::Configuration cfg_cache_{};
CAN 通信抽象类,定义经典 CAN 帧与订阅接口。 Abstract class for CAN communication with classic CAN frames and subscript...
CH32 CAN 驱动实现 / CH32 CAN driver implementation.
CH32CAN(ch32_can_id_t id, uint32_t queue_size)
构造 CAN 驱动对象 / Construct CAN driver object
ErrorCode SetConfig(const CAN::Configuration &cfg) override
设置 CAN 配置 / Set CAN configuration
void ProcessTxInterrupt()
处理发送中断 / Handle TX interrupt
void ProcessErrorInterrupt()
处理错误中断 / Handle error interrupt
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
LibXR 命名空间 / LibXR namespace.
ErrorCode
定义错误码枚举 / Defines an enumeration for error codes
定长槽池:任务与中断共享的小容量消息槽 / Fixed-size slot pool for small task/interrupt shared message slots.
经典 CAN 帧数据结构 / Classic CAN frame structure.
CAN 配置参数 / CAN configuration parameters.
CAN 当前错误状态快照(来自硬件计数器/状态机)。 Snapshot of current CAN controller error state (from HW counters/state).