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.

[参考译文] RTOS/66AK2E05:如何查找特定于器件的基址

Guru**** 2550940 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/607628/rtos-66ak2e05-how-to-find-the-device-specific-base-address

器件型号:66AK2E05

工具/软件:TI-RTOS

您好!

 ‘s我正在研究'cpsw_mgmt.c'文件中的"pa_Unitest_K2EC66BioscapProject"项目,几行代码的函数正在等待 SGMII 链接,结构中的参数'gmiiStatus'为'bIsLinkUp',该参数的功能是什么?  此参数查询的端口剂量状态是什么?  我想修改代码以查询端口1的状态、请参阅用户指南、端口1 SGMII 模块的偏移地址为100h、该寄存器的基址值是多少?

此致、

Zac

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

    器件数据表(www.ti.com/.../66ak2e05.pdf)的第7.1节"存储器映射摘要66AK2E0x "中列出了基地址。
    每个模块寄存器的偏移量在相应的用户指南中列出、位于:
    www.ti.com/.../technicaldocuments

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

    Yordan、您好!

    首先、感谢您的回答、我找到了基址。

    然后、我有一个新问题、希望您能对我起作用。  网络协处理器0 (数据包加速器、 千兆位以太网交换机子系统和安全加速器)的基址为00 0200 0000、端口1 SGMII 鼠标偏移量为100h、 在端口1 SGMII 鼠标中、SGMII_STATUS 偏移量为14h、因此如果我要检查 SGMII_STATUS、 我应该读取 寄存器的地址00 0200 0114h、我对吗?

    如果以上为真,我想读取  上面提到的指定地址的内容(00 0200 0114h),如何使用代码来实现它? 我的意思是, 指定的代码是什么? 谢谢!

    此致、

    Zac

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

    让我检查来源、我将更新该主题。

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

    我想您错过了另一项翻译。
    根据 Linux 内核源(keystone-k2e-netcp.dtsi)、网络协处理器为@24000000:netcp: netcp@24000000{然后您可以看到 GbE 偏移量为0x200000:
    GbE@200000{/* ETHSS */
    标签="netcp-gige";

    因此 GbE 基址为0x24200000:
    Gbe_Subsys:Subsys@24200000{
    兼容="SYSCON";
    REG =<0x24200000 0x100>;
    };

    因此、SGMII 端口1的 SGMII_STATUS 应为0x24200114。

    [引用]如果以上为真,我想读取上面提到的指定地址的内容(00 0200 0114h),如何使用代码来实现它?

    对于 Linux 内核,您应该使用 ioremap()基址(有关 ioremap 的使用,请参见内核源)。 然后使用__raW_readl()读取地址。 请参见以下示例:
    #define SGMII_STATUS 0x24200114
    静态空__iomem *SGMII_STATUS_reg;
    SGMII_STATUS_reg = ioremap (SGMII_STATUS、32);
    unsigned long int reg_addr =__raW_readl (SGMII_STATUS_reg);
    printk ("%x\n"、reg_addr);

    对于裸机、我会使用:
    #define SGMII_STATUS 0x24200114
    unsigned long int regval =*(volatile uint32_t *) SGMII_STATUS
    printf ("%x\n"、regval);

    对于 RTOS、您可以使用已实现的函数(实际上与上述裸机代码相同:
    #include
    #define SGMII_STATUS 0x24200114
    HW_RD_REG32 (SGMII_STATUS);

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

    非常感谢!  我的问题已经解决! 谢谢!

    此致、

    Zac