新規プロジェクト作成方法(ベアメタル) - renesas/rx72n-envision-kit GitHub Wiki

準備する物

  • 必須
    • RX72N Envision Kit × 1台
    • USBケーブル(USB Micro-B --- USB Type A) × 1 本
    • Windows PC × 1 台

e2 studio を起動し、新規プロジェクトを作成する

  • ファイル -> 新規 -> プロジェクト
    • ウィザード -> C/C++ -> C/C++ プロジェクト -> 次へ
      • All -> Renesas CC-RX C/C++ Executable Project
        • プロジェクト名 = rx72n_envision_kit を入力 -> 次へ
          • Device Settings -> ターゲット・デバイス -> ...ボタン -> RX700 -> RX72N -> RX72N - 144pin -> R5F572NNHxFB (ファームウェアアップデートも試そうと考えている場合は、R5F572NNHxFB_DUALを選択)
          • Configuration -> Hardware Debug 構成を生成 -> E2 Lite (RX) -> 次へ
            • スマート・コンフィグレータを使用する にチェック -> 終了
  • ★将来改善★ プロジェクト新規作成時もBDFインストールができるようにする

RX72N Envision Kit の ボードコンフィグレーションファイル(BDF)をインストール

    • ボードコンフィグレーションファイル(BDF)を読み込むことで、スマートコンフィグレータ上の「端子設定」が自動化される
      • 将来、コンポーネントやクロックの設定も全自動になっていく見込み

RX72N Envision Kit の ボードコンフィグレーションファイル(BDF)を読み込む

RX72N Envision Kitに合わせてスマートコンフィグレータでクロック設定を施す

  • ★将来改善★ BDF連携により e2 studio 2020-xx (将来バージョン)で不要になる見込み。e2 studio 2020-07以前では必要
    • スマートコンフィグレータの下部、「クロック」タブを押す
      • メインクロック -> 周波数 -> 16 (MHz) に変更
      • PLL回路 -> 逓倍比 を x15.0 に変更
      • PPLL回路 -> 分周比を x1/2、逓倍比 を x25.0 に変更
        • FlashIFクロック、システムクロック等が上記変更に連動して、自動的に変更されることを確認
    • スマートコンフィグレータ右上の「コード生成」ボタンを押すとスマートコンフィグレータで設定した内容に応じたスケルトンプログラムが出力される
    • e2 studio画面上部のプロジェクト -> すべてをビルド を実行し、コンソールにエラー表示されないことを確認

CMT(Compare Match Timer)を使用し0.1秒周期割り込みを発生させLEDを0.1秒周期で点滅させる

スマートコンフィグレータでCMTのコンポーネントを登録する

    • スマートコンフィグレータの下部、「コンポーネント」タブを押す
    • 上記のようにr_cmt_rxコンポーネントを追加する
    • 表示されない場合は、以下を試す
      • ほかのソフトウェアコンポーネントをダウンロードする -> Region選択 -> 表示された RXファミリ RX Driver Package Ver.x.xx (最新版)を選択しダウンロードする
    • CMTのみ動作確認の場合は不要だが、SCI(Serial Communication Interface)やポート設定などを動的に行う場合は以下も実施しておくとよい
      • 基本設定 -> C/C++ -> Renesas -> スマート・コンフィグレータ -> コンポーネント -> すべてのFITモジュールを表示する
    • スマートコンフィグレータ右上の「コード生成」ボタンを押すとスマートコンフィグレータで設定した内容に応じたスケルトンプログラムが出力される
    • e2 studio画面上部のプロジェクト -> すべてをビルド を実行し、コンソールにエラー表示されないことを確認

CMTのコンポーネントのマニュアルを確認する

    • スマートコンフィグレータが生成するコードはすべて smc_gen フォルダに格納される
    • 様々な機能を持つコンポーネント、例えば今回使用する r_cmt_rx など、docフォルダを持つコンポーネントがある
    • docフォルダ内にはマニュアルが入っており、コンポーネントのAPI仕様およびその使用方法を確認できる
    • 今回は、r_cmt_rx の 周期起動API、R_CMT_CreatePeriodic()を使用する

LEDに接続されたRX72Nのポート番号を確認する

    • P40がUSER LEDに繋がっている
      • P40 の電圧レベルをゼロにすることで、3.3V電源からUSER LEDを経由しP40に対し電流が流れ、USER LEDが点灯する仕組み

スマートコンフィグレータでポートのコンポーネントを登録する

    • スマートコンフィグレータの下部、「コンポーネント」タブを押す
    • 上記のように ポート コンポーネントを追加する
    • さらに、追加された Config_PORT コンポーネントを選択し、以下設定を施す
      • ポート選択タブ -> PORT4
      • PORT4タブ
        • P40 -> 出力、CMOS出力、1を出力にチェック(初期状態でLED消灯)
    • スマートコンフィグレータ右上の「コード生成」ボタンを押すとスマートコンフィグレータで設定した内容に応じたスケルトンプログラムが出力される
    • e2 studio画面上部のプロジェクト -> すべてをビルド を実行し、コンソールにエラー表示されないことを確認

main()関数を作成する

  • スマートコンフィグレータが出力するコードは、ハードウェアの初期化が完了すると、main()を呼び出す
  • ユーザはこのmain()にユーザコードを追加し、ユーザシステムの動作を定義していく
  • 今回はここに、CMTとポートの機能を使用したコードを追加することで、「LEDを0.1秒周期で点滅させる」ことを実現する
  • 以下コードを rx72n_envision_kit.c に書き込む
    • rx72n_envision_kit.c のソースコードはe2 studio画面上のプロジェクトエクスプローラにおいて、 rx72n_envision_kit -> src に格納されている
#include "r_smc_entry.h"
#include "platform.h"
#include "r_cmt_rx_if.h"

void main(void);
void cmt_callback(void *arg);

void main(void)
{
	uint32_t channel;
	R_CMT_CreatePeriodic(10, cmt_callback, &channel);
	while(1);
}

void cmt_callback(void *arg)
{
	if(PORT4.PIDR.BIT.B0 == 1)
	{
		PORT4.PODR.BIT.B0 = 0;
	}
	else
	{
		PORT4.PODR.BIT.B0 = 1;
	}
}

ちょっとしたお遊び

  • タイマ割込みの周期を10Hzではなく、100kHzとし、割込みが入るたびにLEDがONになっている時間とOFFになっている時間を動的に少しずつ変更していくことでホタルの光のようなLEDの光り方を再現できる。いわゆる(ソフトウェアによる)PWM制御である
  • ソフトウェアによるPWM制御は無駄にCPU処理負荷がかかるため、通常はPWM機能を持つタイマ機能を利用するが、割込みが入ると発生する不具合動作を常にスクリーニングするために開発中はあえてこういったコードを仕込んでおくこともある
#include "r_smc_entry.h"
#include "platform.h"
#include "r_cmt_rx_if.h"

void main(void);
void cmt_callback(void *arg);

void main(void)
{
	uint32_t channel;
	R_CMT_CreatePeriodic(100000, cmt_callback, &channel);
	while(1);
}

#define LED0 PORT4.PODR.BIT.B0
#define LED_ON 1
#define LED_OFF 0

void cmt_callback(void *arg)
{
    volatile static uint8_t duty = 0; /* 0-255 */
    volatile static uint8_t make_duty_cnt = 0; /* 0-100 */
    volatile static uint32_t change_duty_cnt = 0; /* 0-0xffff(65535 * 10us = 0.65535 sec) */
    volatile static uint8_t current_duty_direction = 0; /* 0=plus, 1=minus */

    if(make_duty_cnt == 255)
    {
        make_duty_cnt = 0;
    }
    make_duty_cnt++;

    if(change_duty_cnt == 0xffff)
    {
        if(current_duty_direction == 0)
        {
            current_duty_direction = 1;
        }
        else
        {
            current_duty_direction = 0;
        }
        change_duty_cnt = 0;
    }
    change_duty_cnt++;

    if((change_duty_cnt & 0xff) == 0x00)
    {
        if(current_duty_direction == 0)
        {
            duty++;
        }
        else
        {
            duty--;
        }
    }

    if(make_duty_cnt < duty)
    {
        LED0 = LED_ON;
    }
    else
    {
        LED0 = LED_OFF;
    }
}

デバッガ設定

  • RX72N Envision KitのSW1-2 をOFF(ボードの下側)にする
  • 次にビルドしたファームウェアをRX72Nにダウンロードし、実行する
    • e2 studio 画面上部の Configuration プルダウンで rx72n_envision_kit HardwareDebug が選択されていることを確認
    • その右隣りの歯車アイコンを押す
      • Debugger -> Debug hardware -> E2 Lite(RX) が選択されていることを確認
      • Debugger -> Connection Settings
        • メイン・クロック・ソース -> EXTAL に変更
        • EXTAL周波数[MHz] -> 16.0000 に変更
        • 動作周波数[MHz] -> 240 に変更
        • 接続タイプ -> Fine に変更
        • エミュレータから電源を供給する (MAX 200mA) -> いいえ に変更
    • ★将来改善★ BDFに合わせてデバッガの設定を自動化する

動作確認

  • e2 studio 画面上部の 虫アイコンを押してファームウェアをRX72Nにダウンロードする
  • e2 studio 画面上部の 再生ボタンのアイコンを押してファームウェアを実行する
    • main()で一度ブレークするのでもう一度再生ボタンのアイコンを押す
  • ボード上の青色LED(ボード中央RX72Nの右下あたり)が0.1秒周期で点滅することを確認
  • RX72Nは汎用マイコンであるため、クロック源や内部PLL回路の逓倍/分周比を柔軟に設定することができる
  • CMTに代表されるタイマ系や、SCIに代表される通信系においては、自身に配線されているクロック信号のクロック速度に応じて自身への設定値をソフトウェアにより調整する必要がある
  • このソフトウェアのコーディングは本来、マイコンのマニュアルを参照しながらユーザが行う必要があるが、非常に設定項目が多岐に渡るためスマートコンフィグレータのようなツールでこれを支援する機構を用意した
  • ユーザ(特にアプリ設計者)はクロック源が何MHzであるとか、内部PLLの設定がどうなっているかを意識することなく、APIレベルでたとえば「ボーレートは115200bps」といった形でソフトウェアからハードウェアに対して指示をすることが可能となり、ソフトウェア開発効率が改善する
  • また、RXファミリ製品を熟知した設計者がCMT、SCI、Ether、USB、SDHI等のRXファミリ内蔵回路用のドライバソフトウェアを主要RXグループに対し同一API設計にて「FITモジュール」という形式で開発・メンテナンス(継続的な不具合修正)を実施し、FITモジュールを1個のパッケージに同梱したものを「RX Driver Package」として配布をしている
  • 従ってユーザはRXファミリ間の詳細なハードウェア差異やハードウェアエラッタ情報を意識することなくアプリケーション開発に注力できる

画面処理系のFITモジュール

  • 画面処理系のFITモジュールはまだ試作段階であり、RX Driver Packageに正式に組み込めていない
  • 試作段階のFITモジュールはearly prototypeとして以下にあり、使用する場合は別途導入が必要
  • 画像処理系以外にもSDIOドライバや各種WiFiドライバのearly prototype版のFITモジュールがいくつか存在する
  • 以下フォルダに上記URLからダウンロードしたFITモジュール(FITModulesフォルダ内の*.zip, *.xml, *.mdf)をコピーすればスマートコンフィグレータがそれを読み込むことができる
    • e2 studio 2020-04以前
    • e2 studio 2020-07以降

★今後改善する項目

  • LEDのON/OFFだけでなく、RX72N Envision Kit に搭載されている全機能についてスマートコンフィグレータで簡単に設定ができるよう*.scfgファイルを整備できるよう、情報拡充する <工事中>
  • BDF設定によりFITモジュールのMDF(Module Description File)が抱える初期設定値を更新できるようにすることで、ボード選択により全自動でFITモジュールの再設定が可能となる
  • BDF設定によりPMODなどのボード上のマルチファンクションなコネクタに対するFITモジュール設定を柔軟に選択可能にする
⚠️ **GitHub.com Fallback** ⚠️