fix(esc_lan9252): 修复LAN9252 HBI访问模型和IRQ输出使能问题
- 修正HBI访问模型:将ESC核心CSR(0x0000-0x0FFF)改为通过ECAT_CSR_CMD/DATA 间接端口访问,解决此前直接寻址导致核心寄存器恒读0/写丢弃的问题 - 新增csrRead/csrWrite/pramRead/pramWrite接口,正确实现LAN9252访问端口操作 - 添加PDI就绪检测:等待DL_STATUS bit0置位确认EEPROM加载完成和EtherCAT核心使能 - 实现IRQ引脚输出使能:配置IRQ_CFG和INT_EN寄存器,使EtherCAT事件能到达PB1, 解决PDI_Isr未触发导致SAFEOP->OP无限挂起的问题 - 为ESC_EXMC硬件诊断添加CONFIG_ESC_EXMC_DIAG门控,默认关闭避免影响正常运行 - 修正system_gd32e50x.c中HXTAL故障诊断的寄存器偏移和位设置错
This commit is contained in:
@@ -51,6 +51,9 @@ constexpr uint32_t kPinWr = 5U; /* PD5 */
|
||||
constexpr uint32_t kPinA1 = 11U; /* PD11 */
|
||||
constexpr uint32_t kPinA2 = 12U; /* PD12 */
|
||||
|
||||
/* bbDelay/bbReadData 仅被 diagDump 使用,随之一起门控,避免默认关闭时
|
||||
* 触发 -Wunused-function;bbDriveData 被 continuityDrive 复用,保持常开。 */
|
||||
#if CONFIG_ESC_EXMC_DIAG
|
||||
void bbDelay() {
|
||||
for (volatile uint32_t i = 0U; i < 3000U; i++) {
|
||||
} /* ~40-80us @180MHz,远大于 HBI 时序要求 */
|
||||
@@ -78,6 +81,7 @@ uint16_t bbReadData() {
|
||||
if (d & (1U << 10)) v |= (uint16_t)(1U << 15); /* D15 */
|
||||
return v;
|
||||
}
|
||||
#endif /* CONFIG_ESC_EXMC_DIAG (bbDelay + bbReadData) */
|
||||
|
||||
void bbDriveData(uint16_t v) {
|
||||
uint32_t dset = 0U, dclr = 0U, eset = 0U, eclr = 0U;
|
||||
@@ -233,8 +237,12 @@ bool EscExmcBus::init() {
|
||||
ECAT_LOGI("[ECAT][EXMC] init: Region0 enabled, chip ID will be verified by "
|
||||
"ESC driver\r\n");
|
||||
|
||||
/* ---- 硬件诊断: 转储关键寄存器 + GPIO 手动输出测试 ---- */
|
||||
/* ---- 硬件诊断: 转储关键寄存器 + GPIO 手动输出测试 ----
|
||||
* 1.5.33: 默认关闭。硬件层已确认全通,探针仅换板/补焊排查浮空时经
|
||||
* CONFIG_ESC_EXMC_DIAG 临时开启(会拆 EXMC 引脚成 GPIO,正常运行不该跑)。 */
|
||||
#if CONFIG_ESC_EXMC_DIAG
|
||||
diagDump();
|
||||
#endif
|
||||
|
||||
s_ok = true;
|
||||
ECAT_LOGI("[ECAT][EXMC] init: OK, bus enabled\r\n");
|
||||
@@ -243,7 +251,10 @@ bool EscExmcBus::init() {
|
||||
|
||||
/* ========================================================================
|
||||
* 硬件诊断: 精简版 —— 只保留核心探活 + bit-bang + 位级回显
|
||||
* 1.5.33: 整段由 CONFIG_ESC_EXMC_DIAG 门控,默认不编译。bbDelay/bbReadData/
|
||||
* bbDriveData 等位拍辅助函数在上方匿名 namespace 中,continuityDrive 仍复用,保留。
|
||||
* ======================================================================== */
|
||||
#if CONFIG_ESC_EXMC_DIAG
|
||||
void EscExmcBus::diagDump() {
|
||||
/* EtherCAT 同步 ISR 激活期间禁止诊断:本函数会把 EXMC 数据/控制线切成 GPIO,
|
||||
* 并大量 printf,会周期性拆毁运行中的 EtherCAT 总线。 */
|
||||
@@ -389,6 +400,7 @@ void EscExmcBus::diagDump() {
|
||||
printf("[EXMC-DIAG] === HBI ALIVE ===\r\n");
|
||||
}
|
||||
}
|
||||
#endif /* CONFIG_ESC_EXMC_DIAG */
|
||||
|
||||
/* ========================================================================
|
||||
* 通断测试: 网页逐个 pattern 触发,GD32 驱动数据线/控制线输出已知电平,
|
||||
|
||||
Reference in New Issue
Block a user