- 将设备相关文件重新组织为device/spi和comm分组 - 添加EtherCAT从站通信模块(esc_exmc_bus、esc_lan9252、ethercat_slave等) - 添加EXMC外设组件支持 - 统一文件命名规范为小写 refactor(canfd): 优化CANFD模块中断安全性和配置方式 - 替换自定义临界区函数为RT_CRITICAL_SAVE/RESTORE宏 - 使用配置常量CONFIG_IRQ_PREEMPT_CAN替代硬编码值 - 简化邮箱满时的处理逻辑,移除不必要的SysTick等待 - 移除废弃的中断保存头文件引用 refactor(timer): 更新定时器配置以使用配置常量 - 修复头文件包含路径大小写问题 - 使用CONFIG_NVIC_PRIORITY_GROUP配置项替代硬编码值
59 lines
1.7 KiB
C++
59 lines
1.7 KiB
C++
/**
|
|
* @file esc_lan9252.h
|
|
* @brief LAN9252 EtherCAT 从站控制器(ESC)驱动接口。
|
|
* @note 通过 EscExmcBus 16-bit 并行总线访问 LAN9252 寄存器与 PDI 内存。
|
|
*/
|
|
#ifndef COMM_ESC_LAN9252_H
|
|
#define COMM_ESC_LAN9252_H
|
|
|
|
#include <cstdint>
|
|
#include <cstddef>
|
|
|
|
/**
|
|
* @brief LAN9252 ESC 驱动。
|
|
* @note 封装 ESC 寄存器读写与 PDI(Process Data Interface)内存块访问。
|
|
*/
|
|
class EscLan9252 {
|
|
public:
|
|
/** @brief 初始化 EXMC 总线与 ESC 基本寄存器。 */
|
|
static void init();
|
|
|
|
/**
|
|
* @brief ESC 自检:读取芯片 ID 寄存器校验。
|
|
* @return bool true 表示 ID 匹配(0x87654321),false 表示失败。
|
|
*/
|
|
static bool selfTest();
|
|
|
|
/**
|
|
* @brief 读取 ESC 寄存器(16-bit)。
|
|
* @param[in] addr 寄存器地址(ESC 寄存器空间偏移)。
|
|
* @return uint16_t 寄存器值。
|
|
*/
|
|
static uint16_t readReg(uint16_t addr);
|
|
|
|
/**
|
|
* @brief 写入 ESC 寄存器(16-bit)。
|
|
* @param[in] addr 寄存器地址。
|
|
* @param[in] val 待写入值。
|
|
*/
|
|
static void writeReg(uint16_t addr, uint16_t val);
|
|
|
|
/**
|
|
* @brief 从 PDI 内存读取一块数据。
|
|
* @param[in] offset PDI 偏移(字节)。
|
|
* @param[out] buf 输出缓冲。
|
|
* @param[in] len 读取字节数。
|
|
*/
|
|
static void readPdi(uint16_t offset, uint8_t *buf, size_t len);
|
|
|
|
/**
|
|
* @brief 向 PDI 内存写入一块数据。
|
|
* @param[in] offset PDI 偏移(字节)。
|
|
* @param[in] buf 数据缓冲。
|
|
* @param[in] len 写入字节数。
|
|
*/
|
|
static void writePdi(uint16_t offset, const uint8_t *buf, size_t len);
|
|
};
|
|
|
|
#endif /* COMM_ESC_LAN9252_H */
|