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 */
|