我正在使用SAMA5D31-EK板,我正在尝试让SAMA5D31内部PWM控制器通过PIO引脚输出信号:特别是PE31。该板运行Linux 3.10.0+,我正在使用sysfs接口管理PWM。此接口似乎正确执行:我可以创建设备(写入'export'文件),激活它,更改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的状态也从“禁用”更改为“正常”
在互联网上的某个地方,我了解到这种行为可能与这些dts文件中缺少时钟定义有关。在其他地方我读过我需要升级到3.11或3.12内核。
非常感谢任何帮助。
谢谢, 琼。
答案 0 :(得分:1)
最后我设法让PWM工作;或者更准确地说:通过GPIO引脚获得PWM输出信号。
上面的dts代码有两个问题。首先,PE31(所选的GPIO引脚)正被另一个进程使用。但更重要的是:PWM控制器节点缺少一些pinctrl定义和正确数量的pwm-cells(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, 琼