OK1028A-Cの回路図と「QorIQ LS1028 AReference Manual」を確認したところ、デフォルトでボード上の LS1028 で利用可能な 8 つの FlexTimer (FTM) があり、各 FTM には 8 つの pwm チャネルがあることがわかります。
デフォルトのバックライトは FTM1 によって生成された pwm を使用し、FTM7 を使用して pwm テストを実行します。
以下の図に示すように:
LS1028 RCWSR12 レジスタ 12 ~ 14 は、I2C4 用にピンが多重化されています。
以下の図に示すように:
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 に変更します。
以下の図に示すように:
上記の設定が完了したら、デバイス ツリー コードを変更し、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 システムを起動します。
root@forlinx:~#cat /sys/kernel/debug/pwm 現在の pwm デバイスを表示します
以下の図に示すように:
これで、pwm コントローラーを開いたところ、FTM1 が 8 チャンネルをサポートし、バックライトが pwm チャンネル 1 を使用していることがわかります。 変更したデバイス ツリー ファイルとファームウェアをコンパイルし、Folinx EmbeddedLS1028A-CDevelopment Board に書き込み、システムを起動します。
root@forlinx:~#cat /sys/kernel/debug/pwm 現在の pwm デバイスを表示します。
以下の図に示すように:
この時点では、追加した pwm デバイスはオンになっていますが、pwm0 デバイスとは異なります。新しく追加された pwm デバイスの各チャネルには、周期とデューティ サイクルが設定されていません。
したがって、次のステップでは、ドライバー コードを追加する必要はありませんが、sys を使用して pwm パラメーターを直接設定します。 Pwmchip8 は追加した 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 デバイスをチェックしてください。
対応する 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 有効ステータス、期間、デューティ サイクルを表示するコマンド。
以下の図に示すように:
▐ 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}
▐ U7_CAN2_TX によって生成された 1khz の方形波をオシロスコープでテストします
OK1028A-Cシングルボードコンピュータを使用する場合、ピンの多重化により多くの機能モジュールのピンが引き出されませんが、モジュールのドライバはサポートされます。この場合、対応する機能を使用するために、対応する pinmux 構成と rcw のデバイス ツリー ファイルを変更するだけで済みます。
元は www.forlinx.net で公開されています。