コード生成プラグイン学習ガイド

ルネサス システムデザイン株式会社
ツールビジネス事業部 ツール技術部
2014/10/01

Rev. 1.00© 2014 Renesas System Design Co., Ltd.

R20UT3230JJ0100

はじめに
みなさんは、近所の方に「何のお仕事しているの?」と聞かれて、一言で答えられますか?
私は、無理です。マイコン、開発ツール、コード生成…説明しても理解してもらえるかわからな
い言葉だらけで、いつも適当に「はい、IT系です」と誤魔化しています。
同じように、開発といっても、ある機能のほんの一部分を担当されている方もいると思います。
日々の仕事って何になるんだろうと考えることもありますよね？
先日、実家に帰省した際、93歳になる祖父に会いました。
ふと、祖父に「今まで生きてきた中で1番の変化（出来事）って何？」と聞いたところ、「人生で一番の変化は、コンピュータができたことかなぁ」と答えました。
戦争ではなく、こんな山の中で農業をして暮らしているのに、
ITによる変化が1番だなんて！
驚くとともに、とてもうれしかったのを覚えています。
なぜって、その変化の中の、ほんの少しだろうけど、私の仕事も含まれていると思えたから。
開発をやり遂げた自己満足も良いですが、多くの人に変化を与えられるようなモノを目指したいと思っています。そんな気持ちを込めたガイドです。
© 2014 Renesas System Design Co., Ltd.

2

コード生成って?

マニュアルが分厚くて、どこから読んでいいかわからないよ。
間違った使い方をして、壊してしま
わないかな？

マイコンが高性能になるのは良いけれど、
使うハードルが高くないかな？

 マイコンの使用したい機能を動作させるプログラム
を、コード生成プラグインの簡単な操作で自動生成することができます。
 誤った設定には、ワーニングが出るので安心です。
 開発の最初の手掛かりに、マイコンの学習に役立ちます。
© 2014 Renesas System Design Co., Ltd.

3

目的
 コード生成を使って、サンプルプログラムを作成します。サンプルプログラム作成を通じて、コード生成のAPIの使い方を学びます。

安心

 RL78/G13のCPUボード（QB-R5F100LE-TB）を使って、作成したプログ
ラムを動作させます。
 CS+ に添付しているチュートリアル・ガイドを補完し、詳細な解説を加えました。気軽にCS+、コード生成を体験してください。

快適

簡単© 2014 Renesas System Design Co., Ltd.

4

コード生成プラグイン紹介(1/3)
 GUIを使った簡単な操作でマイコンの内蔵周辺機能を動作させるプログラムを自動で生成する機能です。
直感的にわかる設定

PWMタイマも簡単設定サポートしている
周辺機能一覧
© 2014 Renesas Electronics Corporation. All rights reserved.

5© 2014 Renesas System Design Co., Ltd.

5

コード生成プラグイン紹介(2/3)
 ボタン押下のみで、ビルド可能なソースを作成します。
ボタン押下でソースを作成

作成されたソースはビルド可能！

QB-78K0RKG3-TB
SS-77045
78K0R
/KG3

テストするまで簡単！
© 2014 Renesas System Design Co., Ltd.

6

コード生成プラグイン紹介(3/3)
 main関数、使用する機能に応じたAPI（Application Program Interface）関数セットが生成されるので、これらを組み合わせるだけで様々なプログラムが作成可能です。
 生成するプログラムはC言語ですので、処理が理解しやすくなっています。
リセット

hdwinit();

スタートアップ

周辺機能
割り込み処理ハードウェア初期化
周辺機能初期化

ユーザコード・・・

R_MAIN_UserInit();

メイン関数実行前に必要なユーザ独自の初期化処理

周辺機能動作開始

end
while(1) { };© 2014 Renesas System Design Co., Ltd.

コード生成が全体枠組みを作ります。
コードを書くのは、この部分だけ！！
7

プログラム概要(1/2)
 ポート、タイマ機能を使用して、7セグLEDに数字を表示させましょう。
 4桁とも同じ数字(“0000”、“1111”、… 、“9999”、“．．．．”)を表示(ダイナミック点灯)させます。

 A/Dコンバータ、ポート、タイマ機能を使用して、ポテンションメータの値をA/D変換して7セグLEDに表示させましょう。
 A/D変換値(10bit分解能(0～1023))を7セグLEDに表示(ダイナミック点灯)させます。

 シリアル機能を使用して、UART通信させましょう。
 ターミナルを使って、PCのキー入力を送受信（コールバック）させます。
 スイッチボードで割り当てた機能をターミナルにメニュー表示させます。

© 2014 Renesas System Design Co., Ltd.

8

プログラム概要(2/2)
 タイマ機能(PWM)を使用して、LEDの輝度を変化させましょう。
 CPUボードのLEDをダイナミック点灯させます。
 点灯期間と消灯期間を割合を制御しLEDの輝度を変化させます。

 割り込み機能を使用して、スイッチボードで作成したプログラムを選択できる
ようにしましょう。
 SW1-4押下で、各機能を動作させます。
 リセットSW(CPUボード上SW)押下で、再選択可能状態にします。

© 2014 Renesas System Design Co., Ltd.

9

必要な機材(1/5) CPUボード
簡易ユニバーサル・エリア
スイッチ１個鉛（Ｐｂ）フリー対応品
クロック実装済み
LED２個※イメージ図

RL78/G13（R5F100LEAFB）仕様
電源電圧
動作周波数
ROM容量
RAM容量
I/Oポートタイマ

VDD = 1.6 - 5.5 V
1 - 32 MHz
64KBフラッシュ・メモリ、4 KBデータフラッシュ
4 KB
16-120本（N-chオープン・ドレーン： 0-4本）

16ビット・タイマ
8-16チャネル
ウォッチドッグ・タイマ
1チャネル
リアルタイム・クロック
1チャネル
インターバル・タイマ
1チャネル
シリアル・インタフェース
CSI
2～8チャネル
UART／UART（LIN-bus対応) 2～4チャネル
I2C／簡易I2C
2～8チャネル
8/10ビット分解能A/Dコンバータ
6-26チャネル
オンチップ・デバッグ機能、電圧検出（LVD）回路、キー割り込み機能、クロック出力／ブザー出力制御回路内蔵© 2014 Renesas System Design Co., Ltd.

10

必要な機材(2/5) その他機材
 ポテンションメータ（半固定抵抗） 7セグLED *1
 スイッチボード *1
 シリアル-USB変換ボード *2
 USBケーブル ブレッドボード
 TBアダプタ
 配線材
 E1本体、ユーザシステムインタフェースケーブル、USBケーブル
 ターミナルソフト *3*1：７セグLEDボード、スイッチボードは、workshop Nak様の製品です。 http://www.wsnak.com*2：シリアル-USB変換ボードは、sparkfun様の製品です。https://www.sparkfun.com/products/9716*3：ここでは、Teratermを使用しました。http://sourceforge.jp/projects/ttssh2/© 2014 Renesas System Design Co., Ltd.

11

必要な機材(3/5) ターミナルソフト
 シリアル通信のためのターミナルソフトとして、今回はTeraterm(フリーソフト)を使用しました。
 インストーラを下記などのサイトよりダウンロードし、インストールしてください。
http://sourceforge.jp/projects/ttssh2/
 シリアル接続可能であれば、他のターミナルソフトを使用しても構いません。

© 2014 Renesas System Design Co., Ltd.

12

必要な機材(4/5) ターミナルソフト
 Teratermは、以下のように設定し使用してください。
 PC と シリアル-USB変換ボード を接続し、Teratermを起動します。
①

メニューの[ファイル]から[新しい接続]を選択します。

②[シリアル]を選択、「USB Serial port」と記載されているポート番号を選択します。

③ [OK]ボタンを押下します。
© 2014 Renesas System Design Co., Ltd.

13

必要な機材(5/5) ターミナルソフト
 以下のように、シリアルポートの設定をします。
① メニューの[設定]から[シリアルポート]を選択②
ボーレート：[9600]
データ：[8bit]
パリティ：[none]
ストップ：[1bit]
フロー制御：[none] を選択③ [OK]ボタンを押下します。

© 2014 Renesas System Design Co., Ltd.

14

ハードウェア設計 回路図（CPUボード）

http://japan.renesas.com/products/tools/introductory_tools/cpu_board/qb_r5f100le_tb/index.jsp© 2014 Renesas System Design Co., Ltd.

15

ハードウェア設計 回路図（4桁7セグメントLED）

表示データ信号

A
F B
G
E C
D DP

出力セレクタ信号

A～GのLEDを点灯させて数字表示させる。

http://www.wsnak.com/kit/233/index.htm© 2014 Renesas System Design Co., Ltd.

16

ハードウェア設計 回路図（ポテンションメータ）

VDD
②
①

③

GND（①）
マイコンのアナログ端子へ接続（②）
VDD（③）

低 抵抗値 高

Cカーブ

Bカーブ
Aカーブ
小

回転角度 多© 2014 Renesas System Design Co., Ltd.

左図は、半固定抵抗器の特性を示したものです。
半固定抵抗器は、一般的にポテンションメータと呼ばれます。
今回扱う部品はBカーブのものを使います。一般
的な半固定抵抗器（ボリューム）はAカーブやBカーブが多く、回転角度と抵抗値が一定のBカー
ブの部品が扱いやすいので、今回採用しました。
17

ハードウェア設計 回路図（シリアル-USB変換ボード）

LED（送信（Tx）、受信（Rx）時それぞれ点灯）

GND
（未接続）
（未接続）
RxD1へ
TxD1へ
（未接続）
USBケーブル

https://www.sparkfun.com/products/9716© 2014 Renesas System Design Co., Ltd.

18

ハードウェア設計 回路図（SWボード）
プルアップ抵抗が接続されています。

JP5～JP8

INTP1(P46)
INTP2(P47)
INTP3(P30)
INTP4(P31)

タクトスイッチ

http://www.wsnak.com/
kit/products/itemPage/
153/index.htm

JP5～JP8をジャンパショートします。
LED（使用しません。）© 2014 Renesas System Design Co., Ltd.

19

ハードウェア設計
 CPUボード
メイン･クロック動作周波数：20MHｚ （発振子搭載）
評価用LED: 黄x2(LED1 はP62,LED2 はP63 へ接続)
評価用SW: SW1(INTP0 へ接続)
 7セグLED
表示データを マイコンのP10-P17に接続
出力セレクタ信号を、マイコンのP52-P55に接続 ポテンションメータ
可変端子を マイコンのANI0に接続端子が競合しないように設計してください。
ここで決めた情報をコード生成に入力していきます。
© 2014 Renesas System Design Co., Ltd.

20

ハードウェア設計
 シリアル-USB変換ボード
マイコンのSAU0チャネル、チャネル2をUARTとして使用し、
Tx1、Rx1、GNDを接続する。
<UART設定条件>
データ・ビット長：8bit
パリティ：無し
ストップ・ビット長：1bit
データ転送方向：LSBファースト
転送レート：9600bps
 スイッチボード
SW1-SW4を それぞれマイコンの INTP1-INTP4に接続する。
端子が競合しないように設計してください。
ここで決めた情報をコード生成に入力していきます。
© 2014 Renesas System Design Co., Ltd.

21

CS+ プロジェクトの作成
 CS+ for CA,CXを起動し、新しいプロジェクトを作成します。
② マイクロコントローラはRL78③
マイコンR5F100LE(64pin)選択④ プロジェクト名はRL78G13_sample①「新しいプロジェクト作成する」
を選択⑤ フォルダはC：￥「プロジェクト名のフォルダを作成⑥ する」にチェック⑦

クリックして次へ

既存プロジェクトをコピーして新しいプロジェクトを作成することも可能です。
ただし、その場合、コード生成の設定は引き継がれません。
© 2014 Renesas System Design Co., Ltd.

22

CS+ プラグインの管理(1/2)
 メニューの[ツール]から[プラグイン管理]を選択してください。

デフォルトの端子配置機能やコード生成機能はOFF状態になっていますので、プラグインをONにする必要があります。
© 2014 Renesas System Design Co., Ltd.

23

CS+ プラグインの管理(2/2)
 下図のように情報を設定後、[OK]ボタンをクリックしてください。

①②

 [はい]ボタンを押下し、CS+を再起動してください。

© 2014 Renesas System Design Co., Ltd.

24

CS+ コード生成設定（システム）③ 「クロック設定」タブに切り替え
プロジェクトが作成される①④ 「高速システム・クロック」を選択※「クロック発生回路」を押下② 「確定する」を押下⑤※ クロックはデフォルトのままでも動作します。
QB-R5F100LE-TBはX1,X2に20MHz発振子が搭載されているので、それを使う設定にします。
© 2014 Renesas System Design Co., Ltd.

25

高速システムクロックに「20」を入力

CS+ コード生成設定（システム）① 「オンチップ・デバッグ設定」タブに切り替え②「使用する」にチェック© 2014 Renesas System Design Co., Ltd.

26

CS+ コード生成設定（ウォッチドッグ・タイマ）② 「使用しない」にチェック① 「ウォッチドッグ・タイマ」を押下© 2014 Renesas System Design Co., Ltd.

27

CS+ コード生成設定（割り込み）② 「外部割り込み」タブ③
INTP0、INTP1、INTP2、INTP3、INTP4にチェックする① 「割り込み」を押下

割り込み端子は、必要に応じて、ポートの内蔵プルアップ（該当するポートの内蔵プルアップにチェック）を使用してください。
（今回は、CPUボード、SWボードでプルアップされているので、設定不要です。）© 2014 Renesas System Design Co., Ltd.

28

CS+ コード生成設定（ポート）② 「ポート6」タブに切り替え① 「ポート」を押下③ 「P62」「P63」を出力へチェック、また「１」をチェックし初期値を１（High）にする。
P62はCPUボードのLED1、
P63はCPUボードのLED2が接続されている。

© 2014 Renesas System Design Co., Ltd.

29

CS+ コード生成設定（ポート）④ 「ポート5」タブに切り替え②「ポート1」タブに切り替え① 「ポート」を押下⑤ 「P52」「P53」「P54」「P55」を出力へチェックする。
P52からP55は、7セグLEDの出力セレクタ（CO0からCO3）にそれぞれ接続する。

端子の競合が発生している項目には、アイコンが表示されます。
アイコン上にマウス・カーソルを移動すると、競合回避のための情報が表示されます。

③ 「P10」「P11」「P12」「P13」「P14」「P15」「P16」「P17」を出力へチェックする。
P10からP17は、7セグLEDの表示データ（AからG、DP）にそれぞれ接続する。
© 2014 Renesas System Design Co., Ltd.

30

CS+ コード生成設定（タイマ）②
チャネル0「インターバル・タイマ」を選択③ 「チャネル0」タブに切り替え① 「タイマ」を押下④ 「100ｍｓ」になるように入力⑤ チャネル1「インターバル・タイマ」を選択⑥ 「チャネル1」タブに切り替え⑦ 「2ｍｓ」になるように入力© 2014 Renesas System Design Co., Ltd.

31

CS+ コード生成設定（タイマ）③「チャネル2」「マスタ」タブに切り替え① 「タイマ」を押下④ 「10ｍｓ」になるように入力② チャネル2「PWM出力」を選択⑤ 「スレーブ」タブに切り替え⑥ 「１」を入力© 2014 Renesas System Design Co., Ltd.

32

CS+ コード生成設定（シリアル）④「UART1」「受信」タブに切り替え② 「SAU０」「チャネル」タブに切り替え①「シリアル」を押下③
チャネル２「UART1」「送信/受信機能」を選択© 2014 Renesas System Design Co., Ltd.

⑤ 「UART1」「送信」タブに切り替え

33

CS+ コード生成設定（A/Dコンバータ）② 「使用する」を選択③「許可」を選択①「A/Dコンバータ」を押下⑤「ANI16」、「ANI17」、「ANI18]、「ANI19」のチェックを外す© 2014 Renesas System Design Co., Ltd.

34④
「ANI0」を選択

CS+ コード生成① 「コード生成」を押下②
ソースが生成される

プロジェクト・ツリー パネルの各機能のアイコンは、以下の意味しています。
：使用している機能：未使用の機能：設定内容に問題が発生© 2014 Renesas System Design Co., Ltd.

35

CS+ 端子配置へ反映①「端子配置へ反映」を押下②
端子配置表、端子配置図が生成される© 2014 Renesas System Design Co., Ltd.

36

CS+ 端子配置図②
端子状態が、選択した機能となっているかを確認しましょう① 「端子配置図」をダブルクリック
端子配置表の“選択機能”で選択された機能をかっこで括った形式で表示します。
（デフォルト時）© 2014 Renesas System Design Co., Ltd.

37

CS+ 端子配置表①「端子配置表」をダブルクリック② 端子状態が、選択した機能となっているかを確認しましょう

端子配置表/端子配置図は、編集可能ですが、その情報をコード生成、ソースに反映することはできません。
© 2014 Renesas System Design Co., Ltd.

38

CS+ 設定した情報の保存
 設定した情報は、ファイル出力可能です。
 コード生成レポート（HTMLファイル/CSVファイル）
 端子配置表（Microsoft Office Excelブック形式）

コード生成レポートは、「コード生成のプロパティ」で設定したフォルダに出力されます。

 端子配置図（ビットマップ、等）①
保存したい項目のパネルにフォーカスがある状態で、[ファイル]メニューを選択②「コード生成レポートを保存」を選択（「端子配置表を保存」、「端子配置図を保存」）③
ファイル名、ファイルの種類を設定し、「保存」を押下します。
（端子配置表、端子配置図）© 2014 Renesas System Design Co., Ltd.

39

CS+ コード生成で出力されたファイル
 出力ファイル
GUIベースで設定した情報に応じたデバイス・ドライバ・プログラムを出力するとともに、main関数を含んだサンプル・プログラムやビルド環境一式も出力します。
周辺機能は、以下のようなファイル名となります。
r_cg_周辺機能名.c：初期化関数、API関数

r_cg_周辺機能名_user.c ：割り込み関数、コールバック関数
r_cg_周辺機能名.h：レジスタへの代入値マクロを定義

ユーザ・コードは、r_main.c、r_cg_周辺機能名_user.c、r_cg_userdefine.h に追記していきます。
© 2014 Renesas System Design Co., Ltd.

40

CS+ コード生成で出力されたファイル
 ユーザ記述コードの保護機能
コードを追記できる箇所には、ユーザ・コード記述用のコメントがあります。このコメント内にコードを記述すると、コード生成部で再度コード生成した場合にもユーザ追記の内容がマージ（保護）されます。ユーザ・コード記述用のコメントは、
関数内、ファイル内の前方および後方に用意されています。
【ユーザ・コード記述用のコメント例】

ユーザ・コード記述箇所© 2014 Renesas System Design Co., Ltd.

41

CS+ コード生成が出力するAPI関数（共通、周辺機能（初期化））
 共通
ファイル名r_systemini.cr_main.cAPI関数名機能概要
ルネサスエレクトロニクス製コンパイラ提供のスタートアップ・ルーチン
hdwinitから自動で呼ばれます。この関数内で R_Systeminit()を呼びます。
hdwinit関数から自動で呼ばれます。この関数内で 、リセット要因を確認する関数、および各周辺機能の初期設定を行う関数(R_周辺
R_Systeminit
機能名_Create)を呼びます。
R_MAIN_UserInit メイン関数実行前に必要なユーザ独自の初期化処理を行います。
main

r_cg_macrodriver
r_cg_userdefine.h

-

メイン関数
全ソース・ファイルで共通使用するマクロを定義
空ファイル（ユーザ定義用）

 周辺機能（初期化）
ファイル名

API関数名

機能概要

r_cg_周辺機能名.c

R_周辺機能名_Create

その機能を制御するうえで必要となる初期化処理を行います。
R_Systeminit 関数から自動で呼ばれます。

r_cg_周辺機能名_user.cr_cg_周辺機能名.h

R_周辺機能名_Create_UserInit-

その機能のユーザ独自の初期化処理を行います。
レジスタへの代入値マクロを定義

ファイル名、関数名は、コード生成の世代によって異なります。
© 2014 Renesas System Design Co., Ltd.

42

CS+ コード生成が出力するAPI関数（共通）
リセット[r_systeminit.c]hdwinit();ハードウェア初期化
メイン処理を開始

スタートアップ[r_main.c]

ユーザコード記述

R_MAIN_UserInit();

メイン関数実行前に必要なユーザ独自の初期化処理

while(1) { };[r_systeminit.c]

R_Systeminit();

PIOR = 0x00U;[r_systeminit.c]hdwinit();[r_main.c]

DI();

R_MAIN_UserInit();

R_CGC_Get_
ResetSource();

EI();
R_周辺機能名_Create();end

R_Systeminit();

IAWCTL = 0x00U;
end© 2014 Renesas System Design Co., Ltd.

割り込み禁止割り込み許可43end

内部リセットの発生に伴う処理
各周辺機能の初期設定

CS+ コード生成が出力するAPI関数（周辺機能）
 A/Dコンバータ API関数一覧
ファイル名
r_cg_adc.c

API関数名
R_ADC_Create
R_ADC_Set_OperationOn
R_ADC_Set_OperationOff
R_ADC_Start
R_ADC_Stop
R_ADC_Set_PowerOff
R_ADC_Set_ADChannel
R_ADC_Set_SnoozeOn
R_ADC_Set_SnoozeOff
R_ADC_Set_TestChannel
R_ADC_Get_Result
R_ADC_Get_Result_8bit
r_cg_adc_user.c R_ADC_Create_UserInit
r_adc_interrupt© 2014 Renesas System Design Co., Ltd.

機能概要
A/Dコンバータの機能を制御するうえで必要となる初期化処理を行います。
電圧コンパレータを動作許可状態に設定します。
電圧コンパレータを動作停止状態に設定します。
A/D変換を開始します。
A/D変換を終了します。
A/Dコンバータに対するクロック供給を停止します。
A/D変換するアナログ電圧の入力端子を設定します。
STOPモードからSNOOZEモードへの切り替えを許可します。
STOPモードからSNOOZEモードへの切り替えを禁止します。
A/Dコンバータの動作モードを設定します。
A/D変換結果（10ビット）を読み出します。
A/D変換結果（8ビット：10ビット分解能の上位8ビット）を読み出します。
A/Dコンバータに関するユーザ独自の初期化処理を行います。
A/D変換終了割り込み（INTAD）の発生に伴う処理を行います。
※ 色塗り箇所は、サンプルプログラムで使用しているAPIを意味します。

44

CS+ コード生成が出力するAPI関数（周辺機能）
 A/Dコンバータの使用例
リセット

スタートアップ
hdwinit();r_adc_interrupt

API関数（共通）のフロー(42ページ)A/D変換終了割り込み（INTAD）の発生に伴う処理

ユーザコードR_ADC_Stop

ユーザコードR_ADC_Start

R_ADC_Get_Result

A/D変換を開始

A/D変換を終了
A/D変換結果（10ビット）
の読み出し

end

A/D変換が終了すると割り込み（INTAD）が発生、現在の処理（メイン関数）を中断し、割り込み処理を実行します。
割り込み処理が終了すると、再度メイン関数に戻ります。
© 2014 Renesas System Design Co., Ltd.

45

コード生成が出力するAPI関数では、割り込みを使用し、機能を実現しています。

CS+ コード生成が出力するAPI関数（周辺機能）
 外部マスカブル割り込み API関数一覧
ファイル名
r_cg_intc.c

API関数名R_INTC_Create
R_INTCn_Start
R_INTCn_Stop
R_INTCLRn_Start
R_INTCLRn_Stopr_cg_intc_user.c

R_INTC_Create_UserInit
r_intcn_interrupt
r_intclrn_interrupt© 2014 Renesas System Design Co., Ltd.

機能概要
外部マスカブル割り込み（INTPn／INTPLRn）の機能を制御するうえで必要となる初期化処理を行います。
外部マスカブル割り込み（INTPn）の受け付けを許可します。
外部マスカブル割り込み（INTPn）の受け付けを禁止します。
外部マスカブル割り込み（INTPLRn）の受け付けを許可します。
外部マスカブル割り込み（INTPLRn）の受け付けを禁止します。
外部マスカブル割り込み（INTPn／INTPLRn）に関するユーザ独自の初期化処理を行 います。
外部マスカブル割り込み（INTPn）の発生に伴う処理を行います。
外部マスカブル割り込み（INTPLRn）の発生に伴う処理を行います。
※ 色塗り箇所は、サンプルプログラムで使用しているAPIを意味します。
※ n は、割り込み要因番号を意味します。

46

CS+ コード生成が出力するAPI関数（周辺機能）
 外部マスカブル割り込みの使用例
外部マスカブル割り込み（INTPn）の発生に伴う処理

リセット

スタートアップ

API関数（共通）のフロー(42ページ)

r_intcn_interrupt

hdwinit();

ユーザコードR_INTCn_Start

・・・

ユーザコード外部マスカブル割り込み（INTPn）の受け付けを
許可

・
・
・
end
R_INTCn_Stop
外部マスカブル割り込み（INTPn）の受け付けを禁止© 2014 Renesas System Design Co., Ltd.

47

※ n は、割り込み要因番号を意味します。

CS+ コード生成が出力するAPI関数（周辺機能）
 タイマ・アレイ・ユニット API関数一覧
ファイル名
r_cg_timer.c

API関数名R_TAUm_Create

機能概要
タイマ・アレイ・ユニットの機能を制御するうえで必要となる初期化処理を行います。
チャネルnのカウントを開始します。

R_TAUm_Channeln_Start
R_TAUm_Channeln_Higher8bits
チャネル1，またはチャンネル3のカウント（上位8ビット）を開始します。
_StartR_TAUm_Channeln_Lower8bits_
チャネル1，またはチャンネル3のカウント（下位8ビット）を開始します。
Start
チャネルnのカウントを終了します。
R_TAUm_Channeln_Stop
R_TAUm_Channeln_
チャネル1，またはチャンネル3のカウント（上位8ビット）を終了します。
Higher8bits_Stop
R_TAUm_Channeln_
チャネル1，またはチャンネル3のカウント（下位8ビット）を終了します。
Lower8bits_Stop
R_TAUm_Set_PowerOff
タイマ・アレイ・ユニットに対するクロック供給を停止します。
R_TAUm_Channeln_Get_
TImn端子に対する入力信号（入力パルス）のパルス間隔，
PulseWidthまたはハイ／ロウ・レベルの測定幅を獲得します。
ワンショット・パルス出力のためのトリガ（ソフトウエア・トリガ）
R_TAUm_Channeln_Set_
SoftwareTriggerOnを発生させます。
r_cg_timer_user.c

R_TAUm_Create_UserInit

タイマ・アレイ・ユニットに関するユーザ独自の初期化処理を行います。

r_taum_channeln_interrupt

タイマ割り込み（INTTMmn）の発生に伴う処理を行います。

r_taum_channeln_higher8bits_
タイマ割り込み（INTTMmnH）の発生に伴う処理を行います。
interrupt※ 色塗り箇所は、サンプルプログラムで使用しているAPIを意味します。
※ m はユニット番号を、n はチャネル番号を意味します。
© 2014 Renesas System Design Co., Ltd.

48

CS+ コード生成が出力するAPI関数（周辺機能）
 タイマ・アレイ・ユニットの使用例
タイマ割り込み（INTTMmn）の発生に伴う処理

リセット

スタートアップ

r_taum_channeln_interrupt

API関数（共通）のフロー(42ページ)

hdwinit();

ユーザコードユーザコードチャネルnのカウントを開始

・・・

R_TAUm_Channel
n_Startend
R_TAUm_Channel
n_Stopチャネルnのカウントを終了※ m はユニット番号を、n はチャネル番号を意味します。

© 2014 Renesas System Design Co., Ltd.

49

CS+ コード生成が出力するAPI関数（周辺機能）
 シリアル・アレイ・ユニット API関数一覧（1/2）
ファイル名
r_cg_serial.c

API関数名R_SAUm_Create
R_SAUm_Set_PowerOff
R_SAUm_Set_SnoozeOn
R_SAUm_Set_SnoozeOff
R_UARTn_Create
R_UARTn_Start
R_UARTn_Stop
R_UARTn_Send
R_UARTn_Receive
R_CSImn_Create
R_CSImn_Start
R_CSImn_Stop
R_CSImn_Send
R_CSImn_Receive
R_CSImn_Send_Receive
R_IICmn_Create
R_IICmn_StartCondition
R_IICmn_StopCondition
R_IICmn_Stop
R_IICmn_Master_Send
R_IICmn_Master_Receive© 2014 Renesas System Design Co., Ltd.

機能概要
シリアル・アレイ・ユニット，およびシリアル・インタフェースの機能を制御するうえで必要となる初期化処理を行います。
シリアル・アレイ・ユニットに対するクロック供給を停止します。
STOPモードからSNOOZEモードへの切り替えを許可します。
STOPモードからSNOOZEモードへの切り替えを禁止します。
シリアル・インタフェース（UART）用チャネルの初期化処理を行います。
UART通信を待機状態にします。
UART通信を終了します。
データのUART送信を開始します。
データのUART受信を開始します。
シリアル・インタフェース（CSI）用チャネルの初期化処理を行います。
CSI通信を待機状態にします。
CSI通信を終了します。
データのCSI送信を開始します。
データのCSI受信を開始します。
データのCSI送受信を開始します。
シリアル・インタフェース（簡易IIC）用チャネルの初期化処理を行います。
スタート・コンディションを発生させます。
ストップ・コンディションを発生させます。
簡易IIC通信を終了します。
簡易IICマスタ送信を開始します。
簡易IICマスタ受信を開始します。
※ 色塗り箇所は、サンプルプログラムで使用しているAPIを意味します。
※ m はユニット番号を、n はチャネル番号を意味します。
50

CS+ コード生成が出力するAPI関数（周辺機能）
 シリアル・アレイ・ユニット API関数一覧（2/2）
ファイル名
API関数名
r_cg_serial_user.c R_SAUm_Create_UserInit

機能概要
シリアル・アレイ・ユニット，およびシリアル・インタフェースに関する
ユーザ独自の初期化処理を行います。
UART送信完了割り込み（INTSTn）の発生に伴う処理を行います。
r_uartn_interrupt_send
UART受信完了割り込み（INTSRn）の発生に伴う処理を行います。
r_uartn_interrupt_receive
受信エラー割り込み（INTSREn）の発生に伴う処理を行います。
r_uartn_interrupt_error
r_uartn_callback_sendend UART送信完了割り込み（INTSTn）の発生に伴う処理を行います。
r_uartn_callback_receiveend UART受信完了割り込み（INTSRn）の発生に伴う処理を行います。
UART受信エラー割り込み（INTSREn）の発生に伴う処理を行います。
r_uartn_callback_error
r_uartn_callback_softwareov
オーバラン・エラーの検出に伴う処理を行います。
errun
CSI通信完了割り込み（INTCSImn）の発生に伴う処理を行います。
r_csimn_interrupt
r_csimn_callback_sendend CSI送信完了割り込み（INTCSImn）の発生に伴う処理を行います。
r_csimn_callback_receiveen
CSI受信完了割り込み（INTCSImn）の発生に伴う処理を行います。
d
CSI受信エラー割り込み（INTSREn）の発生に伴う処理を行います。
r_csimn_callback_error
簡易IIC通信完了割り込み（INTIICmn）の発生に伴う処理を行います。
r_iicmn_interrupt
r_iicmn_callback_master_sen
簡易IICマスタ送信完了割り込み（INTIICmn）の発生に伴う処理を行います。
dend
r_iicmn_callback_master_rec
簡易IICマスタ受信完了割り込み（INTIICmn）の発生に伴う処理を行います。
eiveendr_iicmn_callback_master_err
パリティ・エラー（ACKエラー）の検出に伴う処理を行います。
or※ 色塗り箇所は、サンプルプログラムで使用しているAPIを意味します。
※ m はユニット番号を、n はチャネル番号を意味します。

© 2014 Renesas System Design Co., Ltd.

51

CS+ コード生成が出力するAPI関数（周辺機能）
 シリアル・アレイ・ユニット(シリアル・インタフェース（UART）受信)の使用例
r_uartn_interrupt_
receive
UART受信完了割り込み（INTSRn）の発生に伴う処理

リセット

スタートアップ

API関数（共通）のフロー(42ページ)

hdwinit();

ユーザコード・・・

ユーザコードR_UARTn_Receive( uint8_t * const rx_buf,
uint16_t rx_num );データのUART受信を開始。
実際のUART受信は，
本API関数の呼び出し後，
R_UARTn_Startを呼び出すことにより開始されます。

r_uartn_callback_receiveend

r_uartn_interrupt_receive のコールバックルーチン(指定された数のデータ受信が完了した際の処理)

R_UARTn_Start

・・・

UART通信を待機状態にします。
（初回受信時のみ）※ m はユニット番号を、n はチャネル番号を意味します。
© 2014 Renesas System Design Co., Ltd.

52

CS+ コード生成が出力するAPI関数（周辺機能）
 シリアル・アレイ・ユニット(シリアル・インタフェース（UART）送信)の使用例
r_uartn_interrupt_
send
UART送信完了割り込み（INTSTn）の発生に伴う処理

リセット

スタートアップ

API関数（共通）のフロー(42ページ)

ユーザコードユーザコード・・・

hdwinit();

UART通信を待機状態に（初回送信時のみ）

r_uartn_callback_sendend

R_UARTn_Start

・・・

R_UARTn_Send( uint8_t * const tx_buf,
uint16_t tx_num );データのUART送信を開始。
UART送信を行う際には，本API関数の呼び出し以前に
R_UARTn_Startを呼び出す必要があります。

r_uartn_interrupt_send のコールバックルーチン(指定された数のデータ送信が完了した際の処理)※ m はユニット番号を、n はチャネル番号を意味します。
© 2014 Renesas System Design Co., Ltd.

53

CS+ コード生成が出力するAPI関数（周辺機能）
 シリアル・アレイ・ユニット(シリアル・インタフェース（UART）送受信)使用例
リセット

スタートアップ

ユーザコード受信完了待ちhdwinit();

SRMKnビット← 1
SREMKnビット← 1

ユーザコードR_UARTn_Receive1

API関数（共通）のフロー(42ページ)

受信割り込み禁止
送信

R_UARTn_Send

受信
送信完了？

R_UARTn_StartNOYES
R_UARTn_Receive

受信1※ m はユニット番号を、n はチャネル番号を意味します。
※ エラー発生時のフローは記載していません。
© 2014 Renesas System Design Co., Ltd.

SRMKnビット← 0
SREMKnビット← 054

受信割り込み許可CS+ サンプルプログラムのフロー(1/9)[r_main.c]

リセットSW
押下？
YES

リセット

[r_systeminit.c]

eventcheck
NO

変数初期化
initvalue

hdwinit();

タイマ停止(PWM )R_TAU0_Channel2_Stop[r_main.c]

R_MAIN_UserInit

LED消灯
変数初期化
initvalue

メニュー表示menudisp

ハードウェア初期化
inithard

イベントフラグクリア

メニュー表示menudisp

SW3押下？
YES
ターミナル表示
termdisp

イベント発生チェック
eventcheck

ターミナルにメニュー表示する1© 2014 Renesas System Design Co., Ltd.

55

NO

リセットSW押下で変数初期化し、再度機能選択可能状態とする。

CS+ サンプルプログラムのフロー(2/9)
1100msec？

2NO

2msec？
YES

YES

SW1-SW4
押下？

SW1-SW4
押下？
SW1
7セグLED表示データ設定
change_7segled

SW2
A/D変換開始
R_ADC_Start

SW4

SW3

タイマ開始(PWM)
R_TAU0_Channel2_Start

SW1
SW2
7セグLED点灯・桁変更
changelocation_7segled

A/D変換結果
データ変換
イベントフラグクリア(2msecフラグのみ)

7セグLED表示データ設定
change_7segled

イベントフラグクリア（100msecフラグのみ）

END

2© 2014 Renesas System Design Co., Ltd.

NO

56

SW3
SW4

CS+ サンプルプログラムのフロー(3/9)
SW2押下

SW1押下

[r_cg_intc_user.c][r_cg_intc_user.c]

INTP2割り込みハンドラ
r_intc2_interrupt()

INTP1割り込みハンドラ
r_intc1_interrupt()

リセットSW（CPUボード）押下

イベント変数設定済み？
（リセットSW 、SW1-SW4）

YES[r_cg_intc_user.c]NO

イベント変数設定済み？
（リセットSW 、SW1-SW4）

イベント変数設定（SW1押下）gEventflag |= D_EV_INTP1

YES

NO
イベント変数設定（SW2押下）gEventflag |= D_EV_INTP2

INTP0割り込みハンドラ
r_intc0_interrupt()

END

END

END

イベント変数設定（リセットSW押下）
gEventflag |= D_EV_INTP0[r_cg_intc_user.c]

SW3押下

INTP3割り込みハンドラ
r_intc3_interrupt()

イベント変数設定済み？
（リセットSW 、SW1-SW4）

YES

INTP4割り込みハンドラ
r_intc4_interrupt()

NO

イベント変数設定済み？
（リセットSW 、SW1-SW4）

イベント変数設定（SW3押下）gEventflag |= D_EV_INTP3

END© 2014 Renesas System Design Co., Ltd.

SW4押下

[r_cg_intc_user.c]

YES

END

57

NO
イベント変数設定（SW4押下）gEventflag |= D_EV_INTP4

CS+ サンプルプログラムのフロー(4/9)
PWM出力(マスタ)

PWM出力(スレーブ)

INTTM02割り込みハンドラ
r_tau0_channel2_interrupt ()INTTM04割り込みハンドラ
r_tau0_channel4_interrupt ()LED点灯
P6.2 = 0;
P6.3 = 0;

LED消灯
P6.2 = 0;
P6.3 = 1;

END

END

比較用に点灯

PWM制御：
高速で点灯/消灯を繰り返し、点灯しているように見せます。点灯期間の割合が小さくなる（デューティ比が小さくなる）と暗く見えます。
今回のセットでは、周期は20msec以下を推奨します。これ
INTTM02割り込み発生
以上の値とすると点滅して見えます。
また、デューティ比を変化させると、明るさが変化することもINTTM04割り込み発生
確認してみましょう。
（コード生成の設定を変更して、ソースコードを修正します。）
周期：10msec
デューティ比：1％© 2014 Renesas System Design Co., Ltd.

58

CS+ サンプルプログラムのフロー(5/9)
インターバル・タイマ(2msec)

インターバル・タイマ(100msec)

INTTM01割り込みハンドラ
r_tau0_channel1_interrupt ()INTTM00割り込みハンドラ
r_tau0_channel0_interrupt ()イベント変数設定（100msec）
gEventflag |= D_EV_100MSEC

イベント変数設定（2msec）
gEventflag |= D_EV_2MSEC

100msec毎に7セグLEDの表示データを更新する。
処理はメイン関数内

END

END

2msec

2msec

2msec

ダイナミック点灯：
7セグLEDの4つのLEDを1つのみ点灯し、点灯する桁の変更を高速で繰り返すことで、全ての桁を表示しているように見せます。
ポート制御が少なく済みますが、PWM制御と同様、消灯期間がある
ため、表示が暗くなります。

2msec© 2014 Renesas System Design Co., Ltd.

2msec毎に7セグLEDの表示桁を変更する。
（ダイナミック点灯）
処理はメイン関数内59

CS+ サンプルプログラムのフロー(6/9)

INTAD割り込みハンドラ
r_adc_interrupt()

A/D変換完了
100msec毎にイベントが発生するので、A/D変換を実行している。

A/D変換停止
R_ADC_Stop
A/D変換結果読み出し
R_ADC_Get_Result

END

移動平均法：
このサンプルプログラムでは、A/D変換結果値をそのまま出力しています。このようにすると、（装置の微動な振動等のため）細かく値が変動していることがわかると思います。
このような細かな変化をそのまま使用すると、目障りとなる場合があります。そのため、移動平均法
を用いた簡単なフィルタを利用することで不要な細かい変動を取り除くことができます。
ex.
現在のA/D変換結果値をx[n]、1つ前の値をx[n-1]、その前の値をx[n-2]とします。この3つの値を足し合わせ、その値を1/3にし平均を取ります。この値を出力することで、不要な細かい変動を取り除きます。
x[n] + x[n-1] + x[n-2](7セグLEDの表示値) =3© 2014 Renesas System Design Co., Ltd.

60

CS+ サンプルプログラムのフロー(7/9)
1ターミナル表示
termdisp

受信データ
UART1データ受信
R_UART1_Receive()

1バイト受信UART1動作開始
R_UART1_Start()

2

送信完了？
受信完了？

YES

リセットSW
押下？
YES

送信完了？
YES

NO
リセットSW
押下？
YES

リセットSW押下でループを抜ける

END

NO

UART1データ受信
R_UART1_Receive()

受信割り込み許可

受信割り込み禁止

2

1© 2014 Renesas System Design Co., Ltd.

NO

YES

NO

イベントフラグクリア（受信完了フラグのみ）

UART1データ送信
R_UART1_Send()

UART1データ送信
R_UART1_Send()

61

NOCS+ サンプルプログラムのフロー(8/9)
UART1データ受信

INTSR1割り込みハンドラ
r_uart1_interrupt_receive()r_uart1_callback_receiveend();

受信データ読み出し

受信エラーフラグクリア

設定データ数以内？

UART1受信完了処理

NO

END

YES
受信データ格納
ポインタとカウンタ更新

設定データ完了？

NOYES
UART1受信完了処理
r_uart1_callback_receiveend();

END© 2014 Renesas System Design Co., Ltd.

62

CS+ サンプルプログラムのフロー(9/9)
UART1データ送信
INTST1割り込みハンドラ
r_uart1_interrupt_send()

残データあり？

UART1送信完了処理
r_uart1_callback_sendend();NO

送信完了フラグ設定

YES
データ送信

UART1送信完了処理
r_uart1_callback_sendend();

ポインタとカウンタ更新

END© 2014 Renesas System Design Co., Ltd.

63

END

① 「ビルド・プロジェクト」を選択

CS+ ビルド② 出力パネルには、ビルド終了のメッセージが表示される© 2014 Renesas System Design Co., Ltd.

64

② RL78 E1(Serial)のプロパティを開く

CS+ デバッグツール設定③ メイン・クロックは20MHz④
エミュレータから電源を供給① 使用するデバッグ・ツール「RL78_E1(Serial)」を選択

⑥

⑤
タブを変更

「はい」にするとプログラム実行中
でも変数が見えるようになる

標準と異なるオプションを設定した場合、そのプロパティは太字表示されます。
© 2014 Renesas System Design Co., Ltd.

65

CS+ デバッグ・ツールへダウンロード①
ビルド&デバッグ・ツールへダウンロード
を選択する②
出力パネルには、ビルド終了のメッセージが表示© 2014 Renesas System Design Co., Ltd.

66

CS+ プログラム実行②
押下します。
（CPUリセット後、プログラム実行します）①
Teratermを起動し、シリアル接続設定をします。

④
ターミナルにメニュー表示されます③
ステータスが実行中になります© 2014 Renesas System Design Co., Ltd.

67

CS+ プログラム実行(サンプルプログラム動作確認)
SW2押下：
ポテンションメータで設定した値のA/D変換値(0～1023)が7セグLEDに表示されます。

SW1押下：
7セグLEDに0から9の数字と．(ドット)が表示されます。

SW4押下：PWMで設定した輝度でLED(P63)が点灯します。
(LED(P62)は比較用に点灯します)

CPUボードのSW1押下：
リセット状態に戻ります。
1
0
OSC
2

RL78
/G13

VDD
SW
1
LED
3

CN31
GN
D

1
2

P123
XT1
XT2
P124

3
2
0 P121 0
P122
EVDD
OSC
1
X1
X2

Program

OCD/Flas
h

3
4
9
CN
0
LED
1
P62
1
P63
LED
21
3

SS-77182 JAPANQB-R5F100LETB(e)
CN2 1
3
2
2
0
0
0
1

GN
D

© 2014 Renesas System Design Co., Ltd.

4
3
0
9

SW3押下：
PCでキー入力したデータをターミナルに表示します。(コールバック)68おつかれさまでした。

© 2014 Renesas System Design Co., Ltd.

69

ルネサス システムデザイン株式会社© 2014 Renesas System Design Co., Ltd.