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

ドライバ

[Driver]セクションでは、TouchGFX ALのさまざまな役割に対応するドライバを開発者が選択できます。

TouchGFX Generatorの[Driver]設定

アプリケーション・ティック・ソース

アプリケーションのアプリケーション・ティック・ソースは、アプリケーションを前進させる方法を定義します。 開発者は以下のオプションを使用できます。

  • LTDC - [Display]グループでインタフェースとして[LTDC]を選択した場合、[Application Tick Source]を[LTDC]にできます。 つまり、TouchGFX GeneratorがTouchGFXGeneratedHALクラスにドライバ関数(LTDC割込みハンドラ)を生成し、それがOSWrappers::signalVSync()を呼び出してアプリケーションを前進させます。
  • Custom and FMC - この場合、OSWrappers::signalVSync()を繰り返し呼び出すことでアプリケーションを前進させるハンドラを、開発者が実装する必要があります。
Further reading
カスタムのアプリケーション・ティック・ソースの実装方法の詳細については、「FMC & SPIディスプレイ・インタフェース」シナリオを参照してください。

DMA2Dアクセラレータ(ChromART)

DMA2Dグラフィック・アクセラレーションに関して、開発者には次の3つのオプションがあります。

  • No - アプリケーションはCPUのみを使用して描画します。
  • Yes - アプリケーションは可能であればChromARTチップを使用してピクセルの移動やブレンドを行い、CPUサイクルを解放します。 TouchGFX Generatorによってドライバが生成されるので、開発者によるアクションは必要ありません。
  • Custom - TouchGFX Generatorは汎用のTouchGFX DMAクラスを生成します。これはメンバー関数を含むTouchGFX EngineのDMAインタフェースから継承するもので、カスタム・グラフィック・アクセラレータの場合、開発者はこれを実装する必要があります。

TouchGFX GeneratorでDMA2Dアクセラレータを選択できるようにするには、STM32CubeMXの[Multimedia]カテゴリでこれを有効にする必要があります。

DMA2Dは、マイクロコントローラがサポートする場合、STM32CubeMXの「Multimedia」カテゴリで有効になります。

TouchGFX Generatorによって生成されるDMA2D(ChromART)ドライバは、TransferCompleteInterruptの受信方法として次の2つをサポートしています。

  1. STM32Cube HALドライバを使用して、dma2dハンドラにコールバック関数hdma2d.XferCpltCallbackを登録する。
  2. DMA2D_IRQHandler()割込みハンドラを直接使用する。

この2つの方法を切り替えるには、DMA2D IP用のSTM32CubeMXのNVIC設定で、DMA2Dグローバル割込みを有効化 / 無効化します。

STM32CubeMXのSystem CoreカテゴリにあるNVIC設定で、DMA2Dグローバル割込みを有効化 / 無効化する

グローバル割込みを有効化するとオプション1のコードが生成され、グローバル割込みを無効化するとオプション2のコードが生成されます。

Note
  • DMA2Dのグローバル割込みを使用する場合は、「IRQハンドラ」が「DMA2D HALハンドラ」を呼び出すことを確認します。 これはデフォルトの動作です。
  • グローバル割込みが有効で、DMA2Dの「IRQハンドラ」と「HALハンドラの呼び出し」が無効になっている場合、登録されたコールバックが呼び出されません。
  • GPU2Dアクセラレータ(NeoChrom)

    GPU2D(NeoChrom)は、テクスチャ・マッピングやベクタ・レンダリングなど、TouchGFXの多くの描画操作を高速化するグラフィック・アクセラレータ機能です。 これは、RGB565、RGB888、ARGB8888フォーマットのフレームバッファをサポートします。

    GPU2Dグラフィック・アクセラレーションに関して、開発者には次の2つのオプションがあります。

    • No - アプリケーションはCPUのみを使用して描画します。
    • Yes - アプリケーションは使用可能な場合にNeoChromチップを使用して、TouchGFXによって行われる多くの描画操作を高速化します。 TouchGFX Generatorによってドライバが生成されるので、開発者によるアクションは必要ありません。

    TouchGFX GeneratorでGPU2Dアクセラレータを選択できるようにするには、STM32CubeMXの[Multimedia]カテゴリでこれを有効にする必要があります。

    GPU2Dは、マイクロコントローラがサポートする場合、CubeMXの「Multimedia」カテゴリで有効になります。

    Note
    GPU2Dオプションは、STM32CubeMXで、自分のプロジェクトのMultimediaセクションでGPU2Dが有効になっている場合のみ表示されます。 これはSTM32U599デバイスでのみ使用可能で、MiddlewaresセクションでThreadX RTOSも有効になっている場合、またはベア・メタル・アプリケーション(OSなし)を実行している場合のみ、TouchGFXで使用できます。

    有効にすると、TouchGFX Generatorに新しいセクション([GPU2D Driver])が表示されます。

    [GPU2D Driver]設定

    [GPU2D Command List Size]を設定すると、GPU2Dで使用されるコマンド・リストのサイズがバイト単位で設定されます。

    [GPU2D Memory Pool Location]設定によって、ユーザはGPU2Dが使用するメモリ・プールの場所を設定できます。 バッファはメモリ内で8バイトで揃っている必要があります。 以下のオプションを使用できます。

    • By Allocation - リンカがメモリ・プールを8バイトで揃ったアドレスに配置します。
    • By Address - ユーザがメモリ・プールの開始アドレスを指定できます。 入力されたアドレスが8バイトで揃っていない場合、TouchGFX Generator実行時にエラーとなります。
    Note
    TouchGFX Generatorによって作成されるメモリ・プールの合計サイズは、ベクタ・レンダリングの設定によって異なります。
    • ベクタ・レンダリングが[Disabled]の場合、メモリ・プールのサイズは、1KBのリング・バッファ、GPU2Dのコマンド・リスト・サイズ、および5KBの余白エリアの合計になります。
    • ベクタ・レンダリングが[Enabled]の場合、メモリ・プールのサイズは、1KBのリング・バッファ、GPU2Dのコマンド・リスト・サイズ、(ディスプレイ幅 x ディスプレイの高さのバイト数)、256バイトのLUT、512バイトのグラデーション、および5KBの余白エリアの合計になります。

    リアルタイム・オペレーティング・システム

    開発者はTouchGFXで任意のRTOSを使用できます(OSなしも含む)。 「抽象化レイヤ・アーキテクチャ」で説明したように、TouchGFX EngineはOSWrappersインタフェースを使用して、ユーザが選択したRTOSと、メイン・イベント・ループおよびフレームバッファのアクセスを同期させます。 開発者がTouchGFX Generatorでオペレーティング・システムを選択した場合、選択したOSのプリミティブを介して内部同期するためのコードが生成されます。 それでも、特にスタック・サイズを決定するために、STM32CubeMXを介してオペレーティング・システムを設定する必要があります。

    FreeRTOS(CMSIS OS V1およびV2)およびThreadX(ネイティブ・ミドルウェアまたはAzure RTOSソフトウェア・パック)はSTM32CubeMXから直接設定可能で、TouchGFX Generatorはタスク定義とTouchGFX RTOSドライバの両方の生成済みコードをユーザに提供します。 TouchGFX Generatorは、CMSIS V1およびCMSIS V2準拠のRTOSドライバを生成可能で、これらは任意のCMSIS準拠のRTOS、ThreadXのドライバ、およびオペレーティング・システムなし(No OS)のベア・メタル動作用のドライバとの組み合わせで機能します。

    No OS

    オペレーティング・システムなしでTouchGFXを実行する必要がある場合、STM32CubeMXでオペレーティング・システムが[Middleware and Software Packs]カテゴリで有効になっていない、あるいはX-CUBEとして選択されていなければ、TouchGFX Generatorで[No OS]オプションが有効になります。

    Further reading
    ベア・メタル・アプリケーションの実行時にTouchGFX Generatorによって生成されるコードの詳細については、「リアルタイム・オペレーティング・システム」シナリオを参照してください。

    FreeRTOS

    TouchGFX GeneratorでCMSIS_RTOS_V1またはCMSIS_RTOS_V2を選択できるようにするには、STM32CubeMXの[Middleware and Software Packs]カテゴリでFreeRTOSを有効にする必要があります。

    STM32CubeMXプロジェクトでFreeRTOSを有効化

    一部のTouchGFX Board Setupは、デフォルトでFreeRTOSミドルウェアを使用するように設定されていません。ThreadXまたはNoOS(STM32U599など)を使用するように設定されています。 それでもこれらのTouchGFX Board SetupでFreeRTOSを使用したい場合は、STM32CubeMXの[Software Packs Components Selector]でX-CUBE-FreeROTSパックをダウンロードし、有効にする必要があります。

    [Software Packs Components Selector]でFreeRTOSを有効化

    Further reading
    TouchGFXアプリケーション向けにFreeRTOS(CMSIS_RTOS_V1およびCMSIS_RTOS_V2)を設定する方法については、「リアルタイム・オペレーティング・システム」シナリオを参照してください。

    ThreadX

    ThreadXを有効にするには、X-CUBEソフトウェア・パックを選択するか、STM32CubeMXからネイティブのThreadXミドルウェアを有効にします(選択したマイクロコントローラ・デバイスで使用可能な場合)。

    開発者は、ThreadXがX-CUBEソフトウェア・パックとして設定されているのか、または特定のマイクロコントローラ・ファミリのネイティブのThreadXミドルウェアとして設定されているのかを確認する必要があります。

    Note
  • すべての新しいSTM32マイクロコントローラ・デバイスでは、デフォルトで、STM32CubeMXの「Middleware」カテゴリからThreadXを直接サポートします。追加のパックをダウンロードする必要はありません。 TouchGFX Board Supportパッケージは、ThreadXミドルウェアを使用するか(可能な場合)、X-CUBE-AZRTOSソフトウェア・パックを使用する方向に徐々に移行します。
  • ThreadXサポートを提供するX-CUBE-AZRTOS-XXソフトウェア・パッケージは、すでに広い範囲のSTM32マイクロコントローラ・ファミリで使用可能になっており、STM32CubeMXの[Embedded Software Packages Manager]で見つけることができます。
  • 次のセクションでは、ThreadXをミドルウェアとして、またはAZRTOSソフトウェア・パックとしてアプリケーション用に有効化する方法を示します。

    [Middleware and Software Packs]カテゴリからThreadXを有効にする

    TouchGFX GeneratorでThreadXを選択できるようにするには、STM32CubeMXの[Middleware and Software Packs]カテゴリでThreadXを有効にする必要があります。

    STM32CubeMXプロジェクトの[Middleware and Software Packs]カテゴリで、ThreadXを有効化

    ThreadXを有効にすると、TouchGFX GeneratorでThreadXオプションが使用できるようになります。

    Further reading
    TouchGFXアプリケーション向けにThreadXをネイティブ・ミドルウェアとして設定する方法については、「リアルタイム・オペレーティング・システム」シナリオを参照してください。

    X-CUBEソフトウェア・パックからThreadXを有効にする

    TouchGFX GeneratorでThreadXを選択できるようにするには、STM32CubeMXのソフトウェア・パック・コンポーネント・セレクタでAZRTOSソフトウェア・パックを有効にする必要があります。 プロジェクト内で[Select Components]ボタンをクリックするか、 STM32CubeMXのプロジェクト・メニューでAlt + o を押します。

    STM32CubeMXで[Additional Software]を選択

    次の図は、プロジェクトに対してAZRTOSソフトウェア・パックを有効化する方法を示しています。 [RTOS ThreadX]を選択し、[Core]チェック・ボックスをオンにしてThreadXを有効にします。 まだの場合は、パッケージをダウンロードしてインストールします。

    X-CUBE-AZRTOSソフトウェア・パックからThreadXを有効にする

    ThreadX Software Packをプロジェクトに追加すると、STM32CubeMXのプロジェクト・メニューの左側にある[Middleware and Software Packs]カテゴリの下に該当のX-CUBEが表示されます。

    X-CUBE-AZRTOSからThreadXをSTM32CubeMXプロジェクトで有効化

    ThreadXを有効にすると、TouchGFX Generatorでオプションとして選択できるようになります。また、選択後は、[Memory Pool Size]と[Memory Stack Size]の値が表示されます。

    TouchGFX GeneratorでThreadXを選択

    これらの値は、スレッド・リソースを格納するのに十分大きい必要があります。

    Further reading
    TouchGFXアプリケーション向けにThreadXをX-CUBEとして設定する方法については、「リアルタイム・オペレーティング・システム」シナリオを参照してください。

    その他のCMSIS準拠OS

    STM32CubeMXが提供可能なOS(FreeRTOSおよびThreadX)以外のCMSIS準拠OSを必要とする開発者は、RTOSの設定とタスク定義を手動で行う必要があります。 TouchGFX Generatorが空のOSWrappersインタフェースを生成し、開発者はこれを実装する必要があります。 通常、以下のステップを手動で行う必要があります。

    1. RTOSを設定する。
    2. OSWrappersインタフェースを実装する。
    3. TouchGFXを実行するためのタスクを定義する(MX_TouchGFX_Process)。
    4. スケジューラを起動する。

    MX_TouchGFX_Processを呼び出して、タスク・ハンドラ内で TouchGFX Engineのメイン・ループを開始します。

    void MX_TouchGFX_Process(void);