1

私は SAMA5D31-EK ボードを使用しており、SAMA5D31 内部 PWM コントローラが PIO ピン (具体的には PE31) を介して信号を出力するようにしようとしています。ボードは Linux 3.10.0+ を実行しており、sysfs インターフェイスを使用して PWM を管理しています。このインターフェイスは正しく実行されているようです: デバイスを作成し (「エクスポート」ファイルに書き込み)、アクティブ化し、期間およびデューティ サイクル ファイルの内容を変更できます (読み戻すと、書き込まれた最新の値が含まれます)。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";
                };

pwm0 のステータスも sama5d31.dts ファイルで「無効」から「正常」に変更されます

インターネットのどこかで、この動作がこれらの dts ファイルに欠落しているクロック定義に関連している可能性があることを知りました。他のどこかで、3.11 または 3.12 カーネルにアップグレードする必要があると読んだことがあります。

どんな助けでも大歓迎です。

ありがとう、ジョアン。

4

1 に答える 1

1

最後に、そのPWMを機能させることができました。より正確には、GPIO ピンを介して PWM 出力信号を取得します。

上記の dts コードには 2 つの問題があります。まず、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、ジョアン

于 2014-01-30T14:26:39.783 に答える