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.

[参考译文] TM4C129ENCPDT:以太网 PHY 的定制配置

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1106573/tm4c129encpdt-custom-configuration-of-ethernet-phy

器件型号:TM4C129ENCPDT

您好!

我 使用的是 TM4C129ENCPDT 微控制器、 集成的 PHY 支持10Base-T 和100Base-TX 信号、全双工和半双工、自动协商模式。 我使用以下配置来 成功初始化以太网、并且它工作正常、没有任何问题:  


//启用以太网外设。
MAP_SysCtlPeripheralEnable (SYSCTL_Periph_EMAC0);
MAP_SysCtlPeripheralReset (SYSCTL_Periph_EMAC0);//执行外设的软件复位
//如果内部 PHY 存在并且我们正在运行,则启用它
//要求使用它。
if (((EMAC_PHY_CONFIG 和 EMAC_PHY_TYPE_MASK)== EMAC_PHY_TYPE_INTERNAL)


//我们被要求配置以便与内部配合使用
// PHY。 它是否存在?

if (MAP_SysCtlPeripheralPresent (SYSCTL_Periph_EPHY0))

//
//是-启用并重置它。
//
MAP_SysCtlPeripheralEnable (SYSCTL_Periph_EPHY0);
MAP_SysCtlPeripheralReset (SYSCTL_Periph_EPHY0);

其他

//
//此部件上不存在内部 PHY,因此请在此处挂起。
//
while (1)




//等待 MAC 退出复位状态。
while (!map_SysCtlPeripheralReady (SYSCTL_Periph_EMAC0))


//配置以与用户需要的任何 PHY 一起使用。
EMAPPHYConfigSet (EMAC0_BASE、EMAC_PHY_CONFIG);


//初始化 MAC 并设置 DMA 模式。
MAP_EMACInit (EMAC0_BASE、ui32SysClkHz、
EMAC_BCONFIG_Mixed_BURST | EMAC_BCONFIG_PRIORY_FIXED、
4、4、0);


//设置 MAC 配置选项。
MAP_EMACConfigSet (EMAC0_BASE、(EMAC_CONFIG_FUL_DUPLEX |
EMAC_CONFIG_CHECKSUM_OFFLOAD |
EMAC_CONFIG_7BYTE_PREAMBLE |
EMAC_CONFIG_IF_GAP_96BITS |
EMAC_CONFIG_USE_MACADDR0 |
EMAC_CONFIG_SA_FTER_descriptor |
EMAC_CONFIG_BO_LIMIT_1024)、
(EMAC_MODE_RX_STORE_Forward |
EMAC_MODE_TX_STORE_Forward |
EMAC_MODE_TX_THRESHOLD_64_Bytes |
EMAC_MODE_RX_THRESHOLD_64_Bytes)、0);
//使用硬件的 MAC 地址对硬件进行编程(用于过滤)。
MAP_EMACAddrSet (EMAC0_BASE、0、(uint8_t *) pui8MAC);

但是、当我尝试应用自定义配置时遇到了问题、例如在程序运行期间更改速度模式、您能不能建议我使用正确的序列和函数来应用新配置、并通过 EMACPC 位 ANEN 和 ANMODE 更改以太网速度和模式?  

此致、

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

    您好!

     您确切希望更改什么内容? 如果您看下面的行、PHY 配置如下所示。 它采用100B 全双工模式。  

    #define EMAC_PHY_CONFIG (EMAC_PHY_TYPE_INTERNAL | EMAC_PHY_INT_MDIX_EN |\
    EMAC_PHY_AN_100B_T_FULL_DUPLEX)

    EMAPPHYConfigSet (EMAC0_BASE、EMAC_PHY_CONFIG);

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

    您好!

    实际上、我设计了一个网页来配置和更改 我的应用的 IP 地址和以太网配置。 因此、我需要一种方法来重新配置和应用新的以太网配置、例如、将速度从100更改为10、而不应用软件复位、正如我在1590页的数据表中所读出的、在运行应用期间有一种方法可以应用自定义配置、 但是、当执行这些步骤时、它 不能与我一起工作、我感谢您的帮助。

    此致、

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

    请参阅  EMAPPHYConfigSet 函数。 正如您在 PHY 配置更改后看到的  

    //
    //
    //! 选择正在使用的以太网 PHY。
    //!
    //! \param ui32Base 是以太网控制器的基址。
    //! 使用内部时、\param ui32Config 选择正在使用的 PHY
    //! PHY、允许配置各种 PHY 参数。
    //!
    //! 必须在 EMACInit()和 EMACConfigSet()之前调用此函数
    //! 选择要使用的以太网 PHY。 如果选择了内部 PHY
    //! 功能还允许配置各种 PHY 参数。 请注意
    //! 由于使用了参数、在这个函数调用期间以太网 MAC 被复位
    //! 仅在 MAC 复位时由硬件锁存。 呼叫
    //! 因此、选择和配置 PHY 的顺序必须如下:

    //! \逐字记录
    //! //启用并重置 MAC。
    //! SysCtlPeripheralEnable (SYSCTL_Periph_EMAC0);
    //! SysCtlPeripheralReset (SYSCTL_Periph_EMAC0);
    //! if ( )
    //! {
    //! //启用和复位内部 PHY。
    //! SysCtlPeripheralEnable (SYSCTL_Periph_EPHY0);
    //! SysCtlPeripheralReset (SYSCTL_Periph_EPHY0);
    //!}
    //!
    //! //确保 MAC 完成其复位。
    //! while (!map_SysCtlPeripheralReady (SYSCTL_Periph_EMAC0))
    //! {
    //!}
    //!
    //! //设置 PHY 类型和配置选项。
    //! EMAPPHYConfigSet (EMAC0_BASE、 );
    //!
    //! //初始化和配置 MAC。
    //! EMACInit (EMAC0_BASE、 、 、
    //! 、 、 );
    //! EMACConfigSet (EMAC0_BASE、 );
    //! \n 逐字记录

    很棒的酒店

    无效
    EMAPPHYConfigSet (uint32_t ui32Base、uint32_t ui32Config)

    //
    //将以太网 PHY 配置写入外设配置
    //寄存器。
    //
    HWREG (ui32Base + EMAC_O_PC)= ui32Config;

    //
    //如果使用内部 PHY,请将其复位以确保新配置为
    //锁定在此处。
    //
    if (((ui32Config & EMAC_PHY_TYPE_MASK)== EMAC_PHY_TYPE_INTERNAL)

    SysCtlPeripheralReset (SYSCTL_Periph_EPHY0);
    while (!SysCtlPeripheralReady (SYSCTL_Periph_EPHY0))

    //
    //等待 PHY 复位完成。
    //

    //
    //延迟一点以确保 PHY 复位已完成。
    //
    SysCtlDelay (10000);