FreeRTOS - MSPM0G3519

提供: MochiuWiki : SUSE, EC, PCB

概要

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段階超低電力パイプラインを採用している。

MSPM0G3519 主要仕様
項目 仕様
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ファミリには、複数のバリエーションが存在する。

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は、豊富なペリフェラルを内蔵している。

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動作に関わるクロック情報を示す。

MSPM0G3519 クロックシステム
クロック源 周波数 精度 用途
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ピンヘッダ) により、電源レールとデバッグ信号を隔離できる。

J101 隔離ジャンパーブロック
ピン 機能 説明
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の使用手順を以下に示す。

  1. CCSを起動する。
  2. [View] - [Resource Explorer]を選択する。
  3. [Software] - [MSPM0-SDK] - [examples]を展開する。
  4. [LP-MSPM0G3519] - [freertos]を選択する。
  5. サンプルプロジェクトを選択して、[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 vs 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向けの推奨設定を以下に示す。

FreeRTOSConfig.h 主要設定項目
マクロ 推奨値 説明
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での設定手順を以下に示す。

  1. [Window] - [Preferences]を選択する。
  2. [CCS] - [Build] - [Variables]を選択する。
  3. [Add]ボタンを押下する。
    • Name
      FREERTOS_INSTALL_DIR
    • Type
      Directory
    • Value
      <MSPM0_SDK>/kernel/FreeRTOS-Kernel
  4. [OK]ボタンを押下する。


CCS Theiaでの設定手順を以下に示す。

  1. プロジェクトを右クリックして、[Properties]を選択する。
  2. [Resource] - [Linked Resources]を選択する。
  3. [New...]ボタンを押下する。
    • Name
      FREERTOS_INSTALL_DIR
    • Location
      <MSPM0_SDK>/kernel/FreeRTOS-Kernel
  4. [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
  • CCS Theia
    [Project Properties] - [Resource] - [Linked Resources] で変数 FREERTOS_INSTALL_DIR を追加する。


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 を増加する。
例: 4000060000 に変更する。

MSPM0G3519は128[KB] SRAMを搭載しているため、ヒープサイズを増やす余地がある。
ただし、スタック領域やグローバル変数領域も考慮する必要がある。

SWD接続喪失 (低電力モード)

低電力モードに移行すると、SWDデバッグ接続が切断される場合がある。

解決方法を以下に示す。

  1. 低電力モード移行前にブレークポイントを設定し、デバッガを接続したままにする。
  2. または、低電力モード設定で、SWD接続維持モードを有効にする。


SysConfigの設定例を以下に示す。

  1. .syscfgファイルを開く。
  2. SYSCTLモジュールを選択する。
  3. [Low Power Mode Options] - [Preserve SWD Connection]を有効にする。


XDS110接続エラー (Windows 11)

Windows 11環境で、XDS110デバッグプローブが認識されない場合がある。

解決方法を以下に示す。

  1. XDS110 USBドライバを再インストールする。


手順を以下に示す。

  1. CCSのインストールディレクトリに移動して、ccs_base ディレクトリ - drivers ディレクトリ - xds110_drivers ディレクトリを開く。
  2. dpinst_x64.exe を管理者権限で実行する。
  3. ドライバインストールウィザードに従う。
  4. 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有効化時に、正しい周波数にロックされない場合がある。

回避策を以下に示す。

  1. FCC (周波数クロックカウンタ) でSYSPLL出力周波数を検証する。
  2. 異常値の場合は、SYSPLL_EN=0SYSPLL_EN=1 へ変更して再有効化する。


SYSOSC_ERR_04 (SYSOSCモジュール)

SYSPLLをFCL ONモードで使用すると、精度が±3[%]低下する。

回避策を以下に示す。

  1. 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の使用方法を以下に示す。

  1. CCS / CCS Theiaで、[View] - [EnergyTrace]を選択する。
  2. デバッグセッションを開始する。
  3. EnergyTraceウィンドウで、電力消費グラフを確認する。


バックチャネルUART

バックチャネルUARTにより、printfデバッグ が可能である。
LP-MSPM0G3519では、PA10 (TXD)、PA11 (RXD) がバックチャネルUARTに接続されている。

ターミナルソフトウェア (TeraTerm、PuTTY等) で、以下に示す設定を行った後で接続する。

  • ボーレート
    115200[bps]
  • データビット
    8
  • パリティ
    なし
  • ストップビット
    1
  • フロー制御
    なし


SysConfig

SysConfig (.syscfg ファイル) により、周辺機器・ピン・クロック設定を視覚的に確認できる。
設定の誤りを事前に検出できる。

SysConfigの使用方法を以下に示す。

  1. .syscfgファイルをダブルクリックする。
  2. SysConfigツールが開かれる。
  3. 各モジュール (GPIO、UART、SPI等) の設定を確認する。
  4. ピン配置図で、物理ピン配置を確認する。
  5. クロック設定図で、クロックツリーを確認する。



参考リンク

TI公式リンク


GitHubリンク

  • TexasInstruments/mspm0-sdk
    MSPM0 SDKのGitHubリポジトリ
    最新のコード例、バグレポート、プルリクエスト
  • FreeRTOS/FreeRTOS
    FreeRTOS公式GitHubリポジトリ
    FreeRTOSカーネル、ドキュメント


コミュニティリンク

  • TI E2Eフォーラム
    Texas Instrumentsの技術サポートフォーラム
    MSPM0ファミリに関する質問、回答
  • TI Resource Explorer
    オンラインリソースエクスプローラ
    サンプルコード、ドキュメントのブラウズ