• 検索結果がありません。

アプリケーションノート AS-E402サンプルプログラム

N/A
N/A
Protected

Academic year: 2021

シェア "アプリケーションノート AS-E402サンプルプログラム"

Copied!
12
0
0

読み込み中.... (全文を見る)

全文

(1)

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

スイッチを押すごとに点灯、消灯する 一定時間間隔で点滅する

(2)

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 サンプルプログラムの構成

(3)

表 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

(4)

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 */

(5)

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>

(6)

#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(); } ~ 中略 ~

(7)

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」ボタンをクリックして既存のプロジェクトを開く

(8)

 引き続きデバッグ・ツールの設定を確認します。「RX E1(JTAG)(デバッグ・ツール)」のプロパティの「接続用設定」 のところで、「メイン・クロック周波数[MHz]」の項目が「12.000」になっていることを確認してください(図 6-3)。 図 6-3 メイン・クロック周波数の設定を確認 「メイン・クロック周波数[MHz]」の項目が「12.000」となっていることを確認 図 6-2 デバッグ・ツールの設定 「RX E1(JTAG)」を選択

(9)

 次に「デバッグ・ツール設定」タブをクリックし、「動作周波数[MHz]」の設定が「96.000」になっていること を確認します(図 6-4)。  ソースファイルを開く場合は、プロジェクト・ツリーで開きたいファイルのファイル名をダブルクリックします(図 6-5)。 図 6-4 動作周波数の設定を確認 「動作周波数[MHz]」の項目が 「96.000」となっていることを確認 「デバッグ・ツール設定」の タブをクリック 図 6-5 動作周波数の設定を確認 ファイル名をダブルクリック

(10)

 プログラムのデバッグを開始するには「ビルド&デバッグ・ツールへダウンロード」ボタンをクリックします。こ のとき、AS-E402 に電源が入っていることを確認してください(図 6-6)。

 プログラムを実行するには「実行」ボタンをクリックします(図 6-7)。

 プログラムが実行されると、AS-E402 の LED3 と LED4 が点滅を始めます。最初のうちは二つ同時に点滅してい

ビルド&デバッグ・ツールへダウンロードボタンをクリック

図 6-6 デバッグを開始する

図 6-7 プログラムを実行する

(11)

ますが、すばらくすると徐々に点滅のタイミングがずれてきます。これは点滅の時間間隔を計測しているクロックが 異なるためです。押ボタンスイッチ SW1 を押すごとに LED1 が、SW2 を押すごとに LED2 が、それぞれ点灯、消 灯します。  プログラムを停止する場合は「停止」ボタンをクリックします(図 6-8)。  デバッグを終了する場合は、「デバッグ・ツールから切断」ボタンをクリックします(図 6-9)。 図 6-8 プログラムを停止する 停止ボタンをクリック デバッグ・ツールから切断ボタンをクリック 図 6-9 デバッグ ・ ツールから切断

(12)

Copyright© 2013 Sunhayato Corp. 本資料について 本資料は、電子工作や電子回路、パーソナルコンピュータ の操作について一般的な知識をお持ちの方を対象にしてい ます。 本資料を元に操作するには、ルネサス エレクトロニクス社 製 RX63N マイコンについての知識や開発環境などが必要 です。 Microsoft®、Windows® は米国 Microsoft 社の米国および その他の国における登録商標です。 その他、記載されている製品名は各社の商標または登録商 標です。 本資料のご利用にあたって 本資料に掲載している内容は、お客様が用途に応じた適切な 製品をご購入頂くことを目的としています。その使用によ り当社及び第三者の知的財産権その他の権利に対する保証、 又は実施権の許諾を意味するものではありません。また、 権利の侵害に関して当社は責任を負いません。 本資料に記載した情報を流用する場合は、お客様のシステ ム全体で充分評価し適用可能かご判断願います。当社では 適用可能判断についての責任は負いません。

本資料に記載してある内容は、一般的な電子機器(学習教 材、事務機器、計測機器、パーソナル機器、コンピュータ 機器など)に使用されることを目的としています。高い品 質や信頼性が要求され、故障や誤作動が直接人命を脅かし たり人体に危害を及ぼす恐れのある、医療、軍事、航空宇宙、 原子力制御、運輸、移動体、各種安全装置などの機器への 使用は意図も保証もしておりません。 本資料の一部、又は全部を当社の承諾なしで、いかなる形 でも転載又は複製されることは堅くお断りします。 全ての情報は本資料発行時点のものであり、当社は予告な しに本資料に記載した内容を変更することがあります。 本資料の内容は慎重に制作しておりますが、万一記述誤り によってお客様に損害が生じても当社はその責任を負いま せん。 本資料に関してのお問合せ、その他お気付きの点がござい ましたら、当社ホームページのお問い合わせページ(https:// www.sunhayato.co.jp/inquiry/)よりお問合せください。 本資料に関する最新の情報はサンハヤト株式会社ホーム ページ(http://www.sunhayato.co.jp/)に掲載しております。

図 6-6 デバッグを開始する

参照

関連したドキュメント

まずフォンノイマン環は,普通とは異なる「長さ」を持っています. (知っている人に向け て書けば, B

◆Smart アレイ E208 / P408 / P816 コントローラーは、ドライブ単位で RAID モードと HBA モードを自動選択し、コントローラー内で混在可能です。.. RAID

・Microsoft® SQL Server® 2019 Client Access License (10 User)ライセンス証書 オープン価格. オープン価格 Microsoft SQL

本装置は OS のブート方法として、Secure Boot をサポートしています。 Secure Boot とは、UEFI Boot

Bipartite maps (also called hypermaps, or dessins d’enfants ) : vertices are either black or white, and monochromatic edges

From Corollary 4.18, the algebras of the operad within any symmetric monoidal cat- egory admit a canonical description in terms of this new 2-monad, which in [31] enables

ESMPRO/ServerAgent for GuestOS Ver1.3(Windows/Linux) 1 ライセンス Windows / Linux のゲスト OS 上で動作するゲスト OS 監視 Agent ソフトウェア製品. UL1657-302

アンチウイルスソフトウェアが動作している場合、LTO や RDX、HDD 等へのバックアップ性能が大幅に低下することがあります。Windows Server 2016,