######1。概要######
(2) struct pwm_ops 構造体。PWM コントローラーの演算関数が含まれます。ドライバー開発者が実装する必要がある 2 つの基本関数は、apply 関数と get_state 関数です。apply 関数は、PWM 信号のイネーブル状態、周期、デューティ サイクル、極性などの構成を含む、PWM コントローラーの構成に使用されます。 ; get_state 関数が使用されます PWM コントローラを登録するときに、イネーブル ステータス、周期、デューティ サイクル、極性などを含む、指定された PWM チャネル信号の初期ステータスを取得します。
(3) struct pwm_device 構造体。PWM コントローラーによる PWM 信号出力を表します。
3.3 ドライバー フレームワークのコア機能
(1) pwmchip_add 関数。新しい PWM コントローラー デバイスを登録するために使用されます。 ./drivers/pwm/core.c で定義されます。 (2) pwmchip_remove 関数。 PWM コントローラー デバイスを取り外すために使用されます。 ./drivers/pwm/core.c で定義されます。
3.4 ドライバーの代表的な実装方法
(1) 概要
PWM ドライバーのソース ファイルは ./drivers/pwm パスにあります。ドライバー開発者は、対応するソース ファイルを追加する必要があります。ソース ファイルの設計は、他のメーカーのドライバー コードを参照できます。元のコードの命名スタイルを参照して、新しく追加したドライバー ソース ファイルに pwm-xx.c という名前を付け、プローブ関数と削除関数にそれぞれ xx_pwm_probe および xx_pwm_remove という名前を付け、PWM コントローラー構造を struct xx_pwm_chip として定義できます。 ./drivers/pwm パス内のファイルは次のとおりです。
(2) apply関数とget_state関数の定義PWM コントローラーのマニュアルによると、apply 関数と get_state 関数はドライバー開発者によって定義されています。
(3)xx_pwm_probe関数定義
xx_pwm_probe 関数の実装方法は次のとおりです。最初に PWM コントローラー構造体 struct xx_pwm_chip 変数を初期化し、次に PWM ドライバー フレームワークのコア関数 pwmchip_add を呼び出して新しい PWM コントローラー デバイスを登録します。
(4)xx_pwm_remove関数定義
xx_pwm_remove 関数は、PWM ドライバー フレームワークのコア関数 pwmchip_remove を呼び出して PWM コントローラー デバイスを削除することによって実装されます。
4. ドライバーの追加方法
4.1 ドライバーソースファイルの追加
セクション 3.4 で説明されている方法に従って、ドライバー ソース ファイル pwm-xx.c を書き込み、それを ./drivers/pwm パスに追加します。
4.2 コンパイルサポートの追加
(1) ./drivers/pwm パスの下の Kconfig ファイルを変更し、追加された PWM ドライバー構成オプションを追加します。
(2) ./drivers/pwm パスにある Makefile ファイルを変更し、pwm-xx.c のコンパイル オプションを追加します。
(3) memuconfig インターフェースで、追加した PWM ドライバーを有効にします。設定インターフェイスは次のとおりです。
4.3 PWM コントローラー デバイス ツリー ノードの追加PWM コントローラーのデバイス ツリー ノードをデバイス ツリーに追加します。このノードの基本プロパティには、互換性、レジスタ、#pwm セルの数が含まれます。必要に応じて、割り込み、クロック、リセット、その他のプロパティを追加します。
PWM コントローラーのデバイス ツリーの設計方法は、./Documentation/devicetree/bindings/pwm を参照できます。
以下は、PWM コントローラー デバイス ツリー ノードの例です。参考資料は以下の通りです:
./Documentation/devicetree/bindings/pwm/nvidia,tegra20-pwm.yaml。
5.デバッグ方法
sysfs インターフェイスを使用して、PWM ドライバーの機能デバッグを実行します。主なデバッグ コマンドの例は次のとおりです。
(1) PWM コントローラー ノードの表示
ls /sys/class/pwm/pwmchip0
(2) 指定された PWM チャネル信号をオープンします
エコー n > /sys/class/pwm/pwmchip0/export
//n はチャンネル番号です
(3)PWM信号周期の設定
エコー pvalue > /sys/class/pwm/pwmchip0/pwm0/period
//pvalue は期間の値です。
(4)PWM信号のデューティサイクルを設定します
エコー dvalue > /sys/class/pwm/pwmchip0/pwm0/duty_cycle
//dvalue は有効レベル幅の値です。
(5) 特定の PWM チャネル信号を有効にする
エコー 1 > /sys/class/pwm/pwmchip0/pwm0/enable
(6) 特定の PWM チャネル信号を無効にする
エコー 0 > /sys/class/pwm/pwmchip0/pwm0/enable
以上がLinux PWM ドライバーの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。