Armadilloフォーラム

Armadillo−X1 PWM初期化について

e-yamada

2018年3月1日 17時55分

お世話になっております。
拡張I/FのPWMの使用方法について質問させて頂きます。
PWM1 から 9600Hz のパルスを出力するため、arch/arm/boot/dts/imx7d-sdb.dts を参考に
以下の様な設定を追加しました。

/* PWM1 */
/*
* CON8_40: PWM1_OUT
*/
&iomuxc {
x1_ext {
pinctrl_pwm1: pwm1grp {
fsl,pins = <
MX7D_PAD_GPIO1_IO01__PWM1_OUT 0x110b0
>;
};
};
};
&pwm1 {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_pwm1>;
status = "okay";
};

カーネルビルド後、実機でカーネルとDTBを入れ替え再起動後以下の操作を
行いましたが、ポート出力に変化が無く目的の波形を得るに至っておりません。

# echo 0 > /sys/class/pwm/pwmchip0/export # echo 104167 > /sys/class/pwm/pwmchip0/pwm0/period
# echo 52083 > /sys/class/pwm/pwmchip0/pwm0/duty_cycle
# echo 1 > /sys/class/pwm/pwmchip0/pwm0/enable
# grep . /sys/class/pwm/pwmchip0/pwm0/* 2>/dev/null
/sys/class/pwm/pwmchip0/pwm0/duty_cycle:52083
/sys/class/pwm/pwmchip0/pwm0/enable:1
/sys/class/pwm/pwmchip0/pwm0/period:104167
/sys/class/pwm/pwmchip0/pwm0/polarity:normal

DTSの表記について、何か間違っているところがあるのでしょうか?
間違っているとすれば、MX7D_PAD_GPIO1_IO01__PWM1_OUT と共に与えているパラメータかと思います。これに関して値の意味するところを調べたいのですが、何か資料があればご教示をお願い致します。
なお、PWM1(ピン番号40)に対して、プルアップ抵抗10KΩを実装しております。

以上よろしくお願いいたします。

コメント

at_mizo

2018年3月2日 9時56分

> DTSの表記について、何か間違っているところがあるのでしょうか?
> 間違っているとすれば、MX7D_PAD_GPIO1_IO01__PWM1_OUT と共に与えているパラメータかと思います。これに関して値の意味するところを調べたいのですが、何か資料があればご教示をお願い致します。

このパラメータは、bit[31-30]とbit[7-0]しか使われないのでおかしいと思い
ます。この設定だと5kΩ pull upされますが、波形が全く出ない程pull upが
強いかどうかは疑問です。

パラメータの意味については、以下の情報を参考にしてください。

https://users.atmark-techno.com/blog/53/2629

at_mizo

2018年3月2日 15時04分

溝渕です。

すみません。先程気づきました。

> &iomuxc {
> x1_ext {
> pinctrl_pwm1: pwm1grp {
> fsl,pins = <
> MX7D_PAD_GPIO1_IO01__PWM1_OUT 0x110b0
> >;
> };
> };
> };

"iomuxc"ではなく、"iomuxc_lpsr"に追加する必要があります。

GPIO1_IO00〜GPIO1_IO07までの8ピンは、"iomuxc_lpsr"に属します。

e-yamada

2018年3月2日 18時15分

溝渕様

お世話になっております。
ご回答いただき誠にありがとうございます。

前回と今回、ご指摘があった点を以下の様に修正したところ、パルス出力を確認することが出来ました。
ご教示頂き、ありがとうございます。

/* PWM1 */
/*
* CON8_40: PWM1_OUT
*/
&iomuxc_lpsr {
x1_ext {
pinctrl_pwm1: pwm1grp {
fsl,pins = <
MX7D_PAD_GPIO1_IO01__PWM1_OUT 0x04
>;
};
};
};
&pwm1 {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_pwm1>;
status = "okay";
};

また、不明点がありましたら質問させていただきたいと思いますので、今後ともよろしくお願いいたします。

以上よろしくお願いいたします。