ドライバ
[Driver]セクションでは、TouchGFX ALのさまざまな役割に対応するドライバを開発者が選択できます。
アプリケーション・ティック・ソース
アプリケーションのアプリケーション・ティック・ソースは、アプリケーションを前進させる方法を定義します。 開発者は以下のオプションを使用できます。
- LTDC - [Display]グループでインタフェースとして[LTDC]を選択した場合、[Application Tick Source]を[LTDC]にできます。 つまり、TouchGFX Generatorが
TouchGFXGeneratedHAL
クラスにドライバ関数(LTDC割込みハンドラ)を生成し、それがOSWrappers::signalVSync()
を呼び出してアプリケーションを前進させます。 - Custom and FMC - この場合、
OSWrappers::signalVSync()
を繰り返し呼び出すことでアプリケーションを前進させるハンドラを、開発者が実装する必要があります。
Further reading
DMA2Dアクセラレータ(ChromART)
DMA2Dグラフィック・アクセラレーションに関して、開発者には次の3つのオプションがあります。
- No - アプリケーションはCPUのみを使用して描画します。
- Yes - アプリケーションは可能であればChromARTチップを使用してピクセルの移動やブレンドを行い、CPUサイクルを解放します。 TouchGFX Generatorによってドライバが生成されるので、開発者によるアクションは必要ありません。
- Custom - TouchGFX Generatorは汎用のTouchGFX DMAクラスを生成します。これはメンバー関数を含むTouchGFX EngineのDMAインタフェースから継承するもので、カスタム・グラフィック・アクセラレータの場合、開発者はこれを実装する必要があります。
TouchGFX GeneratorでDMA2Dアクセラレータを選択できるようにするには、STM32CubeMXの[Multimedia]カテゴリでこれを有効にする必要があります。
TouchGFX Generatorによって生成されるDMA2D(ChromART)ドライバは、TransferCompleteInterruptの受信方法として次の2つをサポートしています。
- STM32Cube HALドライバを使用して、dma2dハンドラにコールバック関数
hdma2d.XferCpltCallback
を登録する。 DMA2D_IRQHandler()
割込みハンドラを直接使用する。
この2つの方法を切り替えるには、DMA2D IP用のSTM32CubeMXのNVIC設定で、DMA2Dグローバル割込みを有効化 / 無効化します。
グローバル割込みを有効化するとオプション1のコードが生成され、グローバル割込みを無効化するとオプション2のコードが生成されます。
Note
GPU2Dアクセラレータ(NeoChrom)
GPU2D(NeoChrom)は、テクスチャ・マッピングやベクタ・レンダリングなど、TouchGFXの多くの描画操作を高速化するグラフィック・アクセラレータ機能です。 これは、RGB565、RGB888、ARGB8888フォーマットのフレームバッファをサポートします。
GPU2Dグラフィック・アクセラレーションに関して、開発者には次の2つのオプションがあります。
- No - アプリケーションはCPUのみを使用して描画します。
- Yes - アプリケーションは使用可能な場合にNeoChromチップを使用して、TouchGFXによって行われる多くの描画操作を高速化します。 TouchGFX Generatorによってドライバが生成されるので、開発者によるアクションは必要ありません。
TouchGFX GeneratorでGPU2Dアクセラレータを選択できるようにするには、STM32CubeMXの[Multimedia]カテゴリでこれを有効にする必要があります。
Note
有効にすると、TouchGFX Generatorに新しいセクション([GPU2D Driver])が表示されます。
[GPU2D Command List Size]を設定すると、GPU2Dで使用されるコマンド・リストのサイズがバイト単位で設定されます。
[GPU2D Memory Pool Location]設定によって、ユーザはGPU2Dが使用するメモリ・プールの場所を設定できます。 バッファはメモリ内で8バイトで揃っている必要があります。 以下のオプションを使用できます。
- By Allocation - リンカがメモリ・プールを8バイトで揃ったアドレスに配置します。
- By Address - ユーザがメモリ・プールの開始アドレスを指定できます。 入力されたアドレスが8バイトで揃っていない場合、TouchGFX Generator実行時にエラーとなります。
Note
- ベクタ・レンダリングが[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
FreeRTOS
TouchGFX GeneratorでCMSIS_RTOS_V1またはCMSIS_RTOS_V2を選択できるようにするには、STM32CubeMXの[Middleware and Software Packs]カテゴリでFreeRTOSを有効にする必要があります。
一部のTouchGFX Board Setupは、デフォルトでFreeRTOSミドルウェアを使用するように設定されていません。ThreadXまたはNoOS(STM32U599など)を使用するように設定されています。 それでもこれらのTouchGFX Board SetupでFreeRTOSを使用したい場合は、STM32CubeMXの[Software Packs Components Selector]でX-CUBE-FreeROTSパックをダウンロードし、有効にする必要があります。
Further reading
ThreadX
ThreadXを有効にするには、X-CUBEソフトウェア・パックを選択するか、STM32CubeMXからネイティブのThreadXミドルウェアを有効にします(選択したマイクロコントローラ・デバイスで使用可能な場合)。
開発者は、ThreadXがX-CUBEソフトウェア・パックとして設定されているのか、または特定のマイクロコントローラ・ファミリのネイティブのThreadXミドルウェアとして設定されているのかを確認する必要があります。
Note
次のセクションでは、ThreadXをミドルウェアとして、またはAZRTOSソフトウェア・パックとしてアプリケーション用に有効化する方法を示します。
[Middleware and Software Packs]カテゴリからThreadXを有効にする
TouchGFX GeneratorでThreadXを選択できるようにするには、STM32CubeMXの[Middleware and Software Packs]カテゴリでThreadXを有効にする必要があります。
ThreadXを有効にすると、TouchGFX GeneratorでThreadXオプションが使用できるようになります。
Further reading
X-CUBEソフトウェア・パックからThreadXを有効にする
TouchGFX GeneratorでThreadXを選択できるようにするには、STM32CubeMXのソフトウェア・パック・コンポーネント・セレクタでAZRTOSソフトウェア・パックを有効にする必要があります。 プロジェクト内で[Select Components]ボタンをクリックするか、 STM32CubeMXのプロジェクト・メニューでAlt + o
を押します。
次の図は、プロジェクトに対してAZRTOSソフトウェア・パックを有効化する方法を示しています。 [RTOS ThreadX]を選択し、[Core]チェック・ボックスをオンにしてThreadXを有効にします。 まだの場合は、パッケージをダウンロードしてインストールします。
ThreadX Software Packをプロジェクトに追加すると、STM32CubeMXのプロジェクト・メニューの左側にある[Middleware and Software Packs]カテゴリの下に該当のX-CUBEが表示されます。
ThreadXを有効にすると、TouchGFX Generatorでオプションとして選択できるようになります。また、選択後は、[Memory Pool Size]と[Memory Stack Size]の値が表示されます。
これらの値は、スレッド・リソースを格納するのに十分大きい必要があります。
Further reading
その他のCMSIS準拠OS
STM32CubeMXが提供可能なOS(FreeRTOSおよびThreadX)以外のCMSIS準拠OSを必要とする開発者は、RTOSの設定とタスク定義を手動で行う必要があります。 TouchGFX Generatorが空のOSWrappers
インタフェースを生成し、開発者はこれを実装する必要があります。 通常、以下のステップを手動で行う必要があります。
- RTOSを設定する。
OSWrappers
インタフェースを実装する。- TouchGFXを実行するためのタスクを定義する(
MX_TouchGFX_Process
)。 - スケジューラを起動する。
MX_TouchGFX_Process
を呼び出して、タスク・ハンドラ内で TouchGFX Engineのメイン・ループを開始します。
void MX_TouchGFX_Process(void);