Armadilloフォーラム

Armadillo-400シリーズ PWDドライバーの異常系動作

matsui

2014年5月26日 9時54分

お世話になっております。
ローム松井です。

LinuxのPWMドライバーで仕様規定外の設定を行うとどうなるか
知りたいと考えています。

Armadillo-400 シリーズソフトウェアマニュアル Version 1.8.1の
「9.17. PWM」にて、duty_nsに設定可能な値は、
「0 < duty_ns < period_ns」と記載がございます。

Duty=0%と100%を出力しようとした場合、duty_nsに「0」や「period_ns」
を設定したくなりますが、仕様規定外ですね。
duty_nsに範囲外の値「0」や「period_ns」を設定すると、どうなる
のか(問題の有無)について知りたいと考えています。

ご教授のほど、よろしくお願い致します。
以上です。

コメント

伊藤です。

> Duty=0%と100%を出力しようとした場合、duty_nsに「0」や「period_ns」
> を設定したくなりますが、仕様規定外ですね。

すみません。マニュアルの記載内容が、実際の設定値と合っていませんね。
マニュアルを修正させていただきます。

> duty_nsに範囲外の値「0」や「period_ns」を設定すると、どうなる
> のか(問題の有無)について知りたいと考えています。

Linuxカーネル(v2.6.26)のdrivers/mxc/pwm/mxc_pwm.cファイルの
pwm_config()関数が関連のソースコードになります。

duty_nsに範囲外の値「0」を設定した場合は、「invert」の値により、
出力信号はHighかLowに固定されます。

「duty_ns」と「period_ns」が同じ場合の挙動は、
以下のメーリングリストに情報があります。
http://lists.atmark-techno.com/pipermail/armadillo/2012-September/00832…

以下、該当部分を抜粋します。

> pwm_config()の第2引数(duty_ns)と第3引数(period_ns)が等しい場合に、
> Armadillo-440のLCDバックライト制御(CON11のPWM1)にて10ミリ秒周期で300マイ
> クロ秒程度のHIGH期間が見られる。

> i.MX25のPWMモジュールでは、内部のカウンタは0x0000からカウントアップを始め、
> PWMSARに設定された値と同じ値になったときにPWMO出力を反転し、PWMPR+2と同じ値に
> なったときにPWMO出力を再度反転します。そのため、PWMSAR == PWMPRとなっている場合、
> 2クロック分のパルスが発生してしまいます。

PWMSARの特性について、i.MX25 Reference Manualに以下の記述があります。
============================================================
37.3.2.4 PWM Sample Register (PWMSAR)

A value of zero in the sample register will result in the ipp_pwm_pwmo output
signal being always low/high (POUTC =00 it will be low and POUTC = 01 it will
be high), and hence no output waveform will be produced. If the value in this
register is higher than the PERIOD + 1, the output will never be reset/set
depending on POUTC value.
============================================================

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

お世話になっております。
ローム松井です。

さっそくのお返事ありがとうございます。
それぞれの動作理解できました。

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

> 伊藤です。
>
> > Duty=0%と100%を出力しようとした場合、duty_nsに「0」や「period_ns」
> > を設定したくなりますが、仕様規定外ですね。
>
> すみません。マニュアルの記載内容が、実際の設定値と合っていませんね。
> マニュアルを修正させていただきます。
>
> > duty_nsに範囲外の値「0」や「period_ns」を設定すると、どうなる
> > のか(問題の有無)について知りたいと考えています。
>
> Linuxカーネル(v2.6.26)のdrivers/mxc/pwm/mxc_pwm.cファイルの
> pwm_config()関数が関連のソースコードになります。
>
> duty_nsに範囲外の値「0」を設定した場合は、「invert」の値により、
> 出力信号はHighかLowに固定されます。
>
> 「duty_ns」と「period_ns」が同じ場合の挙動は、
> 以下のメーリングリストに情報があります。
> http://lists.atmark-techno.com/pipermail/armadillo/2012-September/00832…
>
> 以下、該当部分を抜粋します。
>
> > pwm_config()の第2引数(duty_ns)と第3引数(period_ns)が等しい場合に、
> > Armadillo-440のLCDバックライト制御(CON11のPWM1)にて10ミリ秒周期で300マイ
> > クロ秒程度のHIGH期間が見られる。
>
> > i.MX25のPWMモジュールでは、内部のカウンタは0x0000からカウントアップを始め、
> > PWMSARに設定された値と同じ値になったときにPWMO出力を反転し、PWMPR+2と同じ値に
> > なったときにPWMO出力を再度反転します。そのため、PWMSAR == PWMPRとなっている場合、
> > 2クロック分のパルスが発生してしまいます。
>
> PWMSARの特性について、i.MX25 Reference Manualに以下の記述があります。
> ============================================================
> 37.3.2.4 PWM Sample Register (PWMSAR)
>
> A value of zero in the sample register will result in the ipp_pwm_pwmo output
> signal being always low/high (POUTC =00 it will be low and POUTC = 01 it will
> be high), and hence no output waveform will be produced. If the value in this
> register is higher than the PERIOD + 1, the output will never be reset/set
> depending on POUTC value.
> ============================================================
>
> 以上、よろしくお願いいたします。
>