OK1028A-C 開発ボードで PWM 方形波を出力するにはどうすればよいですか?

OK1028A-Cの回路図と「QorIQ LS1028 AReference Manual」を確認したところ、デフォルトでボード上の LS1028 で利用可能な 8 つの FlexTimer (FTM) があり、各 FTM には 8 つの pwm チャネルがあることがわかります。  

www.forlinx.net

OK1028A-C 開発ボードで PWM 方形波を出力するにはどうすればよいですか?

デフォルトのバックライトは FTM1 によって生成された pwm を使用し、FTM7 を使用して pwm テストを実行します。

以下の図に示すように:

OK1028A-C 開発ボードで PWM 方形波を出力するにはどうすればよいですか?

LS1028 RCWSR12 レジスタ 12 ~ 14 は、I2C4 用にピンが多重化されています。

以下の図に示すように:

OK1028A-C 開発ボードで PWM 方形波を出力するにはどうすればよいですか?

I2C4 ピンは 6 つのピン機能に多重化できます。 OK1028A-C はピンを can2 の rx および tx に設定します。回路図「OK1028A-C_V1.1」では T6_CAN2_RX、U7_CAN2_TX が確認できます。

rcw ファイルを変更することで、I2C4 を pwm ピンに設定できます。

OK1028A-Cはデフォルトでpwm機能をサポートしているため、ドライバーを移植する必要はありません。必要なのは、pinmux を変更し、デバイス ツリーに pwm の対応するデバイス ノードを追加することだけです。パッケージ/ファームウェアを変更する

/rcw/ls1028ardb/RSQPP0x85bb/rcw1500gpu600.rcw ファイルの IIC4_PMUX の設定は、ピンを pwm 出力として構成することです。

IIC4 _ PMUX = 2 を IIC4 _ PMUX = 4 に変更します。

以下の図に示すように:

OK1028A-C 開発ボードで PWM 方形波を出力するにはどうすればよいですか?

上記の設定が完了したら、デバイス ツリー コードを変更し、pwm 構成を追加する必要があります。変更したファイルのパスは次のとおりです。

パッケージ/linux/linux/arch/arm64/boot/dts/freescale/fsl-ls1028a.dtsi。

次に、pwm7 デバイスを追加します

Pwm7: pwm@2860000 {
                        互換性 = "fsl,ls1028a-ftm-pwm";
                        reg =;
                        #pwm-cells =;
                        クロック名 = "ftm_sys";
                        クロック = <&ftm_sysclk>;
                };

以下の図に示すように:

OK1028A-C 開発ボードで PWM 方形波を出力するにはどうすればよいですか?

▐ OK1028A-C システムを起動します。

 

root@forlinx:~#cat /sys/kernel/debug/pwm 現在の pwm デバイスを表示します

以下の図に示すように:

OK1028A-C 開発ボードで PWM 方形波を出力するにはどうすればよいですか?

これで、pwm コントローラーを開いたところ、FTM1 が 8 チャンネルをサポートし、バックライトが pwm チャンネル 1 を使用していることがわかります。 変更したデバイス ツリー ファイルとファームウェアをコンパイルし、Folinx EmbeddedLS1028A-CDevelopment Board に書き込み、システムを起動します。

root@forlinx:~#cat /sys/kernel/debug/pwm 現在の pwm デバイスを表示します。

以下の図に示すように:

OK1028A-C 開発ボードで PWM 方形波を出力するにはどうすればよいですか?

この時点では、追加した pwm デバイスはオンになっていますが、pwm0 デバイスとは異なります。新しく追加された pwm デバイスの各チャネルには、周期とデューティ サイクルが設定されていません。

したがって、次のステップでは、ドライバー コードを追加する必要はありませんが、sys を使用して pwm パラメーターを直接設定します。 Pwmchip8 は追加した pwm デバイスです。

OK1028A-C 開発ボードで PWM 方形波を出力するにはどうすればよいですか?

▐ 使用される pwm チャネルを有効にする

root@forlinx:~#echo 1 > /sys/class/pwm/pwmchip8/export pwm チャネル 1 を初期化します

root@forlinx:~#echo 2 > /sys/class/pwm/pwmchip8/export pwm チャネル 2 を初期化します

root@forlinx:~#cat /sys/kernel/debug/pwm コマンド現在の pwm デバイスをチェックしてください。

OK1028A-C 開発ボードで PWM 方形波を出力するにはどうすればよいですか?

対応する pwm チャネルをキャンセルしたい場合は、「echo 1 > /sys/class/pwm/pwmchip8/unexport」を使用できます。

「echo 2 > /sys/class/pwm/pwmchip8/unexport」コマンド。

pwm は一度に一方向にしか有効にできないため、最初に pwm1 を設定してオンにします。

root@forlinx:~#echo 1000000 > /sys/class/pwm/pwmchip8/pwm1/period pwm1 周期を ns 単位の 1000000 (1kHz) に設定します。

root@forlinx:~#echo 500000 > /sys/class/pwm/pwmchip8/pwm1/duty_cycle デューティサイクルを 500000 に設定します。サイクル内のオン時間はデューティ サイクルで、単位は ns、デューティ サイクルは 50% です。 。

root@forlinx:~#echo 1 > /sys/class/pwm/pwmchip8/pwm1/enable 有効にする

root@forlinx:~#cat/sys/class/pwm/pwmchip8/pwm1/{enable,period,duty_cycle}pwm 有効ステータス、期間、デューティ サイクルを表示するコマンド。

以下の図に示すように:

OK1028A-C 開発ボードで PWM 方形波を出力するにはどうすればよいですか?

▐ T6_CAN2_RX によって生成された 1khz 方形波をオシロスコープでテストします

一度に有効にできるのは 1 つの pwm だけであるため、pwm2 を有効にしたい場合は、最初に pwm1 をオフにする必要があります。

root@forlinx:~#echo 0 > /sys/class/pwm/pwmchip8/pwm1/enable

root@forlinx:~#echo 1000000 > /sys/class/pwm/pwmchip8/pwm2/period 期間を 1000000 に設定します

root@forlinx:~#echo 500000 > /sys/class/pwm/pwmchip8/pwm2/duty_cycleduty_cycle を 500000 に設定します。

root@forlinx:~#echo 1 > /sys/class/pwm/pwmchip8/pwm2/enable 有効にする

root@forlinx:~#cat/sys/class/pwm/pwmchip8/pwm2/{enable,period,duty_cycle}

OK1028A-C 開発ボードで PWM 方形波を出力するにはどうすればよいですか?

▐ U7_CAN2_TX によって生成された 1khz の方形波をオシロスコープでテストします

OK1028A-Cシングルボードコンピュータを使用する場合、ピンの多重化により多くの機能モジュールのピンが引き出されませんが、モジュールのドライバはサポートされます。この場合、対応する機能を使用するために、対応する pinmux 構成と rcw のデバイス ツリー ファイルを変更するだけで済みます。

元は www.forlinx.net で公開されています。

www.forlinx.net