こんにちは、STM32開発エコシステムによる開発実習、高性能マイコン編、マスターDMAでバイトスワップについてお話ししたいと思います。この実習を通してSTM32の開発実習の流れをぜひ体験し、ご活用ください。それでは始めましょう。実習3マスターDMAでバイトスワップ本実習ではUARTで入力されたモジ列の機数とグースバイト、MDMAのバイトスワップ機能を使って入れ替えます。本実習の目的はSTM32H7マイコンで搭載しているMDMA機能とツールでの生成方法をもらうことです。使用する機材はヌークレオボードです。ではSTM32QVMXを起動してみましょう。STM32QVMXが起動したらQVMXの初期画面からニュープロジェクトにある3つのボタンのお地、真ん中のアクセス2ボードセレクターをクリックしてください。オップアップされたウィンドウ左側のフレームナーにありますタイプはヌークレオ1445MCU-MPUシリーズはSTM32H7を選択し、右下のリストからヌークレオH755ZYQをダブルクリックします。ビンの初期画をしますか?と聞かれますのでESを押します。プロジェクト画面が開きます。これより各自設定を行っていきましょう。タリ側のフレームからシステムコアのQuartXM7をクリックします。コンフィギュレーションパネルのパラメータセッティングからCPU iCacheとCPU Dcacheをイネーブルにします。MDMAを使うのでAXISラムをCacheしないようにします。AXISラムをCacheしないようにするためにMPUの設定をします。コンフィギュレーションパネルのパラメータセッティングからMPUコントロールモード、バックグラウンドリージョンプリビレージドアクセス ONLYプラスMPUディセーブルDuringHardFortに設定します。MPUリージョンの設定を行います。QuartXMemory Protection Unit リージョンゼロセッティングを次のように設定します。MPUリージョンエネーブルドMPUリージョンベースアドレス 0X024000MPUリージョンサイズ512キロバイトMPUサブリージョンディセーブル0X0MPUTXフィールドレベルレベル0MPUアクセスパーミッション All Access Note PermittedMPUインストラクションアクセス EnableMPUシャラビリティーパーミッション EnableMPUキャッシュラブルパーミッション DisableMPUバッファブルパーミッション Enableに設定します。MDMAの設定を行います。まずチャンネルを追加します。MDMAからアドチャンネルボタンを押します。画面を開けてTransfer1のMDMAリクエストをSoftwareリクエストにします。画面下のBuffer Transfer Ringsを16にします。画面右下のTenshoモードを設定します。IncrementモードはSourceDistinutionのともにIncrement by a HalfwordデータウィズスはSourceDistinutionのともにHalfwordに設定します。レストタイプをクリックして画面下のIndiannessをBytoIndiannessExchange whenDistinutionDataSize is greater than byteにします。続いてClockの設定をしていきます。画面上部にありますClock Configurationのタブをクリックして開きます。開いた画面ではClockやPLL、Pheriferalに必要なClockとすべてのClock設定がGUIで行います。バカで囲まれた箇所を408種にしてEnterキーをします。しばらく時間がかかります。M7コアが408MHzにM4コアが240MHzになります。では実際に設定しましょう。ここまででHTM32QBMX用での設定は完了です。プロジェクトマネージャータブを選択します。プロジェクトメニューでプロジェクトの設定を行います。まずはじめにプロジェクトの名前を設定します。プロジェクトネームにプロジェクトの名前を設定しプロジェクトロケーションにはプロジェクトを保存するルートディレクトリを設定します。ここで重要な注意点です。プロジェクト名やプロジェクトを保存するフォルダのパスに全角、半角スペース、カンジカナなどの2バイト文字を含めてはいけません。使うツールによってはパスが通らなくなりプロジェクトをビルドする際に偉いになることが報告されています。デフォルトではビルドに必要ない全てのファイルをプロジェクトフォルダにコピーする設定になっており膨大な量のファイルが育成されPCのストレージをアップアップすることになります。そこで最上段の設定を2番目のコピーオンリーネスタリーダイブルレファイルズに変更し不必要なファイルのコピーを選びます。画面右上にありますGenerateコードをクリックします。しばらくしてコード生成が完了すると生成されたプロジェクトファイルを設定したツールチェーンで開くかフォルダを開くか一旦終了するかの選択肢を訪ねていきます。ここではオープンプロジェクトボタンを押してください。では実際に構図生成をしてプロジェクトファイルをMWMで開いてみましょう。ビデオでこれまでの手順を確認したいと思います。メイン画面のアクセスとボードセレクターをクリックしてください。右側からタイプはNUCLEO144クリックしてください。MCUMPUシリーズはSTM32H7をクリックしてください。WINDOWの右下からNUCLEOH755ZYQをダブルクリックしてください。Pの所長をしますかと聞かれるのでESを押します。左側のフレームからシステムコアのコミナナをクリックします。コンフィギュレーションパネルのパラメーターセッティングからCPU iCashとCPU dCashをNABLEにします。NPUコントロールモードを設定します。NPUコントロールモードをバックグラウンドDjohn PrivilegedAccess OnlyPlus NPU DisabledRuling Hard Foldに設定します。NPU Regionの設定を行います。COATXNemory Protection UnitLegion Zero Settingsの設定をします。NPU RegionをNABLEドに設定します。NPU RegionBase Addressを次のように設定します。0X 02400000NPU Region Size212KBNPU Sub-region Disabled0X0NPU TXField Levelレベル0NPU Access PermissionAll Access Not PermittiveNPU Instruction AccessNABLENPU ShareableNPU ShareableNABLE PermissionNABLENPU Castable Permission DisabledNABLENPU Bufferable PermissionNABLEに変更します。MDMAの設定を行います。MDMAからOutChannelを押します。画面を広げてTransfer1のMDMA Requestをソフトウェアリクエストにします。画面下のBuffer Transfer Lengthを重力にします。画面右下のTensor Modeを設定します。Increment ModeはSource DestinationともにIncrement by a Halfwordに設定します。Data AbilityはSource DestinationともにHalfwordに設定します。続いてリストタイプをクリックして画面右下のEndianessをBitewndianessExchange when DistinationData Size is greater than biteに設定します。続いてGlockの設定をして行きます。画面上部にありますGlock Configurationタブをクリックして開きます。画面真ん中のGlock設定を480に設定します。Glock Wizard Pop-Upが開きましたらOKを押します。しばらく時間がかかります。Glock設定が完了しました。ここまででHTM32QPMX上での設定は完了です。Project Managerタブをクリックします。まず初めにProjectの名前を設定します。Project LocationにはProjectを保存するクリックします。ツール支援は今回はEWMを使いますのでEWMを選択してください。そして左側のCode Generatorボタンを押します。HTM32QMCU PackagesAnd Embedded Software Packageの項目は真ん中のCopy, On Leaser実際にDibrary Filesに変更します。画面右上にありますGenerate Codeプロジェクトファイルと初期化コードが自動生成されます。Code Generation Pop-upが減りきましたらOpen Projectボタンを押してください。以上でQBMXによるコード生成は完了です。実装するプログラムはM様だけを使います。M4は無限ループです。ここからユーザー処理を追加していきます。HTM32QBMXで生成したコードにはユーザーコードビジンとユーザーコードエンドの機体がありこのコメントの範囲内にユーザーコードを追加していきます。ここで追期したユーザーコードはサイドQBMXにてコード生成した場合でも放されます。今回追期する箇所は8箇所となります。まずはワークスペースをM7に切り替えます。ワークスペースから5日にCM7と機械のエルフを選択します。ワークスペースを切り替えましたらM7のメイン.Cを開きます。ユーザーコードビジンPMの箇所のコードを修正します。バッファサイズの定義を追加します。ユーザーコードビジンPVの箇所のコードを修正します。バッファ変数を定義します。MDMAでアクセスする変数は32バイト協会に揃える必要があるためアクセスをクローしをして定義します。ユーザーコードビジンPFPの箇所のコードを修正します。UARTからの入力元数を定義します。ユーザーコードビジン2の箇所のコードを修正します。MDMAテストとコンソール上に表示させる処理を追加します。ユーザーコードビジン3の箇所のコードを修正します。UARTからのデート入力、MDMAでの転送開始MDMAでの転送完了待ちの処理を追加します。ユーザーコードビジン4のコードを修正します。標準入出力関数としてUARTからの入出力を行う関数を定義します。引き続きユーザーコードビジン4のコードを修正します。引き続きユーザーコードビジン4のコードを修正します。M7のプロジェクトを右クイックしてオプションを選びます。M7でオプションからリンクを選んでリンク設定ファイルを変更します。HTM3人H755Flash RwSLAM1CM7.ICFを選択しAXI-SLAMを使用できるようにします。ワークスペースをM7に切り替えます。ワークスペースから5日にCM4と記載のある方を選択します。プロジェクトミューからメイクをクリックしコンパイルします。ワークスペースをM4に切り替えます。ワークスペースから5日にCM4と記載のある方を選択します。M4のコードプロジェクトダウンロードアプリケーションのダウンロードでFlashに書き込みます。テラタームを起動してHTリンクバーチャルコンポートに接続します。スピードを1.1.5.2.0.0に設定します。ワークスペースをM7に切り替えます。ワークスペースから5日にCM7と記載のある方を選択します。プロジェクトミューからダウンロードしてデバッグまたはツールバージョンのアイコンよりダウンロードしてデバッグをクリックします。ボードにデータをダウンロードします。ポートと通信中LD1が点滅します。ダウンロードが完了するとデバッグ画面に切り替わります。デバッグメニューから実行で実行します。テラタームに以下のように表示されます。15文字までを入力しエンターティーをしてください。数バイトと数バイトが入り替わります。QVMXにて生成されたコードで使用されているMDMAのハルドライバーは次の2つです。MDMAスタートMDMAの転送MDMAPALL FOR TRANSFORMDMA転送の終了確認です。使用しているUARTのハルドライバーは次の2つです。HAL UART TRANSMITUARTの送信HAL UART RECEIVEUARTの受信QVMXにて生成されたコードで使用されているハルドライバーはDRIVERSSTM32H7HAL DRIVERSフォルダーに格納されています。DRIVERの秘証方法に関してはガイトーソースコートのヘッダーユーザーマニュアルUM2217ディスクリプションSTM32H7HAL DRIVERSデバッグメニューからデバッグの停止をクリックしデバッグモードを終了します。ワークスペースの保存クリックし保存します。ファイルメニューから終了でEWMを終了します。STM32QVMXもクローズボタンをして終了します。これで実習さんは終了します。プレゼンテーションを最後までご覧いただきましてありがとうございました。