This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] OMAP-L138:EMAC 复位过程

Guru**** 2547070 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/626989/omap-l138-emac-reset-procedure

器件型号:OMAP-L138
Thread 中讨论的其他器件:OMAPL138

您好!

我正在尝试编写一个函数来将 EMAC 模块置于复位状态。 正如我在文档中所理解的那样、电源和睡眠控制器不能只通过软复位寄存器对其进行复位。 首先需要确保 EMAC 模块当前未传输帧。 以确保我要执行拆解并等待其生效。 这就是我遇到问题的地方。

以下是我的代码:

void EMAC_Stop (void)
{
//取消激活中断
//禁用 EMAC_C0RX 中断
CSL_fins (aintcRegs->EICR、AINTC_EICR_INDEX、AINTC_EventID_EMAC_C0RX);
//禁用 EMAC_C0RX 中断
CSL_fins (aintcRegs->EICR、AINTC_EICR_INDEX、AINTC_EventID_EMAC_C0TX);

//teardown 接收和发送通道
CSL_FINST (emacRegs->RXTEARDOWN、EMAC_RXTEARDOWN_RXTDNCH、CHA0);
CSL_FINST (emacRegs->TXTEARDOWN、EMAC_TXTEARDOWN_TXTDNCH、 CHA0);

//TODO 添加超时
while ((0!= emacRegs->RX0HDP)||(0!= emacRegs->TX0HDP);


CSL_FINST (emacRegs->TXCONTROL、EMAC_TXREROL_TXEN、DISABLE);
CSL_FINST (emacRecontrol->TXCONTROL) EMAC_RXCONTROL_RXEN、DISABLE);

CSL_FINST (emacRegs->SOFTRESET、EMAC_SOFTRESET_SOFTRESET、RESET);

//TODO 添加超时
while (0!= CSL_FEXT (emacRegs->SOFTRESET、EMAC_SOFTRESET_SOFTRESET)
;

CSL_fins (emacCtlRegs->SOFTRESET、ECTL_SOFTRESET_RESET、1);

//将模块复位

// 1. 等待 PTSTAT 中的 GOSTAT[x]位清零。 您必须等待任何操作
//先前启动的转换在启动新转换之前完成。
while (CSL_FEXT (psc1Regs->PTSTAT、PSC_PTSTAT_GOSTAT0)!= 0)
{
;
}
// 2. 将 MDCTLn 中的下一位设置为 SwRstDisable (0)、SyncReset (1)、Disable (2h)、
//启用(3h)、自动睡眠(4h)或自动唤醒(5h)。
CSL_FINST (psc1Regs->MDCTL[CSL_PSC_EMAC]、PSC_MDCTL_NEXT、SWRSTDISABLE);
// 3. 将 PTCMD 中的 GO[x]位设置为1以启动转换。
CSL_FINST (psc1Regs->PTCMD、PSC_PTCMD_GO0、SET);
// 4. 等待 PTSTAT 中的 GOSTAT[x]位清零。 模块是安全的
//在新状态下,只在 PTSTAT 中的 GOSTAT[x]位清零后。
while (CSL_FEXT (psc1Regs->PTSTAT、PSC_PTSTAT_GOSTAT0)!= 0)
{
;
}

} 

有时它会停留在以下行: while ((0!= emacRegs->RX0HDP)||(0!= emacRegs->TX0HDP))

在开始拆卸后。 我希望在撕裂完成后、TX0HDP 为空。 我还(通过调试器)检查了帧描述符的描述符标志、从 TX0HDP 指向的描述符开始。

我是否误解了 EMAC 模块所需的关机过程或拆卸行为?

此致

Arthur

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我已将您的疑问转发给软件专家。 他们的反馈应发布在此处。

    BR
    Tsvetolin Shulev
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    亚瑟

    您是否查看了适用于此器件的 Processor SDK RTOS 中的 EMAC 驱动程序代码。 EMAC_DeINit 之后将模块置于复位状态可能适合您。

    EMAC 驱动程序实现方式如下:
    pdk_omapl138_1_0_1\packages/ti\drv\emac\src\V0

    希望这对您有所帮助。

    此致、
    Rahul