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を有効化しても、以下を行うにはいくつかの作業が必要です。
- 接続するディスプレイの仕様に合わせたLTDCの設定(GPIOとタイミング)
- 目的とするTouchGFXアプリケーションの仕様に合わせたLTDCの設定
TouchGFX Generatorは、STM32CubeMXから各種設定を読み出し、依存関係と呼ばれる、警告、推奨事項、またはエラーのリストを表示することができます。 下図は、CubeMXで、任意のマイクロコントローラ(この例ではSTM32F429) について、LTDCを最初に有効化したときに表示される依存関係のリストです。
Note
依存関係 | 説明 |
---|---|
サポートされていないピクセル形式 | TouchGFXのフレームバッファ・ドライバは、RGB565(16bit) とRGB888(24bit) でのみ使用可能です。 LTDCのピクセル・フォーマットは、TouchGFX HAL用に選択したドライバに一致させる必要があります。 |
構成された追加のレイヤ | TouchGFXには、単一レイヤのみ使用可能です。 TouchGFXアプリケーションは、2つのレイヤを有効化しても動作しますが、この警告はLTDCの設定ミスの可能性を指摘しています。 LTDCブロックでレイヤ数を変更してください。 |
ブレンディング係数はPAxCAである必要があります | デフォルトでは、Ltdcレイヤのアルファ定数は0です。 これは、アルファ定数 x ピクセル・アルファとする必要があります。 |
アルファ定数は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ドライバ / 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
結論
TouchGFX Generatorでディスプレイ・インタフェースとしてParallel RGB (LTDC)オプションを有効化すると、必要なHALコードがすべて生成されます。
- STM32CubeMXのLTDC設定に従い、TouchGFXアプリケーションの幅、高さ、ピクセル・フォーマットを設定します。 LTDCレイヤの幅と高さは、TouchGFX Designerのキャンバス・サイズに、LTDCのピクセル・フォーマットは、必要なTouchGFXフレームバッファ・ドライバおよび生成されるアセットのフォーマットに影響を与えます。
- アプリケーション・ティック・ソースにLTDCを選択でき、これによりTouchGFXエンジンのメイン・ループを駆動するハンドラが生成されます。 LTDC設定の場合、通常、開発者は常に提供されたアプリケーション・ティック・ドライバを使用します。