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/AM5728:Timer15上的 PWM

Guru**** 2539500 points
Other Parts Discussed in Thread: AM5728

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/808400/linux-am5728-pwm-on-timer15

器件型号:AM5728

工具/软件:Linux

我正在我的定制 AM5728板上使用 TI 的 Linux 内核4.9以及 SDK 4.02。

我的板在计时器15上有一个由 PWM 控制的蜂鸣器。 硬件通过直接操作与其关联的寄存器组进行了验证、但通过 Linux 器件树进行设置证明很难。

我们在内核中启用了一些功能:

CONFIG_PWM_TIEHRPWM=y

CONFIG_PWM_TIPWMSS=y

CONFIG_INPUT_PWM_BEER=y

CONFIG_PWM_OMAP-DMTIMER=y

并在 DTS 中的此处添加了一个节点:

蜂鸣器{

               兼容=" PWM 蜂鸣器";

               PWM =<&timer15>;

};

U-Boot 也被正确多路复用。  

根据上述更改、/sys/class/pwm.下仍没有新器件  

我还应该去其他地方看看吗?

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

    您好!

    我想知道您是否在 DTS 文件中启用了 timer15。 此外、我在代码中看不到任何"pinctrl-0"定义。

    此致、

    Krunal

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

    Krunal、您好、感谢您的回答。 启用 timer15后、我将取得一些进展。 下面是我的全部更改:

    @@-89、6 +89、11 @@
    GPIO =<&GPIO7 3>;
    };

    +蜂鸣器:PWM_蜂 鸣器{
    + STATUS ="确定";
    + compatible ="pwM-beeper";
    + PWM =<&timer15 0 5000 1>
    +};


    时间15{(&T)
    + STATUS ="确定";
    + pinctrl-names ="default";
    + pinctrl-0 =<&timer15_pines>;
    +};
    +
    +


    &dra7_PMX_CORE{
    + timer15_pins:timer15_pins_default{
    + pinctrl-single、pins =<
    + DRA7XX_CORE_IOPAD (0x36A0、PIN_OUTPUT | MUX_MODE10)
    +>;
    +};

    遗憾的是、它尚未100%正常工作:

    root@dev:~
    
    
    @# dmesg | grep -i PWM [ 2.248063] Palmas 0-0058:多路复用 GPIO 2b、PWM 0、LED 0 [ 7.269426] lp8863 0-003c:BL 模式寄存器读取(0x0:PWM 0x2:Display_BRT):0x302 [ 7.444450](对于/PWM_3389[7.4800]单元格)无法获取[PM_bepeacher](对于/ocp/timer)
    无法解析"PWM"属性
    [7.480388] PWM-beeper PWM_beeper:无法请求 PWM 器件:-22
    [7.501369] PWM-beeper:PWM_beeper 的探测失败,错误为-22
    root@dev:~# dmesg | grep -i timer
    [0.000000] OMAP 事件源:Timer1 at 32786Hz (计时
    器6.15Hz)[6.000000 (计时器计时器计时器运行频率)。
    [0.000017]切换到基于计时器的延迟环路、分辨率为162ns
    [0.000885]校准延迟环路(跳过)、使用计时器频率计算得出的值。 12.29 BogoMips (lpj=61475)
    [ 7.181794] OMAP-WDT:OMAP 看门狗计时器修订版0x01:初始超时60秒
    [ 7.444450]、共:/PWM_beeper:无法获取/ocp/timer@4882c000的#PWM-cells
    

    我们将感谢指针、尤其是我希望对上面粗体显示的 PWM 属性进行一些检查。

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

    我认为一个重要的缺失是将计时器配置为 PWM。  请查看以下内核文档:

    • /Documentation/devicetree/bindings/arm/omap/timer.txt
    • /Documentation/devicetree/bindings/pwm/pwm-omap-dmtimer.txt.

    从 timer.txt 中、我看到有一个名为 ti、timer-PWM 的可选属性。  我希望这应该添加到您的 timer15节点。

    此外、您似乎需要沿着以下线路连接 PWM 节点:

    pwm15:dmtimer-PWM@15{
    兼容="ti、omap-dmtimer-pwm";
    TI、定时器=<&timer15>;
    #PWM-Cells =<3>;
    };

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

    好的、谢谢您的回答。 我现在可以听到哔声:

    根目录:~# cat /sys/kernel/debug/pwm
    platform/dmtimer-PWM@15、1个 PWM 器件
    PWM-0 (PWM_beeper ):请求的周期:250000ns 占空比:0ns 极性:正常
    
    根目录:~# cd /sys/class/pwm
    根目录:/sys/class/pwm cd pwmchip0
    根目录:/sys/class/pwm/pwmchip0 echo 0 >导出
    根目录@solix:/sys/class/pwm/pwmchip0 CD pwm0
    root@solix:/sys/class/pwm/pwmchip0/pwm0 echo 190000 > Duty_cycle
    root@solix:/sys/class/pwm/pwmchip0/pwm0 cat /sys/kernel/debug/pwm
    platform/dmtimer-PWM@15
    sysfs 器件(syswm 1器件) ):请求周期:250000ns 占空比:190000 ns 极性:正常
    
    根@solix:/sys/class/pwm/pwmchip0/pwm0回应1 >启用
    

    所有这些都很好。 谢谢!

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

    我与 Adam 合作、我们在 DTS 文件中的正确部分进行了以下更改:

    +      pwm15:dmtimer-PWM@15{
    +              compatible ="ti、omap-dmtimer-pwm";
    +              ti、timers =<&timer15>;
    +              #PWM-Cells =<3>;
    +}      ;
    +
    +      蜂鸣器:PWM_蜂 鸣器{
    +              STATUS ="确定";
    +              compatible ="pwM-beeper";
    +              PWM =<&pwm15 0 250000 0>;
    +}      ;

    时间15{(&T)
    +      STATUS ="确定";
    +      ti、计时器 PWM;
    +      pinctrl-names ="default";
    +      pinctrl-0 =<&timer15_pines>;
    +};
    +

    +      timer15_pins:timer15_pins_default{
    +              pinctrl-single、pins =<
    +                      DRA7XX_CORE_IOPAD (0x369C、PIN_OUTPUT | MUX_MODE10)
    +              >;
    +}      ;
    +

    我们还使用 menuconfig 启用以下选项:

    CONFIG_INPUT_PWM_BEER=m

    CONFIG_PWM_OMAP_DMTIMER=m

    我们在内核(=y)中尝试了这两种方法、但无法与器件通信。 这是预期的、还是可以将其配置为内核的一部分? 是否有更好的方法来启用和访问 PWM 功能以驱动连接到 B26/从 timer15输出的蜂鸣器?

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

    [引用 user="Scotts">我们在内核(=y)中尝试了这两种方法、但无法与器件通信。 [/报价]

    您能详细说明吗?  您正在做什么来与它进行通信、结果如何?  (任何错误消息等)

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

    Brad、您好!

    我使用"menuconfig"更改了 CONFIG_INPUT_PWM_BEeper 和 CONFIG_PWM_OMAP-DMTIGER 值。 只有两个模块均为"m"时、我们才能与器件通信以生成音调。

    CONFIG_INPUT_PWM_BEER=y
    CONFIG_PWM_OMAP-DMTIMER=y
    lsmod 现在未显示 PWM_beeper PWM_OMA_dmtimer
    /sys/class/pwm/pwmchip0不存在
    # dmesg | grep 蜂鸣音没有显示任何内容
    # dmesg | grep -i dmtimer
    OMAP-dmtimer-PWM dmtimer-PWM@15:dmtimer pdata 结构 NULL
    OMAP-dmtimer-PWM:dmtimer-PWM@15的探测失败、错误-22



    CONFIG_INPUT_PWM_BEER=m
    CONFIG_PWM_OMAP-DMTIMER=y
    lsmod 显示 PWM_beeper
    /sys/class/pwm/pwmchip0不存在
    # dmesg | grep 蜂鸣音没有显示任何内容
    # dmesg | grep -i dmtimer
    OMAP-dmtimer-PWM dmtimer-PWM@15:dmtimer pdata 结构 NULL
    OMAP-dmtimer-PWM:dmtimer-PWM@15的探测失败、错误-22




    CONFIG_INPUT_PWM_BEER=y
    CONFIG_PWM_OMAP_DMTIMER=m
    lsmod 显示 PWM_OMAP-dmtimer
    /sys/class/pwm/pwmchip0存在
    /sys/class/pwm/pwmchip0/pwm0不存在

    # echo 0 >/sys/class/pwm/pwmchip0/export
    -sh:echo:write error:device or resource busy

    # cat /sys/class/pwm/pwmchip0/npwm
    1

    # rmmod PWM_OMAP-dmtimer
    rmmod:错误:模块 PWM_OMA_dmtimer 正在使用中

    # cat /sys/kernel/debug/pwm
    platform/dmtimer-PWM@15、1 PWM 器件
     PWM-0  (PWM_beeper         ):请求的周期:250000ns 占空比:0ns 极性:正常




    CONFIG_INPUT_PWM_BEER=m
    CONFIG_PWM_OMAP_DMTIMER=m
    lsmod 显示了 PWM_蜂 鸣器和 PWM_OMA_dmtimer
    /sys/class/pwm/pwmchip0存在
    /sys/class/pwm/pwmchip0/pwm0不存在
    在我们使用"echo 0 >/sys/class/pwm/pwmchip0/export "之前、必须使用"rmmod PWM_beper"、然后存在"/sys/class/pwm/pwmchip0/pwm0 "
    现在可以根据需要写入"period"、"Duty_cycle"和"enable"

    # cat /sys/kernel/debug/pwm
    platform/dmtimer-PWM@15、1 PWM 器件
     PWM-0  (PWM_beeper         ):请求的周期:250000ns 占空比:0ns 极性:正常

    # dmesg | grep beep
    [6.759203]   PWM 蜂鸣器 PWM_蜂 鸣器:未找到 PWM_蜂 鸣器电源放大器、使用虚拟稳压器
    [6.780730]   PWM-beeper PWM_beeper:无法解析'beper-Hz'属性、使用默认值:1000Hz
    [6.781021]   输入:/devices/platform/pwm_beeper/input/input0上的 PWM 蜂鸣器

    # dmesg | grep -i dmtimer
    [6.618756]   OMAP-dmtimer-PWM dmtimer-PWM@15:请求的占空比:0ns、周期:250000ns
    [6.618767]   OMAP-dmtimer-PWM dmtimer-PWM@15:CLK 速率:32786Hz
    [6.716315]   OMAP-dmtimer-PWM dmtimer-PWM@15:占空比0ns 对于时钟速率32786Hz 来说太短
    [6.716323]   OMAP-dmtimer-PWM dmtimer-PWM@15:最少使用1个时钟周期
    [6.716329]   OMAP-dmtimer-PWM dmtimer-PWM@15:有效占空比:30501ns、周期:244007ns
    [6.717808]   OMAP-dmtimer-PWM dmtimer-PWM@15:加载值:0xfffff8 (-8)、匹配值:0xfffffff8 (-8)

    谢谢、

    Scott

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

    是否使用 make modules_install 将这些模块正确安装到文件系统中?  它们是否自动加载或通过 insmod/depmod 加载?

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

    我有相同的问题。 当定时器-PWM 配置为内核的一部分时、定时器-PWM 将无法正常工作。 就像有一些引导顺序要求一样。

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

    Brad、您好!

    我们尝试了我们可以想到的所有东西、但唯一有效的组合是将两个都配置为可加载模块。 如果其中任何一个是内核的一部分、则不起作用。

    遗憾的是、由于在更改频率时延迟80ms +/- 20ms、我们不得不停止使用驱动程序并直接写入计时器15的寄存器。 我们正在播放一系列提示音、笔记之间的延迟非常明显。

    Scott

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

    您好、Scott、

    我能够复制您的问题、只能使用 CONFIG_PWM_OMAP-DMTIM=m 生成 PWM 我认为这可能是驾驶员的一个错误、我正在对这个问题进行更多调查。  

    同时、如果您计划使用该驱动程序、请将其构建为模块。

    此致、
    Krunal

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

    更新:问题似乎已在内核4.19中得到解决、此处 为参考

    此致、
    Krunal

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

    您好 Krunal、

    感谢您研究模块与内核问题并找到解决方案。

    遗憾的是、我们必须停止使用驱动程序并直接写入计时器15的寄存器。 使用 PWM 驱动器、更改频率时会有80ms +/- 20ms 的延迟。 我们正在播放一系列提示音、笔记之间的延迟非常明显。

    Scott

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

    您好、Scott、

    感谢您的更新。 我将关闭机票、如果您有更多问题、请随时在将来打开机票。

    此致、
    Krunal