技術コラム Vol.15

今からはじめるRAマイコン開発 ~プログラミング編~

公開日:2023/09/21

RAマイコンは、ルネサス エレクトロニクス社(以下、ルネサス社)のCPUコアに、Arm® Cortex®-Mシリーズを採用した汎用MCUです。

技術コラムVol.2「今からはじめるRAマイコン開発」では、開発環境に必要な機材とソフトウェア、およびのRAマイコンのソフトウェア開発環境として「Flexible Software Package(FSP)」の導入について紹介しましたが、今回は「FSP」についてもう一歩踏み込んで、設定方法など詳しい使い方についてご紹介します。

  1. RAマイコンの概要
  2. FSPを設定してみる
  3. FSPのAPIの使い方
  4. まとめ

1. RAマイコンの概要

(1)CPUの概要

RAマイコンは現在のところ、RA2、RA4、RA6の各シリーズが展開され、今後さらに高性能なRA8シリーズも予定されています。
Arm Cortex-M33、M23、M4コアを搭載し、モーター制御や液晶表示に対応したミドルレンジから超低消費電力の小型IoT向けのローエンドまで、幅広い用途に対応しています。

当社からは、CPUボード製品として、RA6M5(Arm Cortex-M33)搭載のAP-RA6M-1A、RA6M3(Arm Cortex-M4)搭載のAP-RA6M-0Aをリリースしています。

開発環境については、技術コラムVol.2「今からはじめるRAマイコン開発」で紹介していますが、統合開発環境「e2studio」と「GNU Cコンパイラ」が無償で使用できます。デバッガには安価なルネサス社のE2エミュレータliteのほか、SEGGER社のJ-LinkなどのArm Cortex-Mコア対応のJTAGエミュレータが使用できます。

「E2エミュレータLite」と「AP-RA6M-1A」
「E2エミュレータLite」と「AP-RA6M-1A」の接続

(2)FSPの概要

「FSP」は、ルネサス エレクトロニクス社から無償で提供されているソフトウェアパッケージで、OSとドライバソフトウェア、ミドルウェアなどで構成されています。

GUIツール上の操作だけで、通信やタイマといった各種CPU内蔵機能から、FreeRTOS・Azure®RTOSのようなRTOS機能、さらにはArm TrustZone®セキュリティまで多彩な機能の実装が行えます。

2023年7月の時点でv4.5.0がリリースされ、最新のRAマイコンへの対応はもちろん、不具合修正や機能追加が随時行われています。

Flexible Software Package
FSPのソフトウェアイメージ(一部)

FSPは、e2studio上で動くGUIツール(FSPコンフィグレータ)にて必要な機能の選択や設定を行い、その後、各機能のAPIをユーザープログラム内にコーディング実装するという使い方をします。

「e2studio」と「コンパイラ(GCC)」と「FSP」は、ルネサス社からワンパッケージにまとめられたプラットフォームインストーラがGitHub上で公開されています。

これ1つインストールするだけでRAマイコンのソフトウェア開発をワンストップで行える手軽さも魅力的です。

ルネサス社 GitHub FSPページ

GitHub

ソフトウェアのインストールは、ルネサス社が公開する以下の資料などをご参考ください。

e2 studio 2022-07以上 ユーザーズマニュアル クイックスタートガイド

2. FSPを設定してみる

開発環境を準備が完了したら、実際にFSPを使っていきます。

ハードウェアは、弊社のAP-RA6M-1Aサンプルプログラムをベースに説明します。

下図は「AN2002 RAファミリ開発チュートリアル」の「3.1.1 インポート方法」を参考に、AP-RA6M-1AのEthernetサンプルプログラムをe2studioにインポートした後、FSPコンフィグレータを起動したときの様子です。

e2studio
e2studio上でFSPコンフィグレータの起動

もし、プロジェクトを新規作成する場合は「AN2002 RAファミリ開発チュートリアル」の「4. e2 studioを用いた新規プロジェクト作成方法」を参考にしてください。

FSPコンフィグレータの各ページには、以下の機能があります。

ページ名
説明
Summaryページ
プロジェクトの使用環境を概要として表示します。
BSPページ
プロジェクトで使用するFSPのバージョンや、CPUボード設定を選択できます。
Clocksページ
CPUのクロックを設定できます。
Pinsページ
CPUのピンを設定できます。
Interruptsページ
Stacksタブで設定した周辺機能の割込みを表示します。またユーザーが直接割込みを設定することができます。
Event Linksページ
CPUが持つイベントリンクコントローラ(ELC)の機能を設定できます。
Stacksページ
プロジェクトのRTOS機能を設定できます。また、タイマやSCI通信など、CPUが持つ周辺機能を設定できます。
Componentsページ
FSPに含まれるドライバ・ミドルウェアモジュールの一覧を表示します。Stacksタブで周辺機能を設定すると、対応したモジュールが自動で反映されるため、基本的に本ページを設定する必要はありません。

表中の印で示したページは、ユーザーが個別に設定・確認が必要なページです。以下に各ページについて詳細を説明します。

(1)Summaryページ

プロジェクトの概要として、CPUデバイス名やコンパイラツールチェーン、FSPから抽出したデバイスドライバ・ミドルウェアの情報を一覧表示します。

FSPコンフィグレータSummaryページ
Summaryページ

(2)BSPページ

BSP(Board Support Package)の情報として、プロジェクトで使用するFSPのバージョンとCPUボードのテンプレート設定を確認・変更することができます。

RTOS設定(「FreeRTOS」・「AzureRTOS」・「RTOSレス」の選択)は、プロジェクト作成時のみ設定が可能ですので、ここで変更はできません。

FSPコンフィグレータBSPページ
BSPページ

また、本ページを開いた状態で、e2studioの「プロパティ」ウィンドウを表示すると、プロジェクトのヒープメモリ・スタックメモリなどの設定値が確認・変更できます。

FSPコンフィグレータBSPページのプロパティウィンドウ
BSPページのプロパティウィンドウ

(3)Clocksページ

システムクロック(ICLK)や周辺クロック(PCLKA~PCLKD)など、CPUのクロックを設定できます。

メインクロックをテキストボックスで直接指定した後は、分周・逓倍の設定をプルダウンリストから選ぶだけで設定が完了です。異常なクロックが設定されている場合は、通知してくれる点も嬉しい機能です。

FSPコンフィグレータClocksページ
FSPコンフィグレータClocksページ異常値
Clocksページ

(4)Pinsページ

各ポートを、汎用入出力機能や周辺機能別に設定することができます。

本機能も割り当てたい機能やピンごとに、プルダウンリストから設定値を選んで設定できます。異常な設定の場合はエラー通知されるので、百単位のピン設定を効率よく行えます。

FSPコンフィグレータPinsページ
FSPコンフィグレータPinsページエラー
Pinsページ

(5)Stacksページ

タイマやSCI通信など、RAマイコンが持つ周辺機能を設定できます。また、RTOS(FreeRTOS・AzureRTOS)を使用したプロジェクトならばRTOSの設定が行えます。

Stacksページ
Stacksページ

コンフィグレータ上でのRTOS設定については、技術コラムVol.5「今すぐ試せる!リアルタイムOSのすゝめ」でも触れているので、今回はデバイスドライバについて注目して紹介します。ここではSCI機能のUARTドライバを追加することにして、「New Stack」ボタンから「UART Driver on r_sci_uart」を選択します。

UARTドライバモジュールの追加
UARTドライバモジュールの追加

画面上にUARTドライバを示すブロックが追加されます。このブロックを選択した状態で、プロパティウィンドウを表示すると、UARTドライバの設定画面を表示できます。

UARTドライバモジュールのプロパティ
UARTドライバモジュールのプロパティ

プロパティウィンドウ内では、UARTの設定(例えば、通信ボーレートやパリティビット・ストップビット数)の確認・変更が行えます。その他にもSCIの送信エンプティ割込みなど、関連する割込みの設定なども可能ですので、いろいろとお試しください。

必要な機能設定を行ったら、最後に「Generate Project Content」をクリックすると、設定内容は「ra」「ra_gen」「ra_cfg」という自動生成フォルダ内へと反映されます。

FSPの設定フォルダ
FSPの設定フォルダ

コンフィグレータ上におけるFSPの設定は以上で完了です。この後は、FSPで設定した各機能の制御APIを実際にコーディングしていくことになります。

3. FSPのAPIの使い方

ソースコード上で扱うFSPの制御APIについて説明します。FSPの制御APIは、FSPのユーザーズマニュアル内のAPIリファレンスを基に調べることができます。ユーザーズマニュアルはルネサス社FSPのページからダウンロードできます。

Flexible Software Package(FSP)
https://www.renesas.com/jp/ja/software-tool/flexible-software-package-fsp

FSP
ルネサス社FSPの紹介ページ

例えば先ほど追加したUARTドライバは、目次の「API Reference」>「Modules」>「Connectivity」>「UART(r_sci_uart)」に記載されています。

資料は非常に膨大です。目的のページが見つからない場合は、検索機能を使います。検索窓に「r_sci_uart」と入力して検索してください。

HTML版資料の検索バー
HTML版ユーザーズマニュアル
UART(r_sci_uart)
UARTドライバのAPIリファレンスページ(HTML版ページ)

資料を見ると、UARTドライバには以下のAPIなどが用意されています。

API例
説明
R_SCI_UART_Open
コンフィグレータ上のFSP設定に基づいでUARTドライバを初期化します。UARTドライバを使うときは最初に実行する必要があります。
R_SCI_UART_Close
UARTドライバを終了します。
R_SCI_UART_Read
引数に指定したバッファに、受信データを渡します。
R_SCI_UART_Write
引数に指定したバッファのデータを、送信します。

各APIの概要とともに引数や戻り値の仕様を確認したら、あとはAPI仕様に基づいてユーザープログラムにAPIを記述します。

ユーザープログラムは一般的に「main関数」に記述しますが、FSPの場合は異なります。

OSレスのプログラムを扱う場合「プロジェクトフォルダ\src\hal_entry.c」内の「hal_entry関数」にユーザープログラムを実装します。「hal_entry.c」はe2studio上でプロジェクトを新規作成したときに自動で作成されます。

「main関数」は、FSPの自動生成ファイル内で使用されるため、ユーザープログラムで使用できません。

ここにユーザープログラムを追加

また、OSありのプログラムの場合、FSPにてタスク(スレッド)設定をした際に、タスク名を冠したファイルがsrcフォルダ下に自動生成されます。自動生成されたファイルの中には「(タスク名)_entry関数」が用意されますので、タスクごとの処理はここに記述します。下記はFreeRTOSを使う弊社Ethernetサンプル「ap_ra6m_1a_ether_sample」の例です。

ap_ra6m_1a_ether_sample1

弊社Ethernetサンプルの場合は、Ethernet通信用アプリケーションを「プロジェクトフォルダ\src\net_thread_entry.c」内の「net_thread_entry関数」に実装しています。

ap_ra6m_1a_ether_sample2

FSPの設定と、ユーザープログラムを実装するエントリーポイントもわかったけれど、実際のAPIの使い方が分からないという方には、APIリファレンスのページにサンプルコードが用意されていますので、参考にしてください。

FSP資料内のサンプルコード例
FSP資料内のサンプルコード例

弊社では、各製品にFSPを使ったサンプルプログラムを提供しています。例えば、下記はAP-RA6M-1AのUARTを使ったサンプルプログラム「ap_ra6m_1a_sci_uart_sample」です。これらを参考に、FSPを使ったアプリケーション開発に役立ててください。

サンプルプログラム「ap_ra6m_1a_sci_uart_sample」UART初期化コードの位置
サンプルプログラム「ap_ra6m_1a_sci_uart_sample」UART初期化コードの位置

4. まとめ

今回は、ルネサス社が提供するFSPの概要と、その使い方手順を簡単にご紹介しました。

FSPは当初RAマイコンのみに提供されていましたが、現在では、RZ/T2M・RZ/T2L用FSPRZ/A3UL用FSPなど、比較的新しいRZファミリにも同様に提供されています。基本的なFSPの使い方は同じですので、一度FSPに慣れておけば、今後ルネサス社製マイコンのソフトウェア開発を効率化できると思います。

弊社でも、各CPUボード向けにFSPを使ったサンプルプログラムを提供しているので、是非ご活用ください。

製品のご案内

本コラム以外にも開発にお役立ていただける技術情報をアプリケーションノートとして公開しております。興味のある方は、ぜひ製品をご利用ください。

  • ※ArmおよびCortexは、米国および/またはその他の地域におけるArm Limited(またはその子会社)の登録商標です。
  • ※記載されている会社名、製品名は、各社の登録商標または商標です。
  • ※記載の内容は改良のため、予告なく変更する場合がございます。