GR-SAKURA 用拡張ボード
AS-E402 サンプルプログラム
1.概要
このアプリケーションノートでは、GR-SAKURA マイコンボード用の拡張ボードである AS-E402 のサンプルプ ログラムについて解説します。 サンプルプログラムはルネサス エレクトロニクス社製の統合開発環境「CubeSuite+」で作成します。2.用意するもの
ここで紹介するサンプルプログラムを動作させるには、AS-E402 以外に以下のものが必要です。 GR-SAKURA マイコンボード(すべての拡張コネクタ、E1 用コネクタ、DC ジャックが実装してあるもの) GR-SAKURA 用 AC アダプタ オンチップデバッギングエミュレータ E1 統合開発環境「CubeSuite+(V2.01.00)」3.サンプルプログラムの動作
AS-E402 に搭載されている LED と押ボタンスイッチを使ったプログラムの作成例を紹介します。押ボタンスイッチ SW1 を押すごとに LED1 が、SW2 を押すごとに LED2 が点灯、消灯します。また、LED3 と LED4 が 1 秒間隔で点滅します。押ボタンスイッチ SW1、SW2 は外部割り込み機能を使って、スイッチが押された ことを検知します(図 3-1)。 ・ ・ ・ ・ 図 3-1 サンプルプログラムの動作 Contrast203 TXS0108E TSSOP-20 LM75AIM SOP-8 74AHC00 TSSOP-14 TB6617FNG TSSOP-16 ADM3202 TSSOP-16 U4 SW3 CN6 CN3 CN1 S V G RESET PWR SW1 CN4 VR1 LED1 LED2 LED3 LED4 SW2 JP1 5V 3.3V 1 20 CN5 1 20
128×64 Dots
スイッチを押すごとに点灯、消灯する 一定時間間隔で点滅する4.サンプルプログラムの構成
あらかじめ弊社ホームページからサンプルプログラムをダウンロード、解凍しておきます。ここではダウンロード したファイルは以下のフォルダに解凍することとします。 test01 プロジェクトのフォルダ内のファイル構成は図 4-1 のようになっています。 この中で、CubeSuite+ によって自動生成されるスタートアップルーチンは表 4-1 のような内容のプログラムになっ ています。 表 4-1 スタートアップルーチン ファイル名 内容 resetprg.c 初期設定ルーチン(リセットベクタ関数) intprg.c ベクタ関数の定義 vecttbl.c 固定ベクタテーブル dbsct.c セクションの初期化処理(テーブル) lowsrc.c 低水準インタフェースルーチン(C 言語部分) lowlvl.src 低水準インタフェースルーチン(アセンブリ言語部分) sbrk.c 低水準インタフェースルーチン(sbrk 関数) typedefine.h 型定義ヘッダ vect.h ベクタ関数のヘッダ stacksct.h スタックサイズの設定 lowsrc.h 低水準インタフェースルーチン(C 言語ヘッダ) sbrk.h 低水準インタフェースルーチン(sbrk 関数のヘッダ) ユーザーが作成するプログラムの main 関数はプロジェクト名と同じ名前のソースファイル(ここでは test01.c) に記述します。それ以外に関数を記述したファイルがあればプロジェクトに追加します。このサンプルプログラムで は表 4-2 に示すファイルを追加しています。 プロジェクトフォルダ プロジェクト関連ファイル (プロジェクト作成時に生成される) プログラムソースファイル、各定義ファイル (ユーザが作成、プロジェクトに登録する) スタートアッププルーチンソースファイル、各定義ファイル (プロジェクト作成時に生成される) ビルド結果ファイルが格納されるフォルダ (プロジェクト作成時に生成される) プロジェクトスペース 図 4-1 サンプルプログラムの構成表 4-2 追加したソースファイル ファイル名 内容 r_init_clock.c 動作クロックの初期設定 r_init_non_existent_port.c 未使用ポートの設定 r_init_stop_module.c 未使用モジュールの停止 r_init_clock.h r_init_clock.c の定義ファイル r_init_non_existent_port.h r_init_non_existent_port.c の定義ファイル r_init_stop_module.h r_init_stop_module.c の定義ファイル 今回追加したファイルはルネサス エレクトロニクス社が発行しているアプリケーションノート「RX63N グループ、 RX631 グループ アプリケーションノート 初期設定例」で解説しているサンプルプログラムを流用したものです。 これらのファイルについての詳しい情報は前述のアプリケーションノートを参照してください。
5.サンプルプログラムの内容
main 関数は test01.c に記述しています(リスト 5-1)。main 関数では使用するポートやタイマー、割り込みの初 期設定を行っています。初期設定の終了後は無限ループになっており、割り込みが発生するのを待ちます。 このプログラムでは全部で 4 つの割り込み処理があります。押ボタンスイッチ SW1 と SW2 の信号入力割り込み とタイマー CMT0 のコンペアマッチ割り込み(約 0.5 秒ごと)、リアルタイムクロックの 0.5 秒ごとの割り込みです。 割り込みが発生すると該当する割り込み処理関数を呼び出します(リスト 5-2)。それぞれの割り込み関数では対応 する LED の出力信号を反転させる処理を行う関数を呼び出しています(表 5-1)。 表 5-1 割り込み要因と対応する関数、LED 割り込み要因 呼び出される割り込み関数 割り込み処理を行う関数 対応する LED 押ボタンスイッチ SW1 の押下 void Excep_ICU_IRQ15(void) void IRQ15IntFunc(void) LED1 押ボタンスイッチ SW2 の押下 void Excep_ICU_IRQ7(void) void IRQ7IntFunc(void) LED2 タイマー CMT0 のコンペアマッチ(約 0.5 秒ごと)void Excep_CMT0_CMI0(void) void Cmt0IntFunc(void) LED3 リアルタイムクロックの 0.5 秒経過 void Excep_RTC_PRD(void) void RTCIntFunc(void) LED4
リスト 5-1 test01.c
/***********************************************************************/ /* */ /* FILE :Main.c or Main.cpp */ /* DATE :Tue, Oct 31, 2006 */ /* DESCRIPTION :Main Program */ /* CPU TYPE : */ /* */ /* NOTE:THIS IS A TYPICAL EXAMPLE. */ /* */ /***********************************************************************/ //#include "typedefine.h"
#ifdef __cplusplus
//#include <ios> // Remove the comment when you use ios //_SINT ios_base::Init::init_cnt; // Remove the comment when you use ios #endif #include "iodefine.h" #include <machine.h> #include "r_init_clock.h" #include "r_init_non_existent_port.h" #include "r_init_stop_module.h" void main(void); void IRQ15IntFunc(void); void IRQ7IntFunc(void); void Cmt0IntFunc(void); void RTCIntFunc(void); #ifdef __cplusplus
extern "C" { void abort(void); } #endif void main(void) {
clrpsw_i(); /* Disable maskable interrupts */
R_INIT_StopModule(); /* Stopping the peripherals which start operations */ R_INIT_NonExistentPort(); /* Initialization of the non-existent ports */
R_INIT_Clock(); /* Initialization of the clock */ setpsw_i(); /* Enable maskable interrupts */
SYSTEM.PRCR.WORD = 0xA502; /* Register write enable */
/* PORT init */
PORTE.PDR.BYTE = 0xE0; /* set portE5,E6,E7(output) */ PORTE.DSCR.BYTE = 0xE0; /* drive high */
PORTE.PODR.BYTE = 0x20; /* LED2 off, LED3,4 on */ PORTJ.PDR.BYTE = 0x08; /* set portJ3(output) */ PORTJ.PODR.BYTE = 0x08; /* LED1 off */
/* CMT0 init */
MSTP(CMT0) = 0; /* set mstpcra(CMT0 enable) */ IEN(CMT0,CMI0) = 0; /* Disable Interrupt */
IPR(CMT0,CMI0) =0x07; /* Priority set */
CMT0.CMCR.WORD = 0x0043; /* PCLK(48MHz) / 512 = 93.75kHz */ CMT0.CMCNT = 0x0000; /* Timer Counter clear */
CMT0.CMCOR = 0xB71B; /* set cmcor(compare match =500ms) */ CMT.CMSTR0.WORD = 0x0001; /* CMT0 start */
IR(CMT0,CMI0) = 0; /* Interrupt flag clear */ IEN(CMT0,CMI0) = 1; /* Enable Interrupt */ /* RTC init */
IEN(RTC,PRD) = 0; /* Disable Interrupt */ RTC.RCR2.BIT.START = 0; /* RTC stop */
while (0 != RTC.RCR2.BIT.START) /* wait for stop */ {
/* Confirm that the written value can be read correctly. */ }
IPR(RTC,PRD) =0x07; /* Priority set */ RTC.RSECCNT.BYTE = 0; /* sec counter clear */
RTC.RCR1.BYTE = 0xD4; /* 1/2sec periodic interrupt */ RTC.RCR2.BIT.START = 1; /* RTC start */
while (1 != RTC.RCR2.BIT.START) /* wait for start */ {
/* Confirm that the written value can be read correctly. */ }
IR(RTC,PRD) = 0; /* Interrupt flag clear */ IEN(RTC,PRD) = 1; /* Enable Interrupt */ /* ICU init */
IEN(ICU,IRQ15) = 0; /* Disable Interrupt */ IEN(ICU,IRQ7) = 0; /* Disable Interrupt */ ICU.IRQFLTE1.BIT.FLTEN15 = 0; /* Disable digital filter */ ICU.IRQFLTE0.BIT.FLTEN7 = 0; /* Disable digital filter */ ICU.IRQFLTC1.BIT.FCLKSEL15 = 0x3; /* Digital filter clock select */ ICU.IRQFLTC0.BIT.FCLKSEL7 = 0x3; /* Digital filter clock select */ MPC.PWPR.BIT.B0WI = 0; /* PFSWE Write Enable */
MPC.PWPR.BIT.PFSWE = 1; /* PFS Write Enable */ MPC.P07PFS.BYTE = 0x40; /* P07 for IRQ15 */ MPC.P17PFS.BYTE = 0x40; /* P17 for IRQ7 */ MPC.PWPR.BIT.PFSWE = 0; /* PFS Write Disable */ MPC.PWPR.BIT.B0WI = 1; /* PFSWE Write Disable */ PORT0.PMR.BIT.B7 = 1; /* Port mode:IRQ15 */ PORT1.PMR.BIT.B7 = 1; /* Port mode:IRQ7 */
ICU.IRQCR[15].BYTE = 0x08; /* Falling Edge Interrupt */ ICU.IRQCR[7].BYTE = 0x08; /* Falling Edge Interrupt */ IPR(ICU,IRQ15) =0x07; /* Priority set */
IR(ICU,IRQ15) = 0; /* Interrupt flag clear */ IR(ICU,IRQ7) = 0; /* Interrupt flag clear */ ICU.IRQFLTE1.BIT.FLTEN15 = 1; /* Enable digital filter */ ICU.IRQFLTE0.BIT.FLTEN7 = 1; /* Enable digital filter */ IEN(ICU,IRQ15) = 1; /* Enable Interrupt */ IEN(ICU,IRQ7) = 1; /* Enable Interrupt */ while(1) { ; } } void IRQ15IntFunc(void) /* SW1 */ {
PORTJ.PODR.BIT.B3 = ~PORTJ.PIDR.BIT.B3; /* LED1 */ }
void IRQ7IntFunc(void) /* SW2 */ {
PORTE.PODR.BIT.B5 = ~PORTE.PIDR.BIT.B5; /* LED2 */ }
void Cmt0IntFunc(void) /* CMT0 */ {
PORTE.PODR.BIT.B6 = ~PORTE.PIDR.BIT.B6; /* LED3 */ }
void RTCIntFunc(void) /* RTC */ {
PORTE.PODR.BIT.B7 = ~PORTE.PIDR.BIT.B7; /* LED4 */ } #ifdef __cplusplus void abort(void) { } #endif /****************************************************************************** Option-Setting Memory ******************************************************************************/ #pragma address OFS1_REG = 0xFFFFFF88 /* OFS1 register */
const unsigned long OFS1_REG = 0xFFFFFFFF;
#pragma address OFS0_REG = 0xFFFFFF8C /* OFS0 register */ const unsigned long OFS0_REG = 0xFFFFFFFF;
リスト 5-2 intprg.c(抜粋)
/************************************************************************ *
* Device : RX/RX600/RX63N,RX631 *
* File Name : intprg.c *
* Abstract : Interrupt Program. *
* History : 0.10 (2011-02-21) [Hardware Manual Revision : 0.01] * : 1.00 (2012-06-12) [Hardware Manual Revision : 1.00] * : 1.10 (2013-02-18) [Hardware Manual Revision : 1.00] *
* NOTE : THIS IS A TYPICAL EXAMPLE. *
* Copyright (C) 2013 (2011,2012) Renesas Electronics Corporation and * Renesas Solutions Corp. All rights reserved.
*
*********************************************************************/ #include <machine.h>
#pragma section IntPRG
extern void IRQ15IntFunc(void); extern void IRQ7IntFunc(void); extern void Cmt0IntFunc(void); extern void RTCIntFunc(void); ~ 中略 ~ // CMT0 CMI0 void Excep_CMT0_CMI0(void){ Cmt0IntFunc(); } ~ 中略 ~ // ICU IRQ7 void Excep_ICU_IRQ7(void){ IRQ7IntFunc(); } ~ 中略 ~ // ICU IRQ15 void Excep_ICU_IRQ15(void){ IRQ15IntFunc(); } ~ 中略 ~ // RTC PRD void Excep_RTC_PRD(void){ RTCIntFunc(); } ~ 中略 ~
6.サンプルプログラムを開く
あらかじめ弊社ホームページからサンプルプログラムをダウンロード、解凍しておきます。ここではダウンロード したファイルは以下のフォルダに解凍することとします。
◎サンプルプログラムの解凍先フォルダ:C:¥WorkSpace¥RX63N¥test01
CubeSuite+ を起動します。Windows のスタートメニューより 「 すべてのプログラム 」 →「Renesas Electronics CubeSuite+」→「CubeSuite+」をクリックしてください。 CubeSuite+ が起動したら、「既存のプロジェクトを開く」のところにある「GO」ボタンをクリックします(図 6-1)。 「プロジェクトを開く」ダイアログが開きますので、先ほどサンプルプログラムを解凍したフォルダの「test01. mtpj」を選択します。 プロジェクトが開いたら、デバッグツールの設定を確認します。ウィンドウの左側の「プロジェクト・ツリー・パ ネル」で「RX E1(JTAG)(デバッグ・ツール)」が選択されていることを確認します。もし、「RX E1(JTAG)(デバッ グ・ツール)」が選択されていない場合は、現在のデバッグ・ツール(例えば「RX シミュレータ(デバッグ・ツール)」 など)を選択し、右クリックして「使用するデバッグ・ツール」−「RX E1(JTAG)(デバッグ・ツール)」を選択 してください(図 6-2)。 図 6-1 既存のプロジェクトを開く 「GO」ボタンをクリックして既存のプロジェクトを開く
引き続きデバッグ・ツールの設定を確認します。「RX E1(JTAG)(デバッグ・ツール)」のプロパティの「接続用設定」 のところで、「メイン・クロック周波数[MHz]」の項目が「12.000」になっていることを確認してください(図 6-3)。 図 6-3 メイン・クロック周波数の設定を確認 「メイン・クロック周波数[MHz]」の項目が「12.000」となっていることを確認 図 6-2 デバッグ・ツールの設定 「RX E1(JTAG)」を選択
次に「デバッグ・ツール設定」タブをクリックし、「動作周波数[MHz]」の設定が「96.000」になっていること を確認します(図 6-4)。 ソースファイルを開く場合は、プロジェクト・ツリーで開きたいファイルのファイル名をダブルクリックします(図 6-5)。 図 6-4 動作周波数の設定を確認 「動作周波数[MHz]」の項目が 「96.000」となっていることを確認 「デバッグ・ツール設定」の タブをクリック 図 6-5 動作周波数の設定を確認 ファイル名をダブルクリック
プログラムのデバッグを開始するには「ビルド&デバッグ・ツールへダウンロード」ボタンをクリックします。こ のとき、AS-E402 に電源が入っていることを確認してください(図 6-6)。
プログラムを実行するには「実行」ボタンをクリックします(図 6-7)。
プログラムが実行されると、AS-E402 の LED3 と LED4 が点滅を始めます。最初のうちは二つ同時に点滅してい
ビルド&デバッグ・ツールへダウンロードボタンをクリック
図 6-6 デバッグを開始する
図 6-7 プログラムを実行する
ますが、すばらくすると徐々に点滅のタイミングがずれてきます。これは点滅の時間間隔を計測しているクロックが 異なるためです。押ボタンスイッチ SW1 を押すごとに LED1 が、SW2 を押すごとに LED2 が、それぞれ点灯、消 灯します。 プログラムを停止する場合は「停止」ボタンをクリックします(図 6-8)。 デバッグを終了する場合は、「デバッグ・ツールから切断」ボタンをクリックします(図 6-9)。 図 6-8 プログラムを停止する 停止ボタンをクリック デバッグ・ツールから切断ボタンをクリック 図 6-9 デバッグ ・ ツールから切断
Copyright© 2013 Sunhayato Corp. 本資料について 本資料は、電子工作や電子回路、パーソナルコンピュータ の操作について一般的な知識をお持ちの方を対象にしてい ます。 本資料を元に操作するには、ルネサス エレクトロニクス社 製 RX63N マイコンについての知識や開発環境などが必要 です。 Microsoft®、Windows® は米国 Microsoft 社の米国および その他の国における登録商標です。 その他、記載されている製品名は各社の商標または登録商 標です。 本資料のご利用にあたって 本資料に掲載している内容は、お客様が用途に応じた適切な 製品をご購入頂くことを目的としています。その使用によ り当社及び第三者の知的財産権その他の権利に対する保証、 又は実施権の許諾を意味するものではありません。また、 権利の侵害に関して当社は責任を負いません。 本資料に記載した情報を流用する場合は、お客様のシステ ム全体で充分評価し適用可能かご判断願います。当社では 適用可能判断についての責任は負いません。