1

我正在使用 SAMA5D31-EK 板,我试图让 SAMA5D31 内部 PWM 控制器通过 PIO 引脚输出信号:特别是 PE31。该板正在运行 Linux 3.10.0+,我正在使用 sysfs 接口管理 PWM。这个界面似乎运行正确:我可以创建设备(写入“导出”文件),激活它,更改 period 和 duty_cycle 文件的内容(读回时它们包含写入它们的最新值)。至于 PIO PE31 的配置,我已将 arch/arm/boot/dts/sama5d3.dtsi 文件更改为包含

pwm0 {
    pinctrl_pwml1: pwml1-0 {
    atmel,pins =
        <AT91_PIOE 31 AT91_PERIPH_B AT91_PINCTRL_NONE>;  /*PE31*/
    };
};
                pwm0: pwm@f002c000 {
                        compatible = "atmel,sama5d3-pwm";
                        reg = <0xf002c000 0x300>;
                        interrupts = <28 IRQ_TYPE_LEVEL_HIGH 4>;
                        #pwm-cells = <3>;
                        status = "disabled";
                };

sama5d31.dts 文件中 pwm0 的状态也从“禁用”更改为“正常”

在 Internet 的某个地方,我了解到这种行为可能与那些 dts 文件中缺少时钟定义有关。在其他地方我读到我需要升级到 3.11 或 3.12 内核。

任何帮助将不胜感激。

谢谢,琼。

4

1 回答 1

1

最后我设法让那个 PWM 工作;或者更准确地说:通过 GPIO 引脚获取 PWM 输出信号。

上面的dts代码有两个问题。首先,PE31(选择的 GPIO 引脚)正被另一个进程使用。但更重要的是:PWM 控制器节点缺少一些 pinctrl 定义和正确数量的 pwm 单元 (5)。它应该读作:

                pwm0: pwm@f002c000 {
                        compatible = "atmel,sama5d3-pwm";
                        reg = <0xf002c000 0x300>;
                        interrupts = <28 IRQ_TYPE_LEVEL_HIGH 4>;
                        pinctrl-names = "default";
                        pinctrl-0 = <&pinctrl_pwmh1>;
                        #pwm-cells = <5>;
                        status = "disabled";
                };

BR,琼

于 2014-01-30T14:26:39.783 回答