===================================================================== QB-R5F100LE-TB ターゲット依存部 Last Modified: '15/6/2 ===================================================================== ○概要 QB-R5F100LE-TBターゲット依存部は,プロセッサに RL78/G13 を搭載した, (株)ルネサスエレクトロニクス製の QB-R5F100LE-TB ボードをサポートしている. http://japan.renesas.com/products/tools/introductory_tools/cpu_board/qb_r5f100le_tb/index.jsp ○カーネルの使用リソース カーネルは以下のリソースを使用する. ・ROM コード,定数,初期値,割込みベクタを配置する. 使用量は使用するAPIの数に依存する. ・RAM データ,スタックを配置する. 使用量はオブジェクト数に依存する. ・タイマ カーネル内部のティックの生成にタイマ・アレイ・ユニットの ユニット0 チャネル0 を使用する. タイムティックの周期及びシステム時刻の精度は共に 1ms とする. ・シリアル シリアルドライバに UART0(シリアル・アレイユニットのユニット0 チャネル{0,1}) を使用する. プロセッサの UART0 送受信ポートはボード CN2 の 12ピン(送信) および13ピン(受信)と結線されている.このピンをUARTドライバICや USBシリアル変換モジュール等を利用してPCと接続することで出力を 確認することができる. ○他のターゲットへの移植 ターゲット依存部で使用するタイマおよびシリアルは,RL78/G13 の 内蔵機能のみを使用するため,RL78 の同様のプロセッサを用いた環境には 容易にポーティングが可能である.ポーティングに関しては,以下の初期化ルーチンに ターゲット毎の初期化を追加すればよい. ・target_initialize() : target_config.c ターゲット依存部の初期化(C言語) ・_hardware_init_hook : target_support.asm 低レベルのターゲット依存の初期化 スタートアップモジュールの中で,メモリの初期化の前に呼び出される 既定ではスタートアップモジュールから利用されておらず, コメントアウトされている. ○デバッグ環境 デバッグ環境として,E1 デバッガの使用を想定している. ○コンパイラ 以下の開発環境を用いて動作確認を行った. 処理系  ルネサステクノロジ製 コンパイラ CA78K0R V1.70 統合開発環境  ルネサステクノロジ製 統合開発環境 Cube Suite+ V2.02.00 ○コンソール出力 コンソール出力には,UART0を用いる.通信フォーマットは以下の通り. ・19200bps, Data 8bit, Parity none, Stop 1bit, Flow control none ○アドレスマッピング (※1) 0x00000 - 0x0007F ベクタテーブル 128バイト 0x00080 - 0x000Bf callt関数のテーブル用セグメント 64バイト 0x000C0 - 0x000C3 オプションバイト領域 4バイト 0x000C4 - 0x000CD セキュリティID 10バイト 0x000CE - 0x000D7 オンチップデバッグ機能の使用領域 10バイト 0x000D8 - 0x0ffff 内蔵FlashROM 約63.8KB @@CODE ; コード部用セグメント(near) @@BASE ; callt関数・割り込み関数用セグメント @@LCODE ; ライブラリ・コード部用セグメント(near) @@LBASE ; ライブラリ・callt関数用セグメント @@CNST ; 定数データ(near) @@R_INIT ; near初期化データ用セグメント(初期値あり) @@R_INIS ; 初期化データ用セグメント(初期値ありsreg変数) @@CODEL ; コード部用セグメント(far) @@LCODEL ; ライブラリ・コード部用セグメント(far) @@CNSTL ; ROMデータ(far) @@RLINIT ; far初期化データ用セグメント(初期値あり) 0xF0000 - 0xF07FF 2nd SFR領域 2KB 0xF1000 - 0xF1FFF データフラッシュメモリ 0xF2000 - 0xFEEFF ミラー領域(0x2000-0xEEFFと同じ値) 0xFEF00 - 0xFFEDF 内蔵RAM 3.9KB (※2) @@BITS ; boolean型変数, bit型変数用セグメント, BSEG領域 @@INIT ; データ領域用セグメント(初期値あり, near配置) @@DATA ; データ領域用セグメント(初期値なし, near配置) @@INIS ; データ領域用セグメント(初期値あり sreg 変数) @@DATS ; データ領域用セグメント(初期値なし sreg 変数) @@INITL ; データ領域用セグメント(初期値あり, far配置) @@DATAL ; データ領域用セグメント(初期値なし, far配置) @@CODER ; RAM配置 コード部用セグメント @@LCODER ; RAM配置 ライブラリ・コード用セグメント @@CNSTR ; RAM配置 ROMデータ用セグメント(near) @@CNSTLR ; RAM配置 ROMデータ用セグメント(far) 0xFFEE0 - 0xFFEFF 汎用レジスタ 32バイト (※2) 0xFFF00 - 0xFFFFF SFR領域 (※2) (※1) @@で始まるセグメントはコンパイルにより生成される. 「CubeSuite+ V2.01.00 統合開発環境ユーザーズマニュアル RL78,78K0Rコーディング編」の 「3. 5 セグメント名一覧」を元にした. http://documentation.renesas.com/doc/products/tool/doc/r20ut2774jj0100_qscd78.pdf (※2) ショート・ダイレクト・アドレッシング領域(0xFFE20-0xFFF1F) と一部重複する ○各種設定の変更 幾つかのパラメータは変更可能になっている.設定ファイル毎に設定可能項目 は次のようになっている. ●target.tfの設定項目 INTNO_FIX_KERNEL 固定的にカーネル管理の割込みとする割込み番号 INTNO_FIX_NONKERNEL 固定的にカーネル管理外の割込みとする割込み番号 INHNO_FIX_KERNEL 固定的にカーネル管理の割込みとする割込みハンドラ番号 INHNO_FIX_NONKERNEL 固定的にカーネル管理外の割込みとする割込みハンドラ番号 ●target_config.h の設定項目 ・DEFAULT_ISTKSZ 非タスクコンテキスト用スタックサイズの規定値 (ただし,SSPでは共有スタック領域の既定サイズを意味する) ●target_syssvc.h の設定項目 ・BPS_SETTING コンソールに使用するシリアルポートのボーレート(規定では 19200) ※ 現状ではこのマクロは使用していない. ●CPUロックで用いる割込み優先度TMIN_INTPRIの定義 ・C言語用の定義: プロセッサに既定の定義位置:prc_kernel.h ターゲット依存で定義する場合の定義位置:target_config.h(現状では未定義) ○サンプルプロジェクトの実行手順 開発環境がインストールされていることを前提とする. 以下の説明ではパスの区切り文字としてスラッシュ '/' を使用する. 0. ZIP圧縮されているファイルを適当な場所へ展開する. 展開先のパスには日本語文字や空白などを含まない方がよい. 1. ワークスペースファイルを開く <展開先フォルダ>/ssp/target/qb_r5c100le_cs/ssp_rl78/ssp_rl78.mtpj をダブルクリックする. CubeSuite+ がインストールされていれば,統合開発環境が起動する. 2. sample1 プロジェクトをアクティブプロジェクトにする 既定の設定ではすでにアクティブになっている. 3. メニュー「ビルド→リビルドプロジェクト」を選択して,sample1プロジェクトをビルドする 依存関係の設定により先に libkernel, sys-cfg プロジェクトのビルドが行われ, その後,sample1 プロジェクトのビルドが実施される. そして,アプリケーション(sample1),システムライブラリ,システムサービス, 及びカーネルがリンクされ,実行ファイルが生成される. 4. プログラムの実行を確認する. サンプルはシリアルポートの機能を前提としている.プロセッサの UART0 ポートがボードの CN2 12番ピン(TxD0),13番ピン(RxD0)に結線されており, このピンおよび GNDのピンをUARTドライバICあるいはUSB-シリアル変換モジュール等を 利用してPCに接続すると,シリアルからの出力を確認することができる. 次節では,E1 を利用したフラッシュへのプログラム書き込み,及び,実行の 手順について記述する. 5. フラッシュROM へのプログラム書き込み (1) E1をPCおよびターゲットボードに接続する. (2) メニュー「デバッグ→デバッグツールへダウンロード」を選択する. 失敗する場合,以下を確認する. ・E1のドライバがインストールされているかどうか. ・E1とボードの接続が正しいかどうか.ずれていないか,向きは正しいか. ・ターゲットボードに電源が供給されているかどうか. 既定の設定では供給しない設定となっている. E1から電源供給する場合は次の手順で設定変更する. (2-1)「プロジェクト・ツリー」ウィンドウの「ssp_rl78(プロジェクト) --> sample1(サブプロジェクト) --> RL78_E1(Serial)」項目を 右クリックし,コンテキストメニューを表示する. (2-2) コンテキストメニューから「プロパティ」を選択する. (2-3) 「プロパティ」ウィンドウから「接続用設定」タブを選択する. (2-4) 「ターゲットボードとの接続」の項目内にある, 「エミュレータから電源供給する(最大200mA)」を「はい」にする. (3) ダウンロードが完了すると,ターゲットは sta_ker の先頭で実行停止する. (4) メニュー「デバッグ→実行」を選択すると,プログラムの実行を開始する. ○注意事項 ・リンク順序について スタートアップモジュール(start.asm)にてRAMの初期化処理を行うためには セクションの先頭アドレスおよび最終アドレスを知る必要がある. それらのアドレスを取得するため segment_s.asm および segment_e.asm を それぞれ実行モジュールの先頭と末尾にリンクする必要がある. segment_s.asm は sample1サブプロジェクトのリンク順序設定で最初にリンク されるよう設定されている.一方で segment_e.asm は libkernel.lib の末尾に リンクされるよう設定されている. これは,sample1サブプロジェクトで libkernel.lib のリンク順序を 変更することができないため,一時的措置としてこのようにしている. 今後において,別ライブラリを追加的にリンクする場合, libkernel.lib が末尾にリンクされるようリンク順序の設定を行う必要がある. 末尾に配置されない場合は,変数セクションの末尾アドレスを正しく取得できず, RAMの初期化が正しく行われない. ○変更履歴 2014/08/21 ・新規作成 2015/6/2 ・SSP-1.3.0対応