概要
FreeRTOSは、マイクロコントローラ向けのリアルタイムオペレーティングシステム (RTOS) カーネルである。
軽量で高いスケーラビリティを持ち、組み込みシステム開発において広く利用されている。
Texas Instruments MSPM0 SDKでは、FreeRTOS Kernel v11.2.0が公式にサポートされている。
FreeRTOSを使用するには、開発環境の構築、FreeRTOSプロジェクトの作成、基本的な設定、ペリフェラルドライバとの統合等を行う必要がある。
また、タスク管理、APIの使用、メモリ管理についても行う必要がある。
対応する統合開発環境 (IDE) は、Code Composer Studio (CCS) v12.8.0以降、およびCCS Theia v1.5.0以降である。
MSPM0 SDKには、150以上のコードサンプルが含まれており、FreeRTOS対応プロジェクトテンプレートも提供されている。
LP-MSPM0G3519 評価ボード
MSPM0G3519 マイコンの仕様
MSPM0G3519は、Texas Instruments MSPM0ファミリのマイクロコントローラである。
Arm Cortex-M0+ 32ビットプロセッサを最大80[MHz]で動作させることができ、2段階超低電力パイプラインを採用している。
| 項目 | 仕様 |
|---|---|
| CPU | Arm Cortex-M0+ 32ビット、最大80[MHz] |
| パイプライン | 2段階超低電力パイプライン |
| MPU | メモリ保護ユニット (8リージョン) |
| Flash | 512[KB] (デュアルバンク、ECC保護) |
| データフラッシュ | 16[KB] (ECC保護) |
| SRAM | 128[KB] (バンク0 : 64[KB] ECC保護 + バンク1 : 64[KB]) |
| 電源電圧 | 1.62[V] - 3.6[V] |
| 温度範囲 | -40[℃] ~ +125[℃] |
MSPM0Gx51xファミリには、複数のバリエーションが存在する。
| デバイス | Flash | SRAM | CAN-FD |
|---|---|---|---|
| MSPM0G3519 | 512[KB] | 128[KB] | 2チャネル |
| MSPM0G3518 | 256[KB] | 128[KB] | 2チャネル |
| MSPM0G1519 | 512[KB] | 128[KB] | 非対応 |
| MSPM0G1518 | 256[KB] | 128[KB] | 非対応 |
MSPM0G3519は、CAN-FD対応の上位モデルである。
主要ペリフェラル
MSPM0G3519は、豊富なペリフェラルを内蔵している。
| カテゴリ | ペリフェラル | 仕様 |
|---|---|---|
| タイマ | 汎用タイマ | TIMA0 TIMA1 (16ビット、QEI対応) 最大28 PWMチャネル |
| タイマ | ウォッチドッグ | WWDT x2 IWDT x1 |
| タイマ | RTC | アラーム カレンダーモード RTC_OUT出力 |
| 通信 | UART | 7モジュール (UART0-UART6) |
| 通信 | I2C | 3モジュール (FM+ 1[MB]it/s対応) |
| 通信 | SPI | 3モジュール (最大32[MB]it/s) |
| 通信 | CAN-FD | 2モジュール (CAN 2.0A/B、CAN-FD対応) |
| アナログ | ADC | 2モジュール (12ビット、4Msps、最大27外部チャネル) |
| アナログ | DAC | 1モジュール (12ビット、1Msps) |
| アナログ | コンパレータ | 3モジュール (8ビットリファレンスDAC内蔵) |
| アナログ | VREF | 1.4[V]または2.5[V]構成可能内部リファレンス |
| セキュリティ | AES | AES-128 / 256アクセラレータ |
| セキュリティ | TRNG | 真性乱数生成器 |
| セキュリティ | キーストレージ | 最大4つのAESキー格納 |
| その他 | DMA | 12チャネル |
| その他 | CRC | CRC-16 / CRC-32対応 |
| その他 | MATHACL | 数学計算アクセラレータ |
| その他 | GPIO | 最大94本 (3本の20[mA]高駆動IO含む) |
通信ペリフェラルは、複数のUART、I2C、SPI、CAN-FDをサポートしており、多様な通信プロトコルに対応できる。
アナログペリフェラルは、高速ADC、DAC、コンパレータを含み、センシングアプリケーションに適している。
セキュリティ機能として、AESアクセラレータ、真性乱数生成器、キーストレージを内蔵している。
評価ボードの構成
LP-MSPM0G3519評価ボードは、MSPM0G3519マイコンを搭載した評価ボードである。
ボードの主要コンポーネントを以下に示す。
- ターゲットデバイス
- MSPM0G3519SPZR (LQFP100パッケージ)
- XDS110統合デバッグプローブ
- MSP432E401YTPDT (Cortex-M4F) 搭載
- プログラミング、デバッグ、EnergyTrace対応
- SWD (Serial Wire Debug) インターフェース
- バックチャネルUART (PA10: TXD、PA11: RXD)
- EnergyTrace DC/DCコントローラ
- MSP430G2452IRSA16R
- ボタン
- S1 (BSL Invoke / PA18)
- S2 (ユーザ / PB3)
- S3 (リセット)
- LED
- PA0赤色LED
- RGB LED (PB22青 / PB26赤 / PB27緑)
- 拡張コネクタ
- 80ピンBoosterPackヘッダー (J1-J8、2.54mmピッチ)
- USBコネクタ
- Micro USBコネクタ (USB1)
- デバッグコネクタ
- Arm 10ピンデバッグコネクタ
XDS110デバッグプローブは、CCSおよびCCS Theiaと統合されており、リアルタイムデバッグ、ブレークポイント、メモリ検査が可能である。
EnergyTrace機能により、リアルタイム電力消費測定 ([uA]~[A]範囲) が可能である。
また、バックチャネルUARTは、printfデバッグに利用できる。
クロックシステム
MSPM0G3519は、複数のクロック源をサポートしている。
下表に、FreeRTOS動作に関わるクロック情報を示す。
| クロック源 | 周波数 | 精度 | 用途 |
|---|---|---|---|
| SYSOSC | 4-32[MHz] (デフォルト32[MHz]) | ±2.5[%] | メインクロック源 |
| LFOSC | 32[kHz] | - | 低電力モードクロック |
| SYSPLL | 最大80[MHz] | - | 高速CPUクロック生成 |
| HFXT | 40[MHz] (オンボード) | ±10[ppm] | 高精度クロック源 |
| LFXT | 32.768kHz (オンボード) | ±20[ppm] | RTC・ウォッチドッグ用 |
| SysTick | MCLK依存 (24ビットカウンタ) | - | FreeRTOSティック割り込み生成 |
FreeRTOSは、SysTickタイマ (24ビットダウンカウンタ) をティック割り込み生成に使用する。
SysTickタイマは、MCLKをクロック源とし、RUN/SLEEPモードで動作する。
STOP/STANDBY/SHUTDOWNモードでは、SysTickタイマは利用できない。
SysTickタイマのリロード値は、次式で計算される。
リロード値
例として、 となる。
電源とジャンパー設定
LP-MSPM0G3519評価ボードは、複数の電源入力方法をサポートしている。
電源入力方法を以下に示す。
- USB 5[V]
- Micro USBコネクタから供給 (デフォルト)
- TPS73533 LDOで3.3[V]に変換
- 外部3.3[V]
- J10ヘッダから供給 (デフォルト未接続)
- 外部5[V]
- J9ヘッダから供給 (デフォルト未接続)
J101隔離ジャンパーブロック (9x2ピンヘッダ) により、電源レールとデバッグ信号を隔離できる。
| ピン | 機能 | 説明 |
|---|---|---|
| 1-2 | 5V | USB 5[V]電源レール |
| 3-4 | 3V3 | 3.3[V]電源レール (電流測定用に取り外し可能) |
| 5-6 | GND | 共通グラウンド |
| 7-8 | RXD | バックチャネルUART受信 |
| 9-10 | TXD | バックチャネルUART送信 |
| 11-12 | NRST | リセット信号 |
| 13-14 | SWDIO | SWDデータ信号 |
| 15-16 | SWCLK | SWDクロック信号 |
| 17-18 | BSL | ブートストラップローダ呼び出し |
電流測定を行う場合は、J101の3V3ジャンパー (3-4) を取り外し、マルチメータを接続する。
MSPM0 SDKのインストール
SDK概要
MSPM0 SDKは、Texas InstrumentsがMSPM0ファミリ向けに提供するソフトウェア開発キットである。
MSPM0 SDK v2.09.00.01には、FreeRTOS Kernel v11.2.0が統合されている。
MSPM0 SDKには、以下のコンポーネントが含まれている。
- FreeRTOS Kernel v11.2.0
- MSPM0向けに移植されたFreeRTOSカーネル
- 150以上のコード例
- 各デバイス向けのプロジェクトサンプル
- FreeRTOS対応プロジェクトテンプレートを含む
- ドライバライブラリ
- ペリフェラルドライバ
- Driver Porting Layer (DPL)
- POSIX準拠インターフェース
- SysConfig
- グラフィカル設定ツール
- ペリフェラル、ピン、クロック設定
- ミドルウェア
- 各種ミドルウェアライブラリ
- ドキュメント
- API仕様書、ユーザガイド
ダウンロードとインストール
MSPM0 SDKは、Texas Instruments公式サイトからダウンロードできる。
MSPM0 SDKの公式ページにアクセスして、最新版をダウンロードする。
- Windows向け
- インストーラ (mspm0_sdk_2_09_00_01-windows-installer.exe) を実行し、画面の指示に従ってインストールする。
- デフォルトのインストール先は、C:\ti\mspm0_sdk_2_09_00_01 である。
- Linux向け
- インストーラ (mspm0_sdk_2_09_00_01-linux-installer.run) に実行権限を付与して、実行する。
chmod u+x mspm0_sdk_2_09_00_01-linux-installer.run ./mspm0_sdk_2_09_00_01-linux-installer.run
- デフォルトのインストール先は、~/ti/mspm0_sdk_2_09_00_01である。
- MacOS向け
- インストーラ (mspm0_sdk_2_09_00_01-macos-installer.app) を実行し、画面の指示に従ってインストールする。
SDKディレクトリ構成
インストールされたSDKのディレクトリ構成を以下に示す。
MSPM0_SDK_install_dir/ ├── examples/ (各デバイス向けプロジェクトサンプル) ├── kernel/ (FreeRTOSカーネルソース v11.2.0) ├── source/ (ドライバライブラリ、DPL、POSIX層) ├── docs/ (ドキュメント) ├── tools/ (SysConfig、コンパイラ設定) └── middleware/ (ミドルウェア)
- kernel/ ディレクトリ
- FreeRTOS Kernel v11.2.0のソースコードが格納されている。
- examples/ ディレクトリ
- デバイスごとのサンプルプロジェクトが格納されている。
- source/ti/rtos/freertos/ ディレクトリ
- Driver Porting Layer (DPL) のFreeRTOS実装が格納されている。
開発環境の構築
Code Composer Studio (CCS)
Code Composer Studio (CCS) は、Texas Instrumentsの統合開発環境 (IDE) である。
MSPM0G3519 および FreeRTOS開発には、CCS v12.8.0以降が必要である。
CCSは、以下の機能を提供する。
- プロジェクト管理
- C/C++プロジェクトの作成と管理
- コード編集
- シンタックスハイライト、コード補完
- ビルド
- GCCコンパイラによるビルド
- デバッグ
- XDS110デバッグプローブとの統合
- ブレークポイント、ステップ実行、変数ウォッチ
- Resource Explorer
- SDK内のサンプルプロジェクトをブラウズ・インポート
CCSは、Texas Instrumentsの公式Webサイトからダウンロードできる。
インストーラを実行し、MSPM0サポートを選択してインストールする。
CCSインストール後、GCCコンパイラのセットアップが必要である。
CCS v12.8.0以降には、Arm GNU Toolchain (GCC) がバンドルされている。
Resource Explorerから直接プロジェクトをインポートすることができる。
Resource Explorerの使用手順を以下に示す。
- CCSを起動する。
- [View] - [Resource Explorer]を選択する。
- [Software] - [MSPM0-SDK] - [examples]を展開する。
- [LP-MSPM0G3519] - [freertos]を選択する。
- サンプルプロジェクトを選択して、[Import]ボタンを押下する。
CCS Theia
CCS Theiaは、VS Codeベースの次世代統合開発環境である。
CCS Theia v1.5.0以降が、MSPM0ファミリをサポートしている。
CCS Theiaの特徴を以下に示す。
- モダンなユーザインターフェース
- VS Codeベースの直感的なUI
- 高速なレスポンス
- 軽量で高速な動作
- プロジェクト管理の簡便化
- ワークスペース管理の改善
- 拡張性
- VS Code拡張機能の利用
CCS Theiaは、CCS Theiaの公式ダウンロードページからダウンロードできる。
また、オフラインインストーラも提供されている。
CCSとCCS Theiaの比較を以下に示す。
| 項目 | CCS | CCS Theia |
|---|---|---|
| ベース | Eclipse | VS Code |
| UI | 従来型Eclipse UI | モダンVS Code UI |
| レスポンス | やや重い | 軽量・高速 |
| プロジェクト管理 | Eclipse形式 | VS Code Workspace形式 |
| 拡張性 | Eclipse Plugin | VS Code Extension |
| 推奨用途 | 既存プロジェクト | 新規プロジェクト |
新規プロジェクトの開発には、CCS Theiaの使用を推奨する。
FreeRTOSプロジェクトの作成
スクラッチからFreeRTOSプロジェクトを作成することは非推奨である。
MSPM0 SDKに含まれるプロジェクトテンプレートを使用することを強く推奨する。
CCS Theiaでのプロジェクト作成
CCS Theiaでは、Getting Startedウィザードから簡単にプロジェクトを作成できる。
Step 1 : Getting Startedを開く
CCS Theiaを起動して、[Help] - [Getting Started]を選択する。
Step 2 : Create a new projectを選択
[Getting Started]画面で、[Create a new project]を選択する。
Step 3 : デバイスとボードを選択
以下に示す項目を選択する。
- Device
- MSPM0G3519
- Board
- LP-MSPM0G3519
- RTOS
- FreeRTOS
Step 4 : テンプレートを選択
テンプレート一覧から、empty_freertos を選択する。
empty_freertos は、最小限のFreeRTOS設定を含む空のプロジェクトテンプレートである。
Step 5 : プロジェクト名を指定
プロジェクト名を入力して、[Finish]ボタンを押下する。
Step 6 : SysConfigで設定
プロジェクトが作成されると、.syscfg ファイルが自動的に開かれる。
SysConfigツールで、ペリフェラル、ピン、クロックの設定を行う。
SysConfigの設定は、保存時に自動的にコードが生成される。
生成されたソースコードは、ti_msp_dl_config.c ファイル および ti_msp_dl_config.h ファイルに格納される。
CCSでのプロジェクトインポート
CCSでは、[Resource Explorer] または [File] - [Import]機能でプロジェクトをインポートする。
Step 1 : Importを開く
CCSを起動して、[File] - [Import...]を選択する。
Step 2 : CCS Projectsを選択
[Code Composer Studio] - [CCS Projects]を選択して、[Next]ボタンを押下する。
Step 3 : SDK examples ディレクトリを指定
[Browse]ボタンを押下して、<SDK_INSTALL_DIR>/examples ディレクトリを指定する。
Step 4 : FreeRTOSプロジェクトを選択
プロジェクト一覧から、freertos を含むプロジェクトを選択する。
例: LP_MSPM0G3519/freertos/empty_freertos
FreeRTOSプロジェクトは、カーネルプロジェクトを依存プロジェクトとして持つ。
カーネルプロジェクトも自動的にインポートされ、依存プロジェクトとして自動ビルドされる。
Step 5 : Finishを選択
[Finish]を選択すると、プロジェクトがワークスペースにインポートされる。
プロジェクト構成
インポートまたは作成されたFreeRTOSプロジェクトの主要ファイルを以下に示す。
- main.c
- アプリケーションエントリポイント
- タスク作成、スケジューラ起動
- FreeRTOSConfig.h
- FreeRTOS設定ファイル
- ティックレート、ヒープサイズ、最大優先度等
- リンカスクリプト
- MSPM0G3519_FLASH.ld (フラッシュ実行用)
- MSPM0G3519_SRAM.ld (SRAM実行用、デバッグ用)
- .syscfg
- SysConfig設定ファイル
- ペリフェラル、ピン、クロックの設定
- ti_msp_dl_config.c / ti_msp_dl_config.h
- SysConfigから自動生成されたコード
main.c ファイルでは、タスクを作成して、vTaskStartScheduler() でスケジューラを起動する。
FreeRTOSConfig.h で、FreeRTOSの動作パラメータを設定する。
FreeRTOSの設定
FreeRTOSの動作は、FreeRTOSConfig.h ファイルで設定する。
MSPM0G3519向けの推奨設定を以下に示す。
| マクロ | 推奨値 | 説明 |
|---|---|---|
| configCPU_CLOCK_HZ | 80000000 | CPUクロック周波数 (80[MHz]) |
| configTICK_RATE_HZ | 1000 | ティック割り込み周波数 (1[kHz] = 1[ms]周期) |
| configMINIMAL_STACK_SIZE | 128 | アイドルタスクの最小スタックサイズ (ワード) |
| configTOTAL_HEAP_SIZE | 40000 | FreeRTOSヒープ総バイト数 |
| configMAX_PRIORITIES | 5 | タスク優先度レベル数 |
| configUSE_16_BIT_TICKS | 0 | 32ビットtickタイプを使用 |
| configUSE_MUTEXES | 1 | ミューテックス機能有効 |
| configUSE_COUNTING_SEMAPHORES | 1 | カウンティングセマフォ有効 |
| configUSE_RECURSIVE_MUTEXES | 1 | 再帰的ミューテックス有効 |
configCPU_CLOCK_HZ
configCPU_CLOCK_HZ は、CPUクロック周波数を[Hz]で指定する。
例えば、MSPM0G3519を80[MHz]で動作させる場合は、80000000 を設定する。
configTICK_RATE_HZ
configTICK_RATE_HZは、FreeRTOSティック割り込みの周波数を[Hz]で指定する。
例えば、1000 を設定すると、1[ms]周期でティック割り込みが発生する。
SysTickタイマのリロード値は、以下の式で自動計算される。
リロード値
configTOTAL_HEAP_SIZE
configTOTAL_HEAP_SIZEは、FreeRTOSヒープ領域のサイズをバイト単位で指定する。
タスクスタック、キュー、セマフォ等のメモリは、このヒープから割り当てられる。
MSPM0G3519は128[KB] SRAMを搭載しているため、40,000バイト (約40[KB]) 程度を推奨する。
アプリケーションの要件に応じて調整する。
configMAX_PRIORITIES
configMAX_PRIORITIESは、タスク優先度の最大レベル数を指定する。
優先度は0 (最低) から configMAX_PRIORITIES - 1 (最高) まで設定できる。
5 を設定した場合、優先度0~4を使用できる。
FREERTOS_INSTALL_DIRの設定
プロジェクトビルド時に、FreeRTOSカーネルのパスを指定する必要がある。
変数 FREERTOS_INSTALL_DIR を設定する。
CCSでの設定手順を以下に示す。
- [Window] - [Preferences]を選択する。
- [CCS] - [Build] - [Variables]を選択する。
- [Add]ボタンを押下する。
- Name
FREERTOS_INSTALL_DIR
- Type
- Directory
- Value
<MSPM0_SDK>/kernel/FreeRTOS-Kernel
- Name
- [OK]ボタンを押下する。
CCS Theiaでの設定手順を以下に示す。
- プロジェクトを右クリックして、[Properties]を選択する。
- [Resource] - [Linked Resources]を選択する。
- [New...]ボタンを押下する。
- Name
FREERTOS_INSTALL_DIR
- Location
<MSPM0_SDK>/kernel/FreeRTOS-Kernel
- Name
- [OK]ボタンを押下する。
Cortex-M0+ 固有の注意
Cortex-M0+アーキテクチャには、以下の制約がある。
- BASEPRIレジスタを持たない
configMAX_SYSCALL_INTERRUPT_PRIORITYマクロは未使用
- NVIC優先度
- 4段階 (ビット[7:6]で制御)
- 0 (最高優先度) ~ 3 (最低優先度)
- ハードウェアブレークポイント
- 最大4個
Cortex-M0+では、割り込み優先度マスキングにBASEPRIレジスタを使用しない。
代わりに、PRIMASKレジスタによる全割り込みマスキングを使用する。
SysTick と FreeRTOSの関係
FreeRTOSは、Arm Cortex-M0+のSysTickタイマをティック割り込み生成に使用する。
SysTickタイマは、24ビットダウンカウンタである。
SysTickタイマのリロード値は、次式で計算される。
リロード値
例として、CPUクロック80[MHz]、ティックレート1000[Hz]の場合を示す。
リロード値
SysTickタイマは、MCLKをクロック源とする。
RUN / SLEEPモードで動作するが、STOP / STANDBY / SHUTDOWNモードでは停止する。
ポートファイル
FreeRTOSのCortex-M0+ポートは、以下に示すファイルで実装されている。
- port.c
- ポート固有の実装
- タスクコンテキスト切り替え、SysTick設定
- portmacro.h
- ポート固有のマクロ定義
- portasm.asm
- アセンブリ実装
- コンテキスト切り替えルーチン
これらのファイルは、FreeRTOSカーネルの portable / GCC / ARM_CM0 ディレクトリに格納されている。
ペリフェラルドライバとの統合
MSPM0 SDKは、FreeRTOSとペリフェラルドライバを統合するための抽象化レイヤーを提供している。
Driver Porting Layer (DPL)
Driver Porting Layer (DPL) は、FreeRTOSとドライバ間の抽象化レイヤーである。
DPLにより、RTOS依存のコードを分離し、RTOS間の移植性を確保できる。
DPLの主要インターフェースを以下に示す。
- ClockHandle
- タイマ・クロック管理
- SemaphoreHandle
- セマフォ管理
- MutexHandle
- ミューテックス管理
- QueueHandle
- キュー管理
- TaskHandle
- タスク管理
- HwiHandle
- ハードウェア割り込み管理
DPLヘッダファイルは、<ti/drivers/dpl/dpl.h> である。
DPLのFreeRTOS実装は、source/ti/rtos/freertos/ ディレクトリに格納されている。
DPLを使用することで、アプリケーションコードはFreeRTOS APIを直接呼び出す必要がなくなる。
RTOS切り替え時にも、アプリケーションコードの変更が不要である。
POSIXレイヤー
MSPM0 SDKは、POSIX準拠インターフェースを提供している。
POSIXレイヤーにより、pthreadライクなAPIでFreeRTOSを使用できる。
POSIXレイヤーの主要インターフェースを以下に示す。
- pthread
- POSIX準拠スレッド管理
- semaphore
- POSIX準拠セマフォ管理
- mutex
- POSIX準拠ミューテックス管理
- mqueue
- POSIX準拠メッセージキュー管理
- clock
- POSIX準拠時刻管理
POSIXレイヤーの実装は、source/ti/posix/ ディレクトリに格納されている。
POSIXレイヤーを使用することで、既存のPOSIXアプリケーションをFreeRTOS上で動作させることができる。
RTOS / Non-RTOS切り替え
DPLインターフェースを使用すると、RTOS / Non-RTOS環境の切り替えが容易になる。
ビルド設定で対応カーネルライブラリを選択することで、同一のアプリケーションコードをRTOS / Non-RTOS環境で実行できる。
アプリケーションコードの変更は不要である。
DPLのNon-RTOS実装は、source/ti/drivers/dpl/ ディレクトリに格納されている。
トラブルシューティング
よくある問題と解決方法
FREERTOS_INSTALL_DIR未設定
ビルド時に以下のエラーが表示される場合がある。
Error: FREERTOS_INSTALL_DIR is not defined
解決方法を以下に示す。
- CCS
- [Window] - [Preferences] - [CCS] - [Build] - [Variables] で変数
FREERTOS_INSTALL_DIRを追加する。
- Value
<MSPM0_SDK>/kernel/FreeRTOS-Kernel
- [Window] - [Preferences] - [CCS] - [Build] - [Variables] で変数
- CCS Theia
- [Project Properties] - [Resource] - [Linked Resources] で変数
FREERTOS_INSTALL_DIRを追加する。
- [Project Properties] - [Resource] - [Linked Resources] で変数
FreeRTOSヘッダ未検出
コンパイル時に以下のエラーが表示される場合がある。
Error: FreeRTOS.h: No such file or directory
解決方法を以下に示す。
プロジェクトの Include Paths に、以下に示すディレクトリを追加する。
- ${FREERTOS_INSTALL_DIR}/include
- ${FREERTOS_INSTALL_DIR}/portable/GCC/ARM_CM0
HEAP不足エラー
実行時に以下の動作が発生する場合がある。
- タスク作成失敗
- キュー作成失敗
- セマフォ作成失敗
- メモリ割り当て失敗
解決方法を以下に示す。
FreeRTOSConfig.h ファイルの configTOTAL_HEAP_SIZE を増加する。
例: 40000 を 60000 に変更する。
MSPM0G3519は128[KB] SRAMを搭載しているため、ヒープサイズを増やす余地がある。
ただし、スタック領域やグローバル変数領域も考慮する必要がある。
SWD接続喪失 (低電力モード)
低電力モードに移行すると、SWDデバッグ接続が切断される場合がある。
解決方法を以下に示す。
- 低電力モード移行前にブレークポイントを設定し、デバッガを接続したままにする。
- または、低電力モード設定で、SWD接続維持モードを有効にする。
SysConfigの設定例を以下に示す。
- .syscfgファイルを開く。
- SYSCTLモジュールを選択する。
- [Low Power Mode Options] - [Preserve SWD Connection]を有効にする。
XDS110接続エラー (Windows 11)
Windows 11環境で、XDS110デバッグプローブが認識されない場合がある。
解決方法を以下に示す。
- XDS110 USBドライバを再インストールする。
手順を以下に示す。
- CCSのインストールディレクトリに移動して、ccs_base ディレクトリ - drivers ディレクトリ - xds110_drivers ディレクトリを開く。
- dpinst_x64.exe を管理者権限で実行する。
- ドライバインストールウィザードに従う。
- LP-MSPM0G3519評価ボードを接続して、デバイスマネージャで認識されていることを確認する。
UART割り込み継続トリガー
UART受信割り込みが継続的にトリガーされ、システムが応答しなくなる場合がある。
原因として、割り込みハンドラ内で、割り込みフラグがクリアされていない ことが挙げられる。
解決方法を以下に示す。
UARTMSP_interruptHandler 関数内で、DL_UART_clearInterruptStatus を呼び出し、割り込みフラグをクリアする。
サンプルコードを以下に示す。
void UART0_IRQHandler(void) {
uint32_t status = DL_UART_getPendingInterrupt(UART0);
if (status & DL_UART_INTERRUPT_RX) {
// 受信処理
uint8_t data = DL_UART_receiveData(UART0);
// 割り込みフラグをクリア
DL_UART_clearInterruptStatus(UART0, DL_UART_INTERRUPT_RX);
}
}
エラッタ情報
MSPM0G3519には、既知のエラッタ (ハードウェアの不具合) が存在する。
FreeRTOS動作に影響する主要エラッタを以下に示す。
CPU_ERR_03 (CPUモジュール)
CPUモジュールに関連する既知問題である。
詳細は、MSPM0G3519エラッタシートを参照すること。
SYSPLL_ERR_01 (SYSPLLモジュール)
SYSPLL有効化時に、正しい周波数にロックされない場合がある。
回避策を以下に示す。
- FCC (周波数クロックカウンタ) でSYSPLL出力周波数を検証する。
- 異常値の場合は、
SYSPLL_EN=0をSYSPLL_EN=1へ変更して再有効化する。
SYSOSC_ERR_04 (SYSOSCモジュール)
SYSPLLをFCL ONモードで使用すると、精度が±3[%]低下する。
回避策を以下に示す。
- SYSPLL周波数に4[MHz]の倍数以外を使用する。(78[MHz]、79[MHz]、81[MHz]等)
ただし、80[MHz]は避けること。
TIMER_ERR_04 (TIMERモジュール)
タイマをゼロイベント直前に再有効化すると、再有効化が失われる。
回避策を以下に示す。
- 再有効化前に、1機能クロックサイクル分待機する。
TIMER_ERR_06 (TIMA/TIMGモジュール)
CLKEN ビットに0を書き込んでも、カウンタが無効化されない。
回避策を以下に示す。
CTRCTL.EN=0でタイマを停止する。
SRAM_ERR_03 (SRAMモジュール)
Rev Aデバイスでは、SRAMパリティ / ECC機能が非サポートである。
対策を以下に示す。
- SRAMパリティ / ECC機能を使用しない。
SPI_ERR_02 (SPIモジュール)
低消費電力モードからウェイクアップ後、SPIクロックとデータバイトの欠落が発生する場合がある。
回避策を以下に示す。
- LPM進入前にSPIモジュールを無効化し、ウェイクアップ後に再有効化する。
サンプルコードを以下に示す。
// LPM進入前
DL_SPI_disable(SPI0);
// 低電力モード移行
__WFI();
// ウェイクアップ後
DL_SPI_enable(SPI0);
デバッグ方法
MSPM0G3519 および FreeRTOS開発において、以下に示すデバッグ手法が利用できる。
XDS110デバッグプローブ
LP-MSPM0G3519評価ボードに統合されたXDS110デバッグプローブにより、以下に示す機能を利用できる。
- リアルタイムデバッグ
- SWDインターフェースによるデバッグ
- ブレークポイント
- 最大4個のハードウェアブレークポイント
- ステップ実行
- ステップイン、ステップオーバー、ステップアウト
- メモリ検査
- メモリ、レジスタ、スタックの検査
- 変数ウォッチ
- ローカル変数、グローバル変数のウォッチ
EnergyTrace
EnergyTrace機能により、リアルタイム電力消費測定が可能である。
測定範囲は、[uA]~[A]範囲をカバーする。
EnergyTraceの使用方法を以下に示す。
- CCS / CCS Theiaで、[View] - [EnergyTrace]を選択する。
- デバッグセッションを開始する。
- EnergyTraceウィンドウで、電力消費グラフを確認する。
バックチャネルUART
バックチャネルUARTにより、printfデバッグ が可能である。
LP-MSPM0G3519では、PA10 (TXD)、PA11 (RXD) がバックチャネルUARTに接続されている。
ターミナルソフトウェア (TeraTerm、PuTTY等) で、以下に示す設定を行った後で接続する。
- ボーレート
- 115200[bps]
- データビット
- 8
- パリティ
- なし
- ストップビット
- 1
- フロー制御
- なし
SysConfig
SysConfig (.syscfg ファイル) により、周辺機器・ピン・クロック設定を視覚的に確認できる。
設定の誤りを事前に検出できる。
SysConfigの使用方法を以下に示す。
- .syscfgファイルをダブルクリックする。
- SysConfigツールが開かれる。
- 各モジュール (GPIO、UART、SPI等) の設定を確認する。
- ピン配置図で、物理ピン配置を確認する。
- クロック設定図で、クロックツリーを確認する。
参考リンク
TI公式リンク
- LP-MSPM0G3519製品ページ
- 評価ボードの製品情報、技術仕様、購入情報
- MSPM0 SDK
- MSPM0 SDKのダウンロード、リリースノート
- MSPM0 SDK User Guide
- MSPM0 SDKの詳細ドキュメント
- CCS Theia
- CCS Theiaのダウンロード、インストールガイド
GitHubリンク
- TexasInstruments/mspm0-sdk
- MSPM0 SDKのGitHubリポジトリ
- 最新のコード例、バグレポート、プルリクエスト
- FreeRTOS/FreeRTOS
- FreeRTOS公式GitHubリポジトリ
- FreeRTOSカーネル、ドキュメント
コミュニティリンク
- TI E2Eフォーラム
- Texas Instrumentsの技術サポートフォーラム
- MSPM0ファミリに関する質問、回答
- TI Resource Explorer
- オンラインリソースエクスプローラ
- サンプルコード、ドキュメントのブラウズ