メイン・コンテンツまでスキップ

LTDC / パラレルRGB

TFTコントローラを備えたマイクロコントローラ(STM32F429、STM32F746、STM32H7など)では、フレームバッファ・メモリからディスプレイにピクセルを転送するようにLTDCを設定するHALの一部分を TouchGFX Generatorによって生成できます。 LTDCによってVSYNC割込みが生成されると、このコードがOSWrappers::signalVSync()を呼び出し、適切なフレームバッファの転送を開始するとともに、TouchGFXエンジンのメイン・ループのブロックを解除します。

ディスプレイ・インタフェース

開発者がドライバ全体を手動で実装する必要がある[Custom]ディスプレイ・インタフェースとは異なり、LTDCの場合は、TouchGFX HALがLTDCの設定をサポートするために必要なコードを、TouchGFX Generatorがすべて生成できます。

TouchGFX Generatorで[Parallel RGB (LTDC)]オプションを選択するには、STM32CubeMXカテゴリ・リストのMultimediaグループで、LTDCを有効化する必要があります。

LTDCを有効化すると、TouchGFX GeneratorのDisplayセクションで、 Parallel RGB (LTDC)オプションを使用できるようになります。

STM32CubeMXでLTDCを有効化しても、以下を行うにはいくつかの作業が必要です。

  1. 接続するディスプレイの仕様に合わせたLTDCの設定(GPIOとタイミング)
  2. 目的とするTouchGFXアプリケーションの仕様に合わせたLTDCの設定

TouchGFX Generatorは、STM32CubeMXから各種設定を読み出し、依存関係と呼ばれる、警告、推奨事項、またはエラーのリストを表示することができます。 下図は、CubeMXで、任意のマイクロコントローラ(この例ではSTM32F429) について、LTDCを最初に有効化したときに表示される依存関係のリストです。

Note
STM32CubeMXでLTDCを有効化するとすぐに、TouchGFX Generatorのインタフェースに、LTDCに関する推奨事項、警告、およびエラーが表示されます。
依存関係説明
レイヤ数TouchGFXには、単一レイヤのみ使用可能です。 TouchGFXアプリケーションは、2つのレイヤを有効化しても動作しますが、この警告はLTDCの設定ミスの可能性を指摘しています。 LTDCブロックでレイヤ数を変更してください。
ウィンドウ位置デフォルトでは、LTDCレイヤのウィンドウの水平位置および垂直位置は0です。 ウィンドウの水平停止位置と垂直停止位置は、ディスプレイの寸法と同じに設定する必要があります。
アルファ定数は0ですデフォルトでは、LTDCレイヤのアルファ定数は0です。 アプリケーションでグローバル・アルファを常時使用しないかぎり、この値は0より大きく、可能ならば255としてください。

[Multimedia]セクションでLTDCペリフェラルを有効化した後に、実際にディスプレイ・インタフェースとして[Parallel RGB (LTDC)]を選択することを忘れないでください。

次の図は、警告を解消するようにLTDCを設定し、TouchGFX Generatorのインタフェースに[Dependencies]グループが表示されなくなった状態を示しています

STM32CubeMXからの設定の読出し

TouchGFX Generatorでディスプレイ・インタフェースとしてParallel RGB (LTDC) を選択すると、フレームバッファの高さが、LTDC設定の水平開始 / 停止位置垂直開始 / 停止位置から継承されます。

ディスプレイとアプリケーションの寸法に応じてレイヤ 0の寸法を定義すると、 Dependency ウィンドウに新しいエントリが表示されます。

フレームバッファの画像の幅画像の高さがウィンドウのサイズに一致していることを確認します。通常は、これらを一致させることが望ましく、それによって警告は解消されます。

Caution
TouchGFX Generatorは、LTDCが有効な場合、LTDC設定の高さの値を継承します。 ただし、高さは、TouchGFX Generatorのインタフェースから変更することもできます。 これらをウィンドウのLTDCレイヤ設定と異なる値に変更すると、設定の不一致が発生する場合があります。

TouchGFXドライバ / VSYNC信号

ディスプレイ・インタフェースとしてParallel RGB (LTDC)を選択すると、開発者はLTDCアプリケーション・ティック・ドライバまたはTouchGFXドライバにアクセスできるようになります。

次のコードは、LTDCの設定に従って生成されるLTDC割込みを処理する割込みハンドラ(STM32F7) です。 生成されるハンドラは、TouchGFXエンジンのメイン・ループのブロックを自動的に解除します。

extern "C"
irq void LTDC_IRQHandler(void)
{
if (LTDC->ISR & 1)
{
LTDC->ICR = 1;
if (LTDC->LIPCR == (LTDC->AWCR & 0x7FF) - 1)
{
//entering active area
OSWrappers::signalVSync();
}
}
}
Note
LTDCドライバを機能させるには、LTDC NVIC設定またはグローバルNVIC設定で、LTDCのグローバル割込みを有効化するとともに、ハンドラ・コードの生成も有効化する必要があります。

LTDCフレームバッファの設定

生成されたTouchGFX HALが実行時にLTDCのレイヤ・カラーのフレームバッファ開始アドレスを自動的に設定するので、ユーザがLTDC設定で値を設定することはありません。

結論

TouchGFX Generatorでディスプレイ・インタフェースとしてParallel RGB (LTDC)オプションを有効化すると、必要なHALコードがすべて生成されます。

  • STM32CubeMXのLTDC設定に従い、TouchGFXアプリケーションの幅、高さ、ピクセル・フォーマットを設定します。 LTDCレイヤの高さは、TouchGFX Designerのキャンバス・サイズに、LTDCのピクセル・フォーマットは、必要なTouchGFXフレームバッファ・ドライバおよび生成されるアセットのフォーマットに影響を与えます。
  • アプリケーション・ティック・ソースにLTDCを選択でき、これによりTouchGFXエンジンのメイン・ループを駆動するハンドラが生成されます。 LTDC設定の場合、通常、開発者は常に提供されたアプリケーション・ティック・ドライバを使用します。