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.

[参考译文] Linux/processor-SDK-AM335X:在内核启动时更改 PWMSS 寄存器

Guru**** 2589265 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/638142/linux-processor-sdk-am335x-pwmss-register-change-on-kernel-start

器件型号:PROCESSOR-SDK-AM335X

工具/软件:Linux

您好!

关于: https://e2e.ti.com/support/embedded/linux/f/354/p/584899/2169023#2169023

我已在 u-boot 中设置 PWMSS_CTRL 寄存器。 但它不保留其状态!

BR

Stefan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    软件团队已收到通知。 他们将在这里作出回应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Stefan、

    我怀疑某些代码(u-boot、Linux、用户空间)正在覆盖 PWMSS_CTRL 寄存器值。

    您能否澄清一下您正在使用的 AM335x TI PSDK 的哪个版本、您在 u-boot 中设置 PWMS_CTRL 寄存器的方式和位置、以及之后如何以及在何处准确地检查 PWMS_CTRL 寄存器?

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

    您好、Pavel、

    我正在使用 u-boot-2017.01和 TI Linux 内核(git://git.ti.com/ti-linux-kernel/ti-linux-kernel.git、版本4.9.51)。
    我在 board.c 中设置 pwmss_ctrl 寄存器:
    int board_init (void)

    (笑声)
    _raW_writel (0x00000002、0x44E10664);
    (笑声)


    然后、我在自定义 PWM 驱动程序中检查它。 它在内核启动期间被复位。 在加载自定义 PWM 驱动器之前、PWM 输出变为低电平。

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

    [引用 user="STFZ"]我使用的是 u-boot-2017.01和 TI Linux 内核(git://git.ti.com/ti-linux-kernel/ti-linux-kernel.git、版本4.9.51)。[/quot]

    经过测试并得到官方支持的内核的最新版本为 v4.9.41、是最新 AM335x TI PSDK v4.1随附的版本

    我建议您使用 AM335x TI PSDKv4.1随附的 u-boot-2017.01和内核4.9.41

    [引用 user="STFZ"]我在 board.c:中设置 pwmss_ctrl 寄存器

    u-boot 或内核中的 Board.c 文件?

    此致、
    帕维尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我在 PROCESSOR-SDK-LINUX-AM335X 03_02_00_05中遇到了相同的问题(software-dl.ti.com/.../index_FDS.html)!!)

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

    Stefan、

    我假设您是 u-boot-2017.01/board/ti/am335x/board.c 文件。

    我建议您在 writel()之后立即从0x44E10664地址读回该值,并使用 printf 进行打印

    int board_init (void)

    (笑声)
    _raW_writel (0x00000002、0x44E10664);

    printf ("%x\n"、__raW_readl (0x44E10664));
    (笑声)


    然后中断引导过程、进入 u-boot 提示符并使用 MD 命令再次检查0x44E10664寄存器值。 因此、您将确保您的值在 u-boot 阶段被接受、然后不会被 u-boot 代码覆盖、而是来自 Linux 或用户空间代码。

    此致、
    帕维尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    然后、您应该使用 devmem2工具检查/验证用户空间中的值。

    另请参阅:

    e2e.ti.com/.../557045

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

    您好、Pavel、

    谢谢!

    u-boot 启动期间的输出:
    " DRAM: 512 MiB
    3.
    MMC:  OMAP SD/MMC:0、OMAP SD/MMC:1"

    使用 MD 命令检查寄存器:
    => MD.l 0x44E10664 1.
    44e10664:00000003....                               


  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    devmem2是在 Linux 运行时读取写入存储器的工具?
    我认为这没有什么帮助。 我可以使用 ioremap 和 ioread32在我的自定义驱动程序中读取该寄存器。
    当时为0x00000000。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Stefan、

    您能否在将 PWMS_CTRL 寄存器值设置为0x2之前打印该值、结果如何?

    int board_init (void)

    (笑声)
    printf ("%x\n"、__raW_readl (0x44E10664));

    _raW_writel (0x00000002、0x44E10664);

    printf ("%x\n"、__raW_readl (0x44E10664));
    (笑声)



    另请使用默认 u-boot 代码检查寄存器 PWMSS_CTRL 中的默认值(删除您修改的__raW_writel (0x00000002、0x44E10664)),并使用 MD 命令进行检查。


    您确切需要在寄存器 PWMSS_CTRL 中设置什么值? 您可以尝试应用掩码、从而仅更改所需的位并保持其余位不变。

    另请注意、修改寄存器 PWMSS_CTRL 可能需要特殊序列、请参阅以下指针:

    AM335x TRM、第15.2.2.3.4节:多个 ePWM 模块的时基时钟相位锁定


    e2e.ti.com/.../557045