こんにちは、みんな、
私はZephyrとIMXRT1176を組み合わせて使用し、FLEXPWMを使ってPWM信号を出力する予定です。
FLEXPWMとXBARに関する過去の投稿をいくつか読みました。ベアメタルコードの出力にFLEXPWMをルーティングするために、XBARAを初期化する必要があります。
さて、Zephyrではこれはどのように機能するのでしょうか?デバイスツリーで何を定義する必要がありますか?FLEXPWMグループを定義するだけで、ビルドシステムがXBARAの設定を処理するという流れで良いのでしょうか?
私の理解では、zephyrは汎用APIを使用してPWMの出力を設定しているようですが、IMXRT117X MCUのようなハードウェア依存性がある場合、これはどのように機能するのでしょうか?手動設定ですか?
この分野について理解を深めるのに役立つ例や解説はありますか?
こんにちは、 @TomC818 さん。
NXP MIMXRTシリーズにご関心をお寄せいただきありがとうございます!
Zephyrでは、選択したピンが通常のFLEXPWM代替機能である場合、デバイスツリーで対応するFLEXPWMサブモジュールを有効にし、正しいpinctrlを指定するだけで済みます。ZephyrのMCUX PWMドライバは、汎用PWM APIを介してpinctrlを適用し、FLEXPWMを設定します。MIMXRT1170 EVKには、flexpwm1_pwm2とGPIO_AD_04をFLEXPWM1_PWM2_Aとして使用する例が既に含まれています。
ただし、設計上、FLEXPWM信号をXBARA経由でXBAR出力ピンにルーティングする必要がある場合、現在のZephyr PWMドライバはXBARAをPWM用に自動的に構成しません。MCUX SDK APIを使用してボード/アプリケーションの初期化時にXBARAを手動で設定するか、xbar-mapsプロパティを使用する小さなカスタムドライバ/初期化関数を追加する必要があります。Zephyrにはnxp,mcux-xbarバインディングがあり、QDECなどの一部のドライバはこれを使用しますが、PWMドライバ自体は現在xbarマップを使用していません。
以下の2つの主要なドライバを参照してください。
1. https://github.com/zephyrproject-rtos/zephyr/blob/main/drivers/pwm/pwm_mcux.c
2. https://github.com/zephyrproject-rtos/zephyr/blob/main/drivers/sensor/nxp/qdec_mcux/qdec_mcux.c
よろしくお願いします、
ギャビン
この回答についてもう少し詳しく教えていただけますか?「xbar-maps」のintreeでの使用例は、/zephyr/samples/sensor/qdec/boards/mimxrt1050_evk_mimxrt1052_hyperflash.overlayだけです。
これは、数値を使うようなものだろうか?
kXBARA1_InputFlexpwm1Pwm0OutTrig0 -> kXBARA1_OutputFlexpwm1Pwm0Exta ?