19
1 GCC Developer Liteマニュアル 1. はじめに GNUツールはフリーソフトウェアで尚且つ本格的なプログラミングおよび開発が行える半面、コン パイラ・アセンブラ・リンカ・デバッガ等が個別のアプリケーションであり、ソースプログラムを編集する にもエディタを別途用意する必要があります。また、GNUのツールはLinuxの知識がなくては利用が 困難で、詳細ドキュメントが英語であるという点も敷居を高くしているといった状況です。 ここで使用するGNUツールはMicrosoft® Windows上で利用でき、組み込みシステム向けの開発 環境としてパッケージングされたものですが、GNUツールがWindowsで利用できるようになったまで で一部のツールを除きコマンドラインベースのプログラムには変わりはありません。 そこで、それらのパフォーマンスをできるだけ活用し初心者の方でもその恩恵を受けられるよう作ら れたのがGCC Developer Liteです。GCC Developer LiteGNUツールのそれを意識することなく Windows上で活用するためのヘルパーソフトウェアで、C言語ソースプログラムの編集をメインにコン パイラやデバッガの起動をWindows上から簡単に行えるようになります。また複数種類の組み込み 用マイコン(H8およびSHシリーズ)を自分のロボット制御に利用するにあたり、各種の設定を容易に 切り替えることができる機能を装備しています。 ご使用の前に本マニュアルをよくお読みいただき、正しく使用されますようお願いいたします。 2. ご使用になる前に 2-1. GNU GPL(GNU 一般公有使用許諾契約書) GNUTOOLを使用するにあたり、GNU GPLに従う必要があります。以下に概要を記載します。 <GNU GPL概要> 1 GNU GPLに準拠したプログラムを配布する場合、金銭の授受は認められない 2 GNU GPLに準拠したプログラムを配布する場合、そのソースコードも一緒に添付するか、また は添付しなくても、ユーザ側からソースコードの提示を求められた場合は、すぐにソースコードを 提示すること 3 GNU GPLに準拠したプログラムのソースコードの一部または全部を参考にして新たなプログラ ムを作った場合、そのプログラムはGNU GPLに準拠する形で配布しなければならない 4 GNU GPLに準拠したプログラムを配布する場合、GNU GPLの全文も一緒に添付すること 5 GNU GPLに準拠したプログラムのソースコードを参照し、オリジナルのものを改変してそれを配 布する場合、改変者はプログラム中に、以下の情報を画面またはプリンタ等に表示させるよう にしなければならない a) 改変者・元の著作者の著作権表示 b) そのプログラムが、無保証であること c) 頒布を受ける者も、GNU GPLに従ってプログラムを再頒布できる d) 頒布を受ける者がGNU GPLのコピーを手に入れる方法 GPLCD-Rに全文が記載されていますので、詳細はそちらを参照してください。 2-2. GNUTOOL for Windows ターゲットCPU毎にコンパイル済みのバイナリファイル(実行ファイル)で提供されます。煩雑なコン パイラの再構築作業などは基本的に必要ありません。 弊社より提供しているCD-RにはKPITクミンズインフォシステムズ社のご好意により、日立製H8SHシリーズマイコン用GNUTOOLが収録されています。詳細はwww.kpit.comを参照下さい。 2-3. CD-R 収録ファイルの動作環境 2-3-1. GCC Developer Lite 日本語版のWindows98,98SE,ME,NT4.0,2000,XPが動作するPC/AT互換機(Intel Pentium当以上)にて利用できます。また、フルインストールで約300Mバイトのハードディスク容量を必要とし ます。Windows95には対応していませんWindows2000以降のOSを推奨します。 2-3-2. GNUTOOL for Windows 日本語及び英語版のWindows98,98SE,ME,NT4.0,2000,XP が動作するPC/AT 互換機(Intel Pentium相当以上)で利用できます。Windows95には対応していませんWindows2000以降のOS推奨します。 なお、ルネサステクノロジー製H8/SHシリーズマイコン用に構築されたパッケージがそれぞれ用意 されています。 2-3-3. 各種 CPU GCC 対応ファイル コンパイル作業を行う上で必要なスタートアップルーチン・リンカスクリプトファイル等をH8/3664FH8/3687FH8/3694FSH7045FSH7047FSH7145Fの各CPU( もしくはマイコンボード) 用に準 備しました。 これらのファイルはGCC Developer Liteにて適宜参照されます。 2-3-4. フラッシュライタソフトウェア CPUの内蔵フラッシュROMへプログラムをPCから転送・書き込みを行うツールです。H8/3048FH8/3664FSH7045FSH7145Fに対応しています。 このプログラムはGCC Developer Liteと一緒にインストールされます。

GCC Developer Lite - irie-lab.net · 1 GCC Developer Lite版 マニュアル 1. はじめに GNUツールはフリーソフトウェアで尚且つ本格的なプログラミングおよび開発が行える半面、コン

Embed Size (px)

Citation preview

1

GCC Developer Lite版 マニュアル

1. はじめに GNUツールはフリーソフトウェアで尚且つ本格的なプログラミングおよび開発が行える半面、コン

パイラ・アセンブラ・リンカ・デバッガ等が個別のアプリケーションであり、ソースプログラムを編集する

にもエディタを別途用意する必要があります。また、GNUのツールはLinuxの知識がなくては利用が困難で、詳細ドキュメントが英語であるという点も敷居を高くしているといった状況です。 ここで使用するGNUツールはMicrosoft® Windows上で利用でき、組み込みシステム向けの開発

環境としてパッケージングされたものですが、GNUツールがWindowsで利用できるようになったまでで一部のツールを除きコマンドラインベースのプログラムには変わりはありません。 そこで、それらのパフォーマンスをできるだけ活用し初心者の方でもその恩恵を受けられるよう作ら

れたのがGCC Developer Liteです。GCC Developer LiteはGNUツールのそれを意識することなくWindows上で活用するためのヘルパーソフトウェアで、C言語ソースプログラムの編集をメインにコンパイラやデバッガの起動をWindows上から簡単に行えるようになります。また複数種類の組み込み用マイコン(H8およびSHシリーズ)を自分のロボット制御に利用するにあたり、各種の設定を容易に切り替えることができる機能を装備しています。 ご使用の前に本マニュアルをよくお読みいただき、正しく使用されますようお願いいたします。

2. ご使用になる前に

2-1. GNU GPL(GNU一般公有使用許諾契約書)

GNUTOOLを使用するにあたり、GNU GPLに従う必要があります。以下に概要を記載します。 <GNU GPL概要>

1 GNU GPLに準拠したプログラムを配布する場合、金銭の授受は認められない

2 GNU GPLに準拠したプログラムを配布する場合、そのソースコードも一緒に添付するか、また

は添付しなくても、ユーザ側からソースコードの提示を求められた場合は、すぐにソースコードを

提示すること

3 GNU GPLに準拠したプログラムのソースコードの一部または全部を参考にして新たなプログラ

ムを作った場合、そのプログラムはGNU GPLに準拠する形で配布しなければならない

4 GNU GPLに準拠したプログラムを配布する場合、GNU GPLの全文も一緒に添付すること

5 GNU GPLに準拠したプログラムのソースコードを参照し、オリジナルのものを改変してそれを配

布する場合、改変者はプログラム中に、以下の情報を画面またはプリンタ等に表示させるよう

にしなければならない

a) 改変者・元の著作者の著作権表示

b) そのプログラムが、無保証であること

c) 頒布を受ける者も、GNU GPLに従ってプログラムを再頒布できる

d) 頒布を受ける者がGNU GPLのコピーを手に入れる方法

GPLはCD-Rに全文が記載されていますので、詳細はそちらを参照してください。

2-2. GNUTOOL for Windows ターゲットCPU毎にコンパイル済みのバイナリファイル(実行ファイル)で提供されます。煩雑なコン

パイラの再構築作業などは基本的に必要ありません。 弊社より提供しているCD-RにはKPITクミンズインフォシステムズ社のご好意により、日立製H8と

SHシリーズマイコン用GNUTOOLが収録されています。詳細はwww.kpit.comを参照下さい。

2-3. CD-R収録ファイルの動作環境

2-3-1. GCC Developer Lite 日本語版のWindows98,98SE,ME,NT4.0,2000,XPが動作するPC/AT互換機(Intel Pentium相

当以上)にて利用できます。また、フルインストールで約300Mバイトのハードディスク容量を必要とします。Windows95には対応していません。Windows2000以降のOSを推奨します。

2-3-2. GNUTOOL for Windows 日本語及び英語版のWindows98,98SE,ME,NT4.0,2000,XPが動作するPC/AT互換機(Intel

Pentium相当以上)で利用できます。Windows95には対応していません。Windows2000以降のOSを推奨します。 なお、ルネサステクノロジー製H8/SHシリーズマイコン用に構築されたパッケージがそれぞれ用意

されています。

2-3-3. 各種 CPU用 GCC対応ファイル コンパイル作業を行う上で必要なスタートアップルーチン・リンカスクリプトファイル等をH8/3664F・

H8/3687F・H8/3694F・SH7045F・SH7047F・SH7145Fの各CPU(もしくはマイコンボード)用に準備しました。 これらのファイルはGCC Developer Liteにて適宜参照されます。

2-3-4. フラッシュライタソフトウェア CPUの内蔵フラッシュROMへプログラムをPCから転送・書き込みを行うツールです。H8/3048F・

H8/3664F・SH7045F・SH7145Fに対応しています。 このプログラムはGCC Developer Liteと一緒にインストールされます。

2

2-3-5. SIMPLE TERM Windows上で動作するシリアル通信ポートを使用したターミナルプログラムです。任意のCOM

ポートを任意の通信速度に設定でき、キー入力をそのままCOMポートから送信し、受信されたデータはターミナルウィンドウに表示できます。その他、通信対象となるマイコンに簡易RAM転送プログラムが書き込まれていれば、SIMPLE TERMを使ってプログラムをマイコンの増設RAMにダウンロードする機能も持っています。 このプログラムはGCC Developer Liteと一緒にインストールされます。

2-3-6. HMSE FLASHSimple CPUの内蔵フラッシュROMへプログラムをPCから転送・書き込みを行うルネサステクノロジ製ライ

タソフトウェアです。先のフラッシュライタソフトウェアで対応しているマイコンに加え、多くのマイコンに

対応しており書き込みスピードも高速化されています。 このプログラムはGCC Developer Liteと一緒にインストールされます。

2-3-7. 簡易 RAM転送プログラム BTC050 SH7045Fボード、BTC070 SH7047Fボード、BTC080 SH7145Fボードに各々搭載さ

れる増設RAM上にプログラムを転送させ実行できる環境を実現するのが本簡易RAM転送プログラムです。フラッシュROMの書込み回数を意識することなく繰り返しプログラムを転送・実行できますのでデバッグ効率が上がります。 詳細な使用法は各ターゲットの解説章をご覧下さい。

2-3-8. 各種ドキュメント 日本語訳されたGCCドキュメント、日立ハードウェアマニュアル、その他ドキュメント及びAcrobat

Reader・ノンサポートファイルを収録しました。直接CD-Rを参照するか、ハードディスクにコピーしてご利用ください。

注 意 ● OSのファイルシステムによってはインストールに必要なハードディスク容

量が大幅に異なる場合があります。

2-4. 解説に関して

このマニュアルでは弊社製BTC064 H8/3694Fマイコンボード、BTC065 H8/3687Fマイコンボード、BTC050 SH7045Fマイコンボード、BTC070 SH7047Fマイコンボードを前提とした解説を記述しています。

2-5. サポート

GNUツールの詳細に関しては、Linux関連の書籍を参考にしてください。弊社製マイコンボードとGCC Developer Liteを利用した場合でのご質問等は下記方法にてお受けいたします。

・Eメール: [email protected] ・ホームページの問い合わせフォーム: http://www.besttechnology.co.jp なお、収録ソフトウェアをインストール及び動作させたことによるデータの消失や破損等の責務は

負いかねます。また、GNUTOOL及びライブラリに対するいかなる保証も行いません。

3. インストール 主要ソフトウェアのインストール方法を説明します。CD-Rの構成は下記のとおりです。

CD-R ¥

GDL GCC Developer Lite

(簡易統合環境・フラッシュライタ・ライブラリ・GCCの一括セットアッププログラム)

TIM 各ターゲット用簡易RAM転送プログラム

SMPL 各種ターゲット用サンプルプログラム (LOVO・SH7045F・H8Tiny・UDS・FREEDOM用)

DOC 各種ドキュメント (GCC関連日本語訳・技術資料等)

ETC 各種ファイル

ORIGINAL GCCバイナリパッケージ、ソース等

Renesas HITACHI Micro Systems Europe Ltd.提供フラッシュライタソフトウェア (FDT version 1.5・Flash Simple)

ADOBE Adobe Acrobat Reader 5.05 (PDFファイルを参照するのに必要)

注 意

● CD-ROMドライブによってはCD-Rに書き込まれたデータを参照できな

い場合があります。参照可能なCD-ROMドライブをご利用ください。

3-1. GCC Developer Liteのインストール

GCC Developer Liteのインストーラは、マイコンのプログラミング環境に関する全てのツールが一括で自動インストールできるようになっています。

3-1-1. セットアッププログラムの実行 CD-Rの「GDL」フォルダの中にある「GDLFull?.?.?.?.exe」を実行してください(?はバージョン番

号で、リリース次期に応じて変わります)。

3

上記の画面が現れたら、「はい(Y)」をクリックして、次のステップに移りましょう。 「GCC Developer Liteセットアップウィザードへようこそ」のメッセージをよく読み、インストールの妨げ

とならないよう他の実行中のプログラムを終了しておきます。他のプログラムが実行中でないことを確

認したら、「次へ(N)>」ボタンを押して次のステップに進みます。

3-1-2. ライセンスと追加情報 このセットアッププログラムには、GCC Developer Liteの他にコンパイラであるGCCも一緒にイン

ストールされます。「ライセンスの同意」には頒布のソフトウェアがGNU GPLに従って使用される必要があり、ライセンス内容に同意されたら「はい(Y)」ボタンを押して次のステップに進みます。

「情報」には、このセットアッププログラムの内容が記載されています。こちらも一読されたら、「次へ

(N)>」ボタンを押して次のステップに進みます。

3-1-3. インストール先 インス トール先のフォルダは申し訳あ りませんが変更できません。 「 C:¥Program

Files¥BestTech」配下に全てのツールがインストールされます。

3-1-4. コンポーネントの選択 このセットアッププログラムでは、複数のマイコンに対応した開発ツールを提供しています。そのた

め、コンポーネントの選択は重要です。

4

ご使用のシステムに応じた必要最低限の環境を選択することで、ハードディスクの使用量を抑える

ことができます。ドロップダウンリストからお好みの環境を選択すると、必要なコンポーネントを自動選

択します。また、個別に必要なコンポーネントを選択する事も可能です。 選択したら、「次へ(N)>」ボタンを押して次のステップに進みます。

3-1-5. プログラムグループの選択 Windowsのスタートメニューに登録する際の名称です。特に差し障りなければ、デフォルトのまま

で結構です。「次へ(N)>」ボタンを押して次のステップに進みます。

3-1-6. 追加タスクの選択 ここではインストールされたGCC Developer Liteを起動するアイコンをデスクトップに作成するか

尋ねてきます。必要なければ、チェックを外して「次へ(N)>」ボタンを押して次のステップに進みます。

3-1-7. インストールの準備完了 インストールされる内容がリストアップされます。確認後「インストール」ボタンを押してください。

3-1-8. セットアップ状況 セットアップ作業の進捗はバーで表示されます。途中でキャンセルすることもできます。

5

次のダイアログボックスが現れたら、セットアップは完了です。「終了(F)」を押してください。

3-1-9. インストール後の確認 インストールが完了すると、プログラムグループにGCC Developer Liteへのショートカットが作成さ

れます。各プログラムはこのメニューより起動できます。

3-2. その他のファイル

必要に応じて、その他のファイルは参照もしくはインストールしてください。ハードウェアマニュアル

等はAcrobat Readerで閲覧できるPDFファイルで提供されています。

4. GCC Developer Lite の使い方

4-1. 動作確認

インストールが完了したらプログラムグループから「GCC Developer Lite」のショートカットをクリックしましょう。

6

なお初回起動時のみ初期環境設定を選択するダイアログボックスが現れます。ご利用の環境がわ

かっている場合は表示されるリストから選択して「OK」を押してください。わからない場合は「キャンセル」を押してください。 なお本ドキュメントではGCC Developer Liteを以後GDLと表記します。

4-2. GDL の機能

使用するにあたって最低限必要な部分を紹介します。

4-2-1. メニュー 「ファイル(F)」~「ヘルプ(H)」の8項目のメニューを装備しています。ファイルを開く・保存・編集・コン

パイル・環境設定等の全機能が呼び出させます。

4-2-2. エディタ ウィンドウの上半分がソースプログラムを編集する部分です。Windowsに付属するメモ帳よりは高

機能で、表示(フォント・色等)のカスタマイズも可能です。メニューの「編集(E)」にエディタの主な編集機能が集約されています。 またソースプログラムの行数が増えてきた場合、編集したい部分と参照したい部分が離れてしまい

1画面に収まりきらないことがあります。「ウィンドウ(W)」メニューの「2つに分割(D)」を利用すれば編集画面が上下に2分割されますので、それぞれのウィンドウでひとつのファイルが編集・参照されます。

4-2-3. コンパイラ動作ログ ウィンドウ下半分(白い部分)はソースプログラムをコンパイルした時のコンパイラが出力するメッ

セージを逐次表示します。またコンパイル時にエラーが発生した際、ログの中に編集中のソースプロ

グラムのファイル名と行番号が記載されていた場合は、そのメッセージの行をダブルクリックすること

でエディタのカーソルがその行へジャンプします(タグジャンプ機能)。

4-2-4. ツールバー メニューとエディタの間にツールバーを表示することができます。一部のメニュー機能をボタンにし

たもので、マウスで左クリックするだけでその機能を使用できるので編集や操作の効率が上がります。

「表示(V)」メニュー→「ツールバー(T)」から表示させたいツールバーを選択することもできます。

またメニューバーとツールバーは移動やフローティングも可能です。好みに応じて表示方法や位

置を変更してください。

4-2-5. 外部アプリケーション起動 GDLの持つ機能だけで全ての作業完結できることはまずありません。プログラムのマイコンボード

への転送・シリアル通信ターミナル等は個別のプログラムに頼らざるを得ません。そこでお手持ちの

ツールやドキュメントをGDLに登録して起動・参照することができます(ランチャー機能)。 エクスプローラのダブルクリックで起動や参照ができるファイルであれば、大抵のものは登録できま

す。また簡単なマクロも装備していますので、ソースプログラムに関連した起動方法も選択できます。

登録方法等はヘルプをご覧下さい。なお標準で各ターゲットに対応したフラッシュライタ・SIMPLE TERM・FLASHSimpleが登録済みです。

4-2-6. GCC オプション エディタで編集しているソースプログラムをコンパイラドライバ(GCC)を使ってコンパイルするので

すが、最低限必要な設定は予め行っておかなくてはなりません。GDLでは「ツール(T)」メニュー→「GCCオプション(O)...」にて設定されたものがコンパイル時にGCCへ渡されるようになっており、対象とするCPUや使用方法によって容易に変更できます。 頻繁に複数の環境を切り替えて利用する場合は、GCCオプションの設定ダイアログボックスの一

番上にある「設定リスト」から任意のターゲットを選択することで、簡単にかつ迅速に設定の変更が可

能です。

4-2-7. コンパイル GCCオプションを設定後、編集したソースプログラムを最終的なコードに変換する作業をコンパイ

7

ルと呼んでいます。使用するGCCのサポートによっていくつかのコンパイル方法が選択できます。

4-3. GDLが使用する GCC のオプション

GDLはコンパイル時に次のオプションを使用します。次のオプションと競合しないものであれば、「GCCオプション」の「GCC追加オプション指定」で設定可能です。

gccオプション 要因その他

-g デバッグビルド時に付加

-I (大文字のアイ) インクルードフォルダが設定されている

-L 追加ライブラリフォルダが設定されている

-l (小文字のエル) リンクするライブラリが設定されている

-O0~3 最適化レベルによる

-Wl,--script スクリプトファイルが設定されている

-Wl,-Map マップファイル出力が設定されている

-o ソースファイル名と同一のものが必ず指定される

4-4. コンパイル環境の自動保存と読み込み

ソースファイルをコンパイルする毎に「GCCオプション」の全設定が次回起動時のデフォルトとして保存され、更にソースファイルの設定として同じフォルダに自動保存されます。その後一度コンパイル

済みのソースファイルを開くと、前回コンパイルしたときの環境設定を読み込むか問い合わせてきま

す。「OK」を選択すると前回コンパイルした時と全く同じ状態に「GCCオプション」を変更しますので再設定の手間が省けます。

5. H8/3694F(H8 Tiny)をターゲットとした開発手順

5-1. 使用方法 1 エミュレータを使う

実機をターゲットとしたプログラムを作る前に、GNUツールのRUN(エミュレータ)に触れておきましょう。まだマイコンボードは必要ではありません。また、他のコアをもつCPUでも同様にエミュレートできますので、H8 Tinyを使わない場合でも一読下さい。

5-1-1. GCC オプションの設定 GDLを起動し、「ツール(T)」メニュー→「GCCオプション(O)...」で「GCCオプション」ダイアログボックス

を開き、「設定リスト」から「エミュレーション(H8TINY)」を選択してください。選択すると「OKボタンを押すと、[エミュレーション(H8TINY)]の設定を行います。」というメッセージが表れますので「OK」ボタンを押します。これでGCCオプションの全ての設定が自動的に更新されます。最後に設定が完了したら、GCCオプションダイアログボックスの下にある「OK」ボタンを押して、設定をGDLに覚えさせます。

5-1-2. ソースプログラム編集とコンパイル ここでは簡単な計算とその結果を表示するプログラムを書いてみましょう。

#include <stdio.h> int main(void) { int i; for (i = 0; i < 10; i++) printf("hello (%d)¥n", i); printf (" 1 + 1 = %d¥n", 1 + 1); printf (" 2 * 3 = %d¥n", 2 * 3); printf (" 10 / 5 = %d¥n", 10 / 5); printf (" 1 - 5 = %d¥n", 1 - 5); printf (" 1.4 * 3.2 = %f¥n", 1.4 * 3.2); while (1) ; }

四則演算とpinrtf関数を使っています。GDLのエディタをフル活用して入力してください。入力が終わったら、日本語を使用していないフォルダへ「hello.c」という名前で保存しておきます。 ではコンパイルしてみましょう。GDLの「コンパイル(C)」メニュー→「ビルド+エミュレータで開く(E)」を選

択、もしくは「ALT」キーを押しながら「F9」キーを押してしてください。 GCCオプション設定やソースプログラムに大きな問題がなければ「コンパイル...OK」のメッセージが

表れます。エラーメッセージ等が表示されたらそのメッセージを参考に設定及びソースプログラムを

修正します。 コンパイルが成功したら「エミュレータで開きますか?」とたずねてきますので、「OK」を押してエ

ミュレータでコンパイルしたプログラムを実行します。 正しく動いていれば、次のようなウィンドウに計算結果などが表示されます。[CTRL]+[C]で強制終

了します。

8

5-1-3. エミュレータの目的 有用性がどこにあるのかと思われるかもしれませんが、マイコンボードにはPCのようなキーボード

やディスプレイといった機能豊富な入出力装置が装備できないのが一般的です。そのためプログラ

ムの挙動を確認する手段が限られてしまうことがあります。 このエミュレータはマイコンのコア部分とメモリ・コンソールのみをエミュレートするもので、実際に内

蔵 I/O までをエミュレーションするものではありません。ですが基本的な数値演算やサブルーチンなどのデバッグには有用です。複雑な演算を必要とするルーチンのデバッグに printf を使って途中経過を表示したり、I/Oの代わりに scanf(H8Tinyでは未完全)でデータを入力することが可能です。 また、単に C言語の学習目的で使用されるのも良いと思いますので、是非活用してみてください。

5-2. 使用方法 2 マイコンの ROM で動かす

今度は実際にH8/3694Fマイコンボードをターゲットとして、GDLを使う方法を紹介します。H8/3694Fマイコンを使った開発環境のベースとなります。

5-2-1. コンパイラオプション設定 GDLを起動し、「ツール(T)」メニュー→「GCCオプション(O)...」で「GCCオプション」ダイアログボックス

を開き、「設定リスト」から「H8/3694F 内蔵フラッシュROM」を選択してください。これでGCCオプションの全ての設定が自動的に更新されます。GCCオプションダイアログボックスの下にある「OK」ボタンを押して、設定をGDLに反映させます。

5-1-1.章で設定したときと異なるのは、H8/3694Fマイコンを前提としたとしたメモリ配置やスタートアップルーチン、内部機能を記述したファイルおよびオプションが追加された点です。

5-2-2. ソースプログラム編集とコンパイル ここではH8/3694FのP11とP12にLEDを装備した場合のプログラムを作ってみます。

このLEDを交互に点滅させてみましょう。

#include <3694.h> void main(void) { long i; IO.PCR1 = 0x06; // P11とP12を出力ポートに設定 while (1) { IO.PDR1.BIT.B1 = 0; // LED ON IO.PDR1.BIT.B2 = 1; // LED OFF for (i = 0; i < 60000; i++) ; // 無駄ループによるウェイト IO.PDR1.BIT.B1 = 1; // LED OFF IO.PDR1.BIT.B2 = 0; // LED ON for (i = 0; i < 60000; i++) ; // 無駄ループによるウェイト } }

コメントにもあるようにP11とP12を出力に設定し、各々のデータレジスタのビットに1もしくは0を代入することでLEDの明滅をコントロールします。GDLのエディタで入力が終わったら、適当なフォルダに「p1.c」という名前で保存しておきます。 早速コンパイルしてみましょう。GDLの「コンパイル(C)」メニュー→「ビルド(B)」を選択、もしくは「F9」

キーを押してしてください。GCCオプション設定やソースプログラムに問題がなければ、「コンパイル<成功>」のメッセージがログウィンドウに表れます。エラーメッセージ等が表示されたら、そのメッセージを参考に設定及びソースプログラムを修正します。 コンパイルに成功すると、ソースプログラムを保存した場所に「p1.mot」というファイルができます。

これが作られていればまず問題ありません。

9

5-2-3. マイコンへ転送 マイコンボードの電源供給を断ち、付属の通信ケーブルでマイコンボードとPCを接続します。マイ

コンボードの「書込スイッチ」を「WR」側に切り替え、電源をマイコンボードに供給します。 GDLの外部ツールに予め登録されている「フラッシュライタ(H8/3664F)」を起動し、「送信ファイル名」

に「p1.mot」が設定されていることを確認します。

準備ができたら「かきこみ」ボタンを押して、PCからマイコンボードへプログラムを転送開始します。

転送中にエラーメッセージが表示されたら、マイコンボードへ供給している電源・ケーブルの接続状

態、PCの使用できる通信ポートなどを確認し、電源を入れなおしてから再度書き込みを行ってください。

5-2-4. プログラムを実行 電源を再度断ち、マイコンボードの「書込スイッチ」を「RUN」側に切り替えます。再度電源を供給す

ると、2つのLEDが交互に点滅する様子がみられると思います。

6. SH7045F をターゲットとした開発手順 エミュレータを使った例はH8/3664Fで紹介した方法と同様で、5-1.章で選択している設定リストを

「エミュレーション(SH2)」に変更して読み替えてください。ここでは実機で動作させる方法から紹介します。

6-1. 使用方法 1 マイコンの ROM で動かす

BTC050 SH7045FマイコンボードセットをターゲットとしてGDLを使う方法を紹介します。 まずはマイコン内蔵のフラッシュメモリ上にプログラムを転送し実行させてみましょう。

6-1-1. コンパイラオプション設定 GDLを起動し、「ツール(T)」メニュー→「GCCオプション(O)...」で「GCCオプション」ダイアログボックス

を開き、「設定リスト」から「SH7045F 内蔵フラッシュROM」を選択してください。これでGCCオプションの全ての設定が自動的に更新されます。最後にGCCオプションダイアログボックスの下にある「OK」ボタンを押して、設定をGDLに覚えさせます。

6-1-2. ソースプログラム編集とコンパイル ここではBTC050 SH7045Fマイコンボードのスペックに従ったプログラムを作ってみます。マイコン

ボードのPE0~7へ8個のLEDを接続し、あるパターンで点滅させてみましょう。 #include <7045.h> void main(void) { int i, d; PFC.PEIOR.WORD = 0x00ff; // PE0~7を出力に設定 while (1) { // 無限ループとする for (d = 0; d < 256; d++) { PE.DR.BYTE.L = (_BYTE)d; // PEにdの値を設定(LED光る) for (i = 0; i < 30000; i++) ; // 無駄ループによるウェイト } } }

コメントにもあるようにPE0~7を出力とし、データレジスタに数値を代入することで対応するビットのLEDの明滅をコントロールします。GDLのエディタで入力が終わったら、適当な場所へ「p1.c」という名前で保存しておきます。 早速コンパイルしてみましょう。GDBの「コンパイル(C)」メニュー→「ビルド(B)」を選択、もしくは「F9」

キーを押してしてください。GCCオプション設定やソースプログラムに問題がなければ、「コンパイル<成功>」のメッセージがログウィンドウに表れます。エラーメッセージ等が表示されたら、そのメッセージを参考に設定及びソースプログラムを修正します。 コンパイルに成功すると、ソースプログラムを保存した場所に「p1.mot」というファイルができます。

これが作られていればまず問題ありません。

10

6-1-3. マイコンボードへ転送 マイコンボードの電源を切り、付属の通信ケーブルでマイコンボードとPCを接続します。マイコン

ボードをブートモードにし、再度マイコンボードへ電源を供給します。 GDLの外部ツールに予め登録されている「フラッシュライタ(SH7045F/Sh7145F)」を起動し、「送信

ファイル名」に「p1.mot」が設定されていることを確認します。

準備ができたら「かきこみ」ボタンを押して、PCからマイコンボードへプログラムを転送開始します。

転送中にエラーメッセージが表示されたら、マイコンボードボードに供給している電源・ケーブルの接

続状態、PCの使用できる通信ポートなどを確認し、電源を入れなおしてから再度書き込みを行ってください。

6-1-4. プログラムを実行 マイコンボードの電源を切り、マイコンボードのマニュアルに従いモード2に切り替えた後、マイコン

ボードへ電源を供給します。LEDがPEの0~7ビットに接続されていれば端のLEDから順にインクリメントしていく様子がみられると思います。

6-2. 使用方法 2 マイコンの増設 RAM で動かす

ここではBTC050 SH7045Fマイコンボードをターゲットとし、増設RAMへプログラムを転送し実行させる場合の方法を説明します。

SH7045FマイコンのフラッシュROMは仕様上書込み回数が100回、内蔵されているRAMの容量がそれ程大きくない、フラッシュROMへの転送速度が遅い等から外部に別途RAMを増設してプログラムをそのRAM上で動作させることがしばしば行われます。その場合PCにはコンパイルしたプログラムを送信する通信プログラム、マイコンにはPCから送られてくプログラムを増設RAM側へ保存するプログラムが必要です。

6-2-1. コンパイラオプション設定 GDLを起動し、「ツール(T)」メニュー→「GCCオプション(O)...」で「GCCオプション」ダイアログボックス

を開き、「設定リスト」から「SH7045F 増設SRAM(ターミナル要)」を選択してください。これでGCCオプションの全ての設定が自動的に更新されます。最後にGCCオプションダイアログボックスの下にある「OK」ボタンを押して、設定をGDLに覚えさせます。

6-2-2. ソースプログラム編集とコンパイル 「6-1-2. ソースプログラムの編集とコンパイル」と全く同じ作業を行います。ソースプログラムも同じもの

を使います。なお、コンパイル後のファイル名は「p1.bin」となりますので注意してください。

6-2-3. 簡易 RAM転送プログラム 増設RAM上にPCからプログラムを転送するためには予めマイコンのフラッシュROMに通信用の

プログラムを書き込んでおかなくてはなりません。CD-Rの「TIM」フォルダにある「TIM7045F.zip」から「TIMSH7045.MOT」を解凍します。このファイルがそのプログラム(簡易RAM転送プログラム)になります。フラッシュライタを使用して「TIMSH7045.MOT」をマイコンへ予め書き込んでおいて下さい。 また増設RAMをマイコンで使用できるようにするため、マイコンボードをモード2に設定しておきま

す。

6-2-4. SIMPLE TERM でマイコンボードと接続 GDLにはSIMPLE TERMというターミナルソフトが用意されています。SIMPLE TERMのリンクが

GDLの外部ツールへ登録されていますのでクリックして起動してください。 初期状態ではPCのCOM1を使用する前提となっているので、もし異なっていたら「ファイル(F)」メ

ニューの「プロパティ(P)」をクリックしてCOMポート番号を変更してください。通信速度その他は次の通りです。Baudrate:57600bps、Databits:8bit、Stopbits:1bit、Parity:Non。

SIMPLE TERMの設定が終わったら、「通信(C)」メニューの「ポートオープン(O)」をクリックしてCOMポートを開きます。PCとマイコンボードを通信ケーブルで接続し、マイコンボード上の「ディップスイッチ4」をONにしておいたままマイコンボードの電源を供給してください。 「TIM7045F.MOT」のバージョンによってはメッセージが異なることがありますが、次ような文字列

がターミナルウィンドウに表示されればOKです。

表示されないときは、再度「7-2-3. 簡易RAM転送プログラム」から見直してください。 これで転送できる環境が整いました。マイコンボードの電源スイッチをOFFにしてください。

6-2-5. プログラムの RAM への転送と実行 目的のプログラムをSIMPLE TERMを使って増設RAMに転送する手順を説明します。 マイコンボードのディップスイッチ4をONにしたまま再度マイコンボードに電源を供給します。これ

でマイコンボード側が受信待機状態になりました。このときにターミナルウィンドウ上でキー入力しな

いで下さい。通信待機状態が崩れてしまいます。 SIMPLE TERMの「転送(T)」メニュー→「XMODEMファイル転送(T)」をクリックして先にコンパイル

した「p1.bin」を選択してください。「OK」を押すと転送を開始します。数秒で転送が完了し、転送完了と同時にマイコンボードのRAMに転送されたプログラムが実行されます。「6-1-4. プログラムを実

11

行」で動いた状態と同じになるはずです。 なお増設RAMは標準でバッテリバックアップされていません。つまり電源を切るとプログラムは消え

てしまいます。バックアップする場合はマニュアルに従ってバッテリを装着してください。そうすれば電

源を切ってもプログラムを再転送しない限りバックアップされます。メモリがバックアップされていれば

マイコンボードのディップスイッチ4をOFFにしておいて電源を入れるだけで、増設RAMへ転送されているプログラムが動き出します。

6-2-6. 増設 RAM を利用したプログラムの注意 増設RAMを使用した場合、SHの機能制約上メモリ用のバスとI/Oポートが排他利用されます。つ

まり、モード3(シングルチップモード)で利用できるI/Oポートよりも、モード2で増設RAMを使用した場合は利用できるI/Oポートが大幅に少なくなります。 汎用として使えるポートは回路図上で増設RAMと接続されていない端子と考えてほぼ差し支えあ

りません。増設RAM上で動作プログラムをする際は、RAMの各端子が接続されるSHのポートを初期化したり制御しないように注意してください。 また、増設RAMのデータバスは8ビット幅となっており、SHの内部バス32ビットの1/4となっていま

す。RAMへのメモリのアクセスが頻繁な場合は、明らかにROMモードで動作させたプログラムとRAMモードとでの動作スピードに違いが出てきます。特にタイミングとしてシビアなアプリケーションの場合は、この点を考慮した上で作成してください。 なおSH7045Fに関する詳細は、「SH7040シリーズハードウェアマニュアル」を参照してください。

6-3. 使用方法 3 マイコン内蔵フラッシュ ROM+増設 RAM で動かす

ここではBTC050 SH7045Fマイコンボードをターゲットとし、コードは内蔵フラッシュROMにデータやワークエリアは増設RAMを使用する方法を簡単に説明します。

7-2.章の増設RAMでデバッグしたプログラムをいざROM化しようとすると全く動かないケースが多々あります。「6-1. 使用方法1 マイコンのROMで動かす」ではワークエリアとして使用できるのはSH7045Fに内蔵されている4kバイトのRAMのみとなっているからです。ちょっと大き目の配列を宣言してしまうと、コンパイル中にram is fullのエラーメッセージとともにコンパイルが停止してしまうでしょう。またエラーがでないとしても、実際に動作させて見ると思ったとおりの動きをしないはずです。 そこで、せっかく外部に増設されている128kバイトのRAMがあるのですから活用してみては如何

でしょうか。使い方は簡単です。「設定リスト」から「SH7045F 内蔵フラッシュROM+外部RAM併用」を選択して再コンパイルしてみてください。エラーがなくなったはずです。あとはコンパイル済みのmotファイルをSHのフラッシュROMに書き込めばOKです。 なお、増設RAMに接続されているバスはスタートアップルーチンが自動的に初期化していますの

で、それらの端子はユーザプログラム中では使用できません。ご注意下さい。

7. SH7047F をターゲットとした開発手順 エミュレータを使った例はH8/3664Fで紹介した方法と同様で、5-1.章で選択している設定リストを

「エミュレーション(SH2)」に変更して読み替えてください。ここでは実機で動作させる方法から紹介します。

7-1. 使用方法 1 マイコンの ROM で動かす

BTC070 SH7047Fマイコンボードセットをターゲットとして、GDLを使う方法を紹介します。 まずはマイコン内蔵のフラッシュメモリ上にプログラムを転送し実行させてみましょう。

7-1-1. コンパイラオプション設定 GDLを起動し、「ツール(T)」メニュー→「GCCオプション(O)...」で「GCCオプション」ダイアログボックス

を開き、「設定リスト」から「SH7047F 内蔵フラッシュROM」を選択してください。これでGCCオプションの全ての設定が自動的に更新されます。最後にGCCオプションダイアログボックスの下にある「OK」ボタンを押して、設定をGDLに覚えさせます。

7-1-2. ソースプログラム編集とコンパイル ここではBTC070 SH7047Fマイコンボードのスペックに従ったプログラムを作ってみます。マイコン

ボードのPE8とPE9へLEDをシンク接続し、あるパターンで点滅させてみましょう。 #include <7047.h> #define LED2 PE.DRL.BIT.B8 // PE8をLED1としてアクセス #define LED1 PE.DRL.BIT.B9 // PE9をLED2としてアクセス void main(void) { int i, d; PFC.PECRL1.BIT.PE8MD = 0; // PE8を出力に設定 PFC.PEIORL.BIT.B8 = 1; PFC.PECRL1.BIT.PE9MD = 0; // PE9を出力に設定 PFC.PEIORL.BIT.B9 = 1; while (1) { // 無限ループとする LED1 = 0; // PE8を点灯 LED2 = 1; // PE9を消灯 for (i = 0; i < 60000; i++) ; // 無駄ループによるウェイト LED1 = 1; // PE8を消灯 LED2 = 0; // PE9を点灯 for (i = 0; i < 60000; i++) ; // 無駄ループによるウェイト } }

コメントにもあるようにPE8とPE9を出力とし、各々のデータレジスタに1か0を設定することでLEDの明滅をコントロールしています。GDLのエディタで入力が終わったら、適当な場所へ「p1.c」という名前で保存しておきます。

12

早速コンパイルしてみましょう。GDBの「コンパイル(C)」メニュー→「ビルド(B)」を選択、もしくは「F9」キーを押してしてください。GCCオプション設定やソースプログラムに問題がなければ、「コンパイル<成功>」のメッセージがログウィンドウに表れます。エラーメッセージ等が表示されたら、そのメッセージを参考に設定及びソースプログラムを修正します。 コンパイルに成功すると、ソースプログラムを保存した場所に「p1.mot」というファイルができます。

これが作られていればまず問題ありません。

7-1-3. マイコンボードへ転送 マイコンボードの電源を切った状態で、付属の通信ケーブルでマイコンボードとPCを接続します。

マイコンボードをブートモードにし、再度マイコンボードへ電源を供給します。 GDLの外部ツールに予め登録されている「FLASHSimple」を起動し、「送信ファイル名」に

「p1.mot」が設定されていることを確認します。

準備ができたら「FLASH program」ボタンを押して、PCからマイコンボードへプログラムを転送開

始します。転送中にエラーメッセージが表示されたら、マイコンボードに供給している電源・ケーブル

の接続状態、PCの使用できる通信ポートなどを確認し、電源を入れなおしてから再度書き込みを行ってください。

7-1-4. プログラムを実行 マイコンボードの電源を切り、マイコンボードのマニュアルに従いMCU拡張モード3に切り替えた

後、マイコンボードへ電源を供給します。LEDがPE8とPE9に接続されていれば交互に点滅する様子がみられると思います。

7-2. 使用方法 2 マイコンの増設 RAM で動かす

ここではBTC070 SH7047Fマイコンボードをターゲットとし、増設RAMへプログラムを転送し実行させる場合の方法を説明します。

SH7047FマイコンのフラッシュROMは仕様上書込み回数が100回、内蔵されているRAMの容量がそれ程大きくない、フラッシュROMへの転送速度が遅い等から外部に別途RAMを増設してプログラムをそのRAM上で動作させることがしばしば行われます。その場合PCにはコンパイルしたプログラムを送信する通信プログラム、マイコンにはPCから送られてくプログラムを増設RAM側へ保存するプ

ログラムが必要です。

7-2-1. コンパイラオプション設定 GDLを起動し、「ツール(T)」メニュー→「GCCオプション(O)...」で「GCCオプション」ダイアログボックス

を開き、「設定リスト」から「SH7047F 増設SRAM(ターミナル要)」を選択してください。これでGCCオプションの全ての設定が自動的に更新されます。最後にGCCオプションダイアログボックスの下にある「OK」ボタンを押して、設定をGDLに覚えさせます。

7-2-2. ソースプログラム編集とコンパイル 「7-1-2. ソースプログラムの編集とコンパイル」と全く同じ作業を行います。ソースプログラムも同じもの

を使います。なお、コンパイル後のファイル名は「p1.bin」となりますので注意してください。

7-2-3. 簡易 RAM転送プログラム 増設RAM上にPCからプログラムを転送するためには予めマイコンのフラッシュROMに通信用の

プログラムを書き込んでおかなくてはなりません。CD-Rの「TIM」フォルダにある「TIM7047F.zip」から「TIMSH7047.MOT」を解凍します。このファイルがそのプログラム(簡易RAM転送プログラム)になります。FLASHSimpleを使用して「TIMSH7047.MOT」をマイコンへ予め書き込んでおいてください。 また増設RAMをマイコンで使用できるようにするため、マイコンボードをMCU拡張モード2にして

おきます。

7-2-4. SIMPLE TERM でマイコンボードと接続 GDLにはSIMPLE TERMというターミナルソフトが用意されています。SIMPLE TERMのリンクが

GDLの外部ツールへ登録されていますのでクリックして起動してください。 初期状態ではPCのCOM1を使用する前提となっているので、もし異なっていたら「ファイル(F)」メ

ニューの「プロパティ(P)」をクリックしてCOMポート番号を変更してください。通信速度その他は次の通りです。Baudrate:57600bps、Databits:8bit、Stopbits:1bit、Parity:Non。

SIMPLE TERMの設定が終わったら、「通信(C)」メニューの「ポートオープン(O)」をクリックしてCOMポートを開きます。PCとマイコンボードを通信ケーブルで接続しマイコンボードへ電源を供給してください。 「TIM7047F.MOT」のバージョンによってはメッセージが異なることがありますが、次ような文字列

がターミナルウィンドウに表示されればOKです。

13

表示されないときは、再度「7-2-3. 簡易RAM転送プログラム」から見直してください。 これで転送できる環境が整いました。マイコンボードの電源スイッチをOFFにしてください。

7-2-5. プログラムの RAM転送と実行 目的のプログラムをSIMPLE TERMを使って増設RAMに転送する手順を説明します。 再度マイコンボードに電源を供給します。SIMPLE TERMのターミナルウィンドウに表示されるカウ

ントダウンの数値が0になる前に、SIMPLE TERM上で何かキーを押してください。「PLEASE START TRANSMISSION OF A PROGRAM.」というメッセージが表示された時点でマイコンボード側が受信待機状態になります。この状態で更にキー入力しないで下さい。通信待機状態が崩

れてしまいます。 SIMPLE TERMの「転送(T)」メニュー→「XMODEMファイル転送(T)」をクリックして先にコンパイル

した「p1.bin」を選択してください。「OK」を押すと転送を開始します。数秒で転送が完了し、転送完了と同時にマイコンボードのRAM転送されたプログラムが実行されます。「7-1-4. プログラムを実行」で動いた状態と同じになるはずです。 なお増設RAMは標準でバッテリバックアップされていません。つまり電源を切るとプログラムは消え

てしまいます。バックアップする場合はマニュアルに従ってバッテリを装着してください。そうすれば電

源を切ってもプログラムを再転送しない限りバックアップされます。メモリがバックアップされていれば

マイコンボードの電源を入れて簡易RAM転送プログラムのカウントアップが終了すれば、増設RAMへ転送されたプログラムが動き出します。

7-2-6. 増設 RAM を利用したプログラムの注意 増設RAMを使用した場合、SHの機能制約上メモリ用のバスとI/Oポートが排他利用されます。つ

まり、モード3(シングルチップモード)で利用できるI/Oポートよりも、モード2で増設RAMを使用した場合は利用できるI/Oポートが大幅に少なくなります。 汎用として使えるポートは回路図上で増設RAMと接続されていない端子と考えてほぼ差し支えあ

りません。増設RAM上で動作プログラムをする際は、RAMの各端子が接続されるSHのポートを初期化したり制御しないように注意してください。 また、増設RAMのデータバスは8ビット幅となっており、SHの内部バス32ビットの1/4となっていま

す。RAMへのメモリのアクセスが頻繁な場合は、明らかにROMモードで動作させたプログラムとRAMモードとでの動作スピードに違いが出てきます。特にタイミングとしてシビアなアプリケーションの場合は、この点を考慮した上で作成してください。 なおSH7047Fに関する詳細は、「SH7047シリーズハードウェアマニュアル」を参照してください。

7-3. 使用方法 3 マイコン内蔵フラッシュ ROM+増設 RAM で動かす

ここではBTC070 SH7047Fマイコンボードをターゲットとし、コードは内蔵フラッシュROMにデータやワークエリアは増設RAMを使用する方法を簡単に説明します。

7-2.章の増設RAMでデバッグしたプログラムをいざROM化しようとすると全く動かないケースが多々あります。「7-1. 使用方法1 マイコンのROMで動かす」ではワークエリアとして使用できるのは

SH7047Fに内蔵されている12kバイトのRAMのみとなっているからです。ちょっと大き目の配列を宣言してしまうと、コンパイル中にram is fullのエラーメッセージとともにコンパイルが停止してしまうでしょう。またエラーがでないとしても、実際に動作させて見ると思ったとおりの動きをしないはずです。 そこで、せっかく外部に増設されている512k(動作中は256k)バイトのRAMがあるのですから活用

してみては如何でしょうか。使い方は簡単です。「設定リスト」から「SH7047F 内蔵フラッシュROM+外部RAM併用」を選択して再コンパイルしてみてください。エラーがなくなったはずです。あとはコンパイル済みのmotファイルをSHのフラッシュROMに書き込めばOKです。 なお、増設RAMに接続されているバスはスタートアップルーチンが自動的に初期化していますの

で、それらの端子はユーザプログラム中では使用できません。ご注意下さい。

14

8. SH7145F をターゲットとした開発手順 エミュレータを使った例はH8/3664Fで紹介した方法と同様で、5-1.章で選択している設定リストを

「エミュレーション(SH2)」に変更して読み替えてください。ここでは実機で動作させる方法から紹介します。

8-1. 使用方法 1 マイコンの ROM で動かす

BTC080 SH7145Fマイコンボードセットをターゲットとして、GDLを使う方法を紹介します。 まずはマイコン内蔵のフラッシュメモリ上にプログラムを転送し実行させてみましょう。

8-1-1. コンパイラオプション設定 GDLを起動し、「ツール(T)」メニュー→「GCCオプション(O)...」で「GCCオプション」ダイアログボックス

を開き、「設定リスト」から「SH7145F 内蔵フラッシュROM」を選択してください。これでGCCオプションの全ての設定が自動的に更新されます。最後にGCCオプションダイアログボックスの下にある「OK」ボタンを押して、設定をGDLに覚えさせます。

8-1-2. ソースプログラム編集とコンパイル マイコンボードのPE0~7へ8個のLEDを接続し、あるパターンで点滅させてみましょう。

#include <7145.h> void main(void) { int i, d; PFC.PEIORL.WORD = 0x00ff; // PE0~7を出力に設定 while (1) { // 無限ループとする for (d = 0; d < 256; d++) { PE.DRL.BYTE.L = (_BYTE)d; // PEにdの値を設定(LED光る) for (i = 0; i < 30000; i++) ; // 無駄ループによるウェイト } } }

コメントにもあるようにPE0~7を出力とし、データレジスタに数値を代入することで対応するビットのLEDの明滅をコントロールします。GDLのエディタで入力が終わったら、適当な場所へ「p1.c」という名前で保存しておきます。 早速コンパイルしてみましょう。GDBの「コンパイル(C)」メニュー→「ビルド(B)」を選択、もしくは「F9」

キーを押してしてください。GCCオプション設定やソースプログラムに問題がなければ、「コンパイル<成功>」のメッセージがログウィンドウに表れます。エラーメッセージ等が表示されたら、そのメッセージを参考に設定及びソースプログラムを修正します。 コンパイルに成功すると、ソースプログラムを保存した場所に「p1.mot」というファイルができます。

これが作られていればまず問題ありません。

8-1-3. マイコンボードへ転送 マイコンボードの電源を切り、付属の通信ケーブルでマイコンボードとPCを接続します。マイコン

ボードをブートモードにし、再度マイコンボードへ電源を供給します。 GDLの外部ツールに予め登録されている「フラッシュライタ(SH7045F/SH7145)」を起動し、「送信

ファイル名」に「p1.mot」が設定されていることを確認します。

準備ができたら「かきこみ」ボタンを押して、PCからマイコンボードへプログラムを転送開始します。

転送中にエラーメッセージが表示されたら、マイコンボードボードに供給している電源・ケーブルの接

続状態、PCの使用できる通信ポートなどを確認し、電源を入れなおしてから再度書き込みを行ってください。

8-1-4. プログラムを実行 マイコンボードの電源を切り、マイコンボードのマニュアルに従いMCU拡張モード2に切り替えた

後、マイコンボードへ電源を供給します。LEDがPEの0~7ビットに接続されていれば端のLEDから順にインクリメントしていく様子がみられると思います。

8-2. 使用方法 2 マイコンの増設 RAM で動かす

ここではBTC080 SH7145Fマイコンボードをターゲットとし、増設RAMへプログラムを転送し実行させる場合の方法を説明します。

SH7145FマイコンのフラッシュROMは仕様上書込み回数が100回、内蔵されているRAMの容量がそれ程大きくない、フラッシュROMへの転送速度が遅い等から外部に別途RAMを増設してプログラムをそのRAM上で動作させることがしばしば行われます。その場合PCにはコンパイルしたプログラムを送信する通信プログラム、マイコンにはPCから送られてくプログラムを増設RAM側へ保存するプログラムが必要です。

8-2-1. コンパイラオプション設定 GDLを起動し、「ツール(T)」メニュー→「GCCオプション(O)...」で「GCCオプション」ダイアログボックス

を開き、「設定リスト」から「SH7145F 増設SRAM(ターミナル要)」を選択してください。これでGCCオプションの全ての設定が自動的に更新されます。最後にGCCオプションダイアログボックスの下にある「OK」ボタンを押して、設定をGDLに覚えさせます。

8-2-2. ソースプログラム編集とコンパイル 「8-1-2. ソースプログラムの編集とコンパイル」と全く同じ作業を行います。ソースプログラムも同じもの

を使います。もしソースをそのまま引用される場合は、開いた後で8-2-1.章の\コンパイラオプションを設定しなおしてください。コンパイル後のファイル名は「p1.bin」となります。

15

8-2-3. 簡易 RAM転送プログラム 増設RAM上にPCからプログラムを転送するためには予めマイコンのフラッシュROMに通信用の

プログラムを書き込んでおかなくてはなりません。CD-Rの「TIM」フォルダにある「TIM7145F.zip」から「TIMSH7145.MOT」を解凍します。このファイルがそのプログラム(簡易RAM転送プログラム)になります。フラッシュライタを使用して「TIMSH7145.MOT」をマイコンへ予め書き込んでおいて下さい。 また増設RAMをマイコンで使用できるようにするため、マイコンボードをMCU拡張モード2に設定

しておきます。

8-2-4. SIMPLE TERM でマイコンボードと接続 GDLにはSIMPLE TERMというターミナルソフトが用意されています。SIMPLE TERMのリンクが

GDLの外部ツールへ登録されていますのでクリックして起動してください。 初期状態ではPCのCOM1を使用する前提となっているので、もし異なっていたら「ファイル(F)」メ

ニューの「プロパティ(P)」をクリックしてCOMポート番号を変更してください。通信速度その他は次の通りです。Baudrate:57600bps、Databits:8bit、Stopbits:1bit、Parity:Non。

SIMPLE TERMの設定が終わったら、「通信(C)」メニューの「ポートオープン(O)」をクリックしてCOMポートを開きます。PCとマイコンボードを通信ケーブルで接続し、マイコンボードへ電源を供給してください。 「TIM7145F.MOT」のバージョンによってはメッセージが異なることがありますが、次ような文字列

がターミナルウィンドウに表示されればOKです。

表示されないときは、再度「8-2-3. 簡易RAM転送プログラム」から見直してください。 これで転送できる環境が整いました。マイコンボードの電源スイッチをOFFにしてください。

8-2-5. プログラムの RAM への転送と実行 目的のプログラムをSIMPLE TERMを使って増設RAMに転送する手順を説明します。 再度マイコンボードに電源を供給します。SIMPLE TERMのターミナルウィンドウに表示されるカウ

ントダウンの数値が0になる前に、SIMPLE TERM上でスペースキーを1回押してください。「PLEASE START TRANSMISSION OF A PROGRAM.」というメッセージが表示された時点でマイコンボード側が受信待機状態になります。この状態で更にキー入力しないで下さい。通信

待機状態が崩れてしまいます。 SIMPLE TERMの「転送(T)」メニュー→「XMODEMファイル転送(T)」をクリックして先にコンパイル

した「p1.bin」を選択してください。「OK」を押すと転送を開始します。数秒で転送が完了し、転送完了と同時にマイコンボードのRAM転送されたプログラムが実行されます。「8-1-4. プログラムを実行」で動いた状態と同じになるはずです。 なお増設RAMはスーパーキャパシタでバックアップされていますので、電源を切ってもスーパー

キャパシタが放電し切るまで(数時間程度)バックアップされます。メモリがバックアップされていればマイコンボードの電源を入れて簡易RAM転送プログラムのカウントアップが終了すれば、増設RAMへ転送されたプログラムが動き出します。

8-2-6. 増設 RAM を利用したプログラムの注意 増設RAMを使用した場合、SHの機能制約上メモリ用のバスとI/Oポートが排他利用されます。つ

まり、モード3(シングルチップモード)で利用できるI/Oポートよりも、モード2で増設RAMを使用した場合は利用できるI/Oポートが大幅に少なくなります。 汎用として使えるポートは回路図上で増設RAMと接続されていない端子と考えてほぼ差し支えあ

りません。増設RAM上で動作プログラムをする際は、RAMの各端子が接続されるSHのポートを初期化したり制御しないように注意してください。 なおSH7145Fに関する詳細は、「SH7040シリーズハードウェアマニュアル」を参照してください。

8-3. 使用方法 3 マイコンの増設フラッシュで動かす

ここではBTC080 SH7145Fマイコンボードをターゲットとし、コードは増設フラッシュROMにデータやワークエリアは増設RAMを使用する方法を簡単に説明します。 基本的な流れは「8-2. 使用方法2 マイコンの増設RAMで動かす」と似ていますが、増設フラッ

シュROMは意図的に消去しない限り半永久的にデータが保持されるというのが特徴です。8-2-1.章で「設定リスト」から「SH7145F 外部フラッシュROM+外部RAM併用」を選択してコンパイルするのと、8-2-4.章のSIMPLE TERMでダウンロードする際に簡易RAM転送プログラムのメッセージにスペースではなく「F」キーで答える点が異なるだけです。 増設フラッシュROM上にプログラムが書き込まれている状態では、優先的に増設フラッシュROM

上のプログラムを実行します。よって「8-2. 使用方法2 マイコンの増設RAMで動かす」の操作でダウンロードした直後の1回のみ増設RAM上でプログラムを実行できますが、再起動してしまうと増設RAMのデータはクリアされて増設フラッシュROMからの起動が行われます。増設RAM上でのデバッグに戻りたい場合は、簡易RAM転送プログラムのカウントダウン中に「E」を押して増設フラッシュROMのデータを消去してください。 なお増設フラッシュROMのデータバス幅は16ビットで、ウェイトコントロールレジスタで4ウェイト挿

入しています。速度的にシビアな設計をされているアプリケーションの場合は、増設RAMおよび増設フラッシュROM上での実行速度差を検証した上で活用ください。

8-4. 使用方法 4 マイコン内蔵フラッシュ ROM+増設 RAM で動かす

ここではBTC080 SH7145Fマイコンボードをターゲットとし、コードは内蔵フラッシュROMにデータやワークエリアは増設RAMを使用する方法を簡単に説明します。

16

7-2.章の増設RAMでデバッグしたプログラムをいざROM化しようとすると全く動かないケースが多々あります。「8-1. 使用方法1 マイコンのROMで動かす」ではワークエリアとして使用できるのはSH7145Fに内蔵されている8kバイトのRAMのみとなっているからです。ちょっと大き目の配列を宣言してしまうと、コンパイル中にram is fullのエラーメッセージとともにコンパイルが停止してしまうでしょう。エラーが表示されない場合でも、実際に動作させると思ったとおりの動きをしないこともあります。 そこで、せっかく外部に増設されている1MバイトのRAMがあるのですから活用してみては如何で

しょうか。使い方は簡単です。「設定リスト」から「SH7145F 内蔵フラッシュROM+外部RAM併用」を選択して再コンパイルしてみてください。エラーがなくなったはずです。あとはコンパイル済みのmotファイルをSHのフラッシュROMに書き込めばOKです。 なお増設RAMに接続されているバスはスタートアップルーチン内で自動的に初期化されますので、

それらの端子はユーザプログラム中では使用できません。ご注意下さい。またこの環境で動作するプ

ログラムがほぼ最速になります。

9. GNU C と割り込み処理関数 H8/3694F・H8/3687F・SH7045F・SH7047F・SH7145Fの割り込み要因に対する割込みベクタ

は、内蔵フラッシュROMの先頭番地から割り当てられています。この割り込みベクタの定義はリンカのスクリプトファイル(h8rom.x, h8ram.xもしくはshrom.x, shram.x等)にて行っており、既に割り込み処理関数名と一緒に全て定義済みです。 なおSHシリーズの増設メモリ上で動作させる場合ベクタベースレジスタ(VBR)は各ターゲットリスト

で設定される各スタートアップルーチン内で、SH7045F/SH7145Fの増設RAMの場合はを$400000番地、SH7047Fの増設RAMの場合は$200000番地、SH7145Fの増設フラッシュROMの場合は$200000番地に変更しています。

9-1. 割り込み処理関数

GNU Cではプログラムの中で呼び出される関数に関して特定の情報を宣言することによって、コンパイラが関数呼び出しをより良く最適化したり、ソースコードをより綿密にチェックしたりすることがで

きるようになります。キーワード「__attribute__」によって、宣言をする際に特別な属性を指定することができます。割り込み処理関数もこの宣言を使うことで、その関数の入口と出口において割り込み

ハンドラの中で使うのに適した命令シーケンスを生成します。 既に「3694.h」「3687.h」「7045.h」「7047.h」の各内部レジスタ定義ヘッダファイル中に定義済み

割り込み関数のプロトタイプ宣言が「__attribute__ ((interrupt_handler))」属性をつけて行ってあります。割り込み処理を行う関数は目的の割り込み要因に応じた下記の表の関数名にて、「8-2. 割り込み処理のコーディング」を参考に作成してください。

<H8/3694F用 定義済み割り込み関数リスト> 関数名 割り込み要因

void int_nmi (void) NMI void int_irq0 (void) IRQ0

void int_irq1 (void) IRQ1 void int_irq2 (void) IRQ2 void int_irq3 (void) IRQ3 void int_wkp (void) ウェイクアップ void int_timera (void) タイマA void int_timerw (void) タイマW void int_timerv (void) タイマV void int_sci3 (void) SCI3 void int_iic2 (void) I2Cバス void int_ad (void) A/D変換器

<H8/3687F用 定義済み割り込み関数リスト>

関数名 割り込み要因 void int_nmi (void) NMI void int_irq0 (void) IRQ0 void int_irq1 (void) IRQ1 void int_irq2 (void) IRQ2 void int_irq3 (void) IRQ3 void int_wkp (void) ウェイクアップ void int_rtc (void) RTC void int_timerv (void) タイマV void int_sci3 (void) SCI3 void int_iic2 (void) I2Cバス void int_ad (void) A/D変換器 void int_timerz0 (void) タイマZ コンペアマッチ/インプットキャプチャ A0~D0 void int_timerz1 (void) タイマZ コンペアマッチ/インプットキャプチャ A1~D1 void int_timerb1 (void) タイマB1 void int_sci3 (void) SCI3_2

<SH7045F用 定義済み割り込み関数リスト>

関数名 割り込み要因 void int_GeneralIllegalInstruction(void) 一般不当命令 void int_SlotIllegalInstruction(void) スロット不当命令 void int_CPUAddressError(void) CPUアドレスエラー void int_DMAAddressError(void) DMAC/DTCアドレスエラー void int_NMI(void) NMI void int_Userbrake(void) ユーザーブレーク void int_irq0(void) IRQ0 void int_irq1(void) IRQ1 void int_irq2(void) IRQ2 void int_irq3(void) IRQ3 void int_irq4(void) IRQ4 void int_irq5(void) IRQ5 void int_irq6(void) IRQ6

17

void int_irq7(void) IRQ7 void int_dei0(void) DMAC0 (DEI0) void int_dei1(void) DMAC1 (DEI1) void int_dei2(void) DMAC2 (DEI2) void int_dei3(void) DMAC3 (DEI3) void int_tgi0a(void) MTU0 (TGI0A) void int_tgi0b(void) MTU0 (TGI0B) void int_tgi0c(void) MTU0 (TGI0C) void int_tgi0d(void) MTU0 (TGI0D) void int_tci0v(void) MTU0 (TGI0V) void int_tgi1a(void) MTU1 (TGI1A) void int_tgi1b(void) MTU1 (TGI1B) void int_tci1v(void) MTU1 (TGI1V) void int_tci1u(void) MTU1 (TGI1U) void int_tgi2a(void) MTU2 (TGI2A) void int_tgi2b(void) MTU2 (TGI2B) void int_tci2v(void) MTU2 (TGI2V) void int_tci2u(void) MTU2 (TGI2U) void int_tgi3a(void) MTU3 (TGI3A) void int_tgi3b(void) MTU3 (TGI3B) void int_tgi3c(void) MTU3 (TGI3C) void int_tgi3d(void) MTU3 (TGI3D) void int_tci3v(void) MTU3 (TGI3V) void int_tgi4a(void) MTU4 (TGI4A) void int_tgi4b(void) MTU4 (TGI4B) void int_tgi4c(void) MTU4 (TGI4C) void int_tgi4d(void) MTU4 (TGI4D) void int_tci4v(void) MTU4 (TGI4V) void int_eri0(void) SCI0 (ERI0) void int_rxi0(void) SCI0 (RXI0) void int_txi0(void) SCI0 (TXI0) void int_tei0(void) SCI0 (TEI0) void int_eri1(void) SCI1 (ERI1) void int_rxi1(void) SCI1 (RXI1) void int_txi1(void) SCI1 (TXI1) void int_tei1(void) SCI1 (TEI1) void int_adi0(void) A/D (ADI0) void int_adi1(void) A/D (ADI1) void int_swdtce(void) DTC (SWDTCE) void int_cmi0(void) CMI0 (CMI0) void int_cmi1(void) CMI1 (CMI1) void int_iti(void) WDT (ITI) void int_cmi(void) BSC (CMI) void int_oei(void) I/O (OEI)

<SH7047F用 定義済み割り込み関数リスト> 関数名 割り込み要因

void int_GeneralIllegalInstruction(void) 一般不当命令 void int_SlotIllegalInstruction(void) スロット不当命令 void int_CPUAddressError(void) CPUアドレスエラー void int_DMAAddressError(void) DMAC/DTCアドレスエラー void int_NMI(void) NMI void int_Userbrake(void) ユーザーブレーク void int_irq0(void) IRQ0 void int_irq1(void) IRQ1 void int_irq2(void) IRQ2 void int_irq3(void) IRQ3 void int_tgia_0(void) MTU0 (TGIA_0) void int_tgib_0(void) MTU0 (TGIB_0) void int_tgic_0(void) MTU0 (TGIC_0) void int_tgid_0(void) MTU0 (TGID_0) void int_tgiv_0(void) MTU0 (TGIV_0) void int_tgia_1(void) MTU1 (TGIA_1) void int_tgib_1(void) MTU1 (TGIB_1) void int_tciv_1(void) MTU1 (TGIV_1) void int_tciu_1(void) MTU1 (TGIU_1) void int_tgia_2(void) MTU2 (TGIA_2) void int_tgib_2(void) MTU2 (TGIB_2) void int_tgiv_2(void) MTU2 (TGIV_2) void int_tgiu_2(void) MTU2 (TGIU_2) void int_tgia_3(void) MTU3 (TGIA_3) void int_tgib_3(void) MTU3 (TGIB_3) void int_tgic_3(void) MTU3 (TGIC_3) void int_tgid_3(void) MTU3 (TGID_3) void int_tciv_3(void) MTU3 (TGIV_3) void int_tgia_4(void) MTU4 (TGIA_4) void int_tgib_4(void) MTU4 (TGIB_4) void int_tgic_4(void) MTU4 (TGIC_4) void int_tgid_4(void) MTU4 (TGID_4) void int_tciv_4(void) MTU4 (TGIV_4) void int_adi0(void) A/D (ADI0) void int_adi1(void) A/D (ADI1) void int_swdtend(void) DTC (SWDTEND) void int_cmi0(void) CMT0 (CMI0) void int_cmi1(void) CMT1 (CMI1) void int_iti(void) WDT (ITI) void int_mtupoe(void) I/O (MTUPOE) void int_eri_2(void) SCI2 (ERI_2) void int_rxi_2(void) SCI2 (RXI_2) void int_txi_2(void) SCI2 (TXI_2) void int_tei_2(void) SCI2 (TEI_2)

18

void int_eri_3(void) SCI3 (ERI_3) void int_rxi_3(void) SCI3 (RXI_3) void int_txi_3(void) SCI3 (TXI_3) void int_tei_3(void) SCI3 (TEI_3) void int_eri_4(void) SCI4 (ERI_4) void int_rxi_4(void) SCI4 (RXI_4) void int_txi_4(void) SCI4 (TXI_4) void int_tei_4(void) SCI4 (TEI_4) void int_tgim(void) MMT (TGIM) void int_tgin(void) MMT (TGIN) void int_mmtoei(void) I/O (MMT) void int_ers1(void) HCAN2 (ERS1) void int_ovr1(void) HCAN2 (OVR1) void int_rm1(void) HCAN2 (RM1) void int_sle1(void) HCAN2 (SLE1)

<SH7145F用 定義済み割り込み関数リスト>

関数名 割り込み要因 void int_GeneralIllegalInstruction(void) 一般不当命令 void int_SlotIllegalInstruction(void) スロット不当命令 void int_CPUAddressError(void) CPUアドレスエラー void int_DMAAddressError(void) DMAC/DTCアドレスエラー void int_NMI(void) NMI void int_Userbrake(void) ユーザーブレーク void int_irq0(void) IRQ0 void int_irq1(void) IRQ1 void int_irq2(void) IRQ2 void int_irq3(void) IRQ3 void int_irq4(void) IRQ4 void int_irq5(void) IRQ5 void int_irq6(void) IRQ6 void int_irq7(void) IRQ7 void int_dei0(void) DMAC0 (DEI0) void int_dei1(void) DMAC1 (DEI1) void int_dei2(void) DMAC2 (DEI2) void int_dei3(void) DMAC3 (DEI3) void int_tgi0a(void) MTU0 (TGI0A) void int_tgi0b(void) MTU0 (TGI0B) void int_tgi0c(void) MTU0 (TGI0C) void int_tgi0d(void) MTU0 (TGI0D) void int_tci0v(void) MTU0 (TGI0V) void int_tgi1a(void) MTU1 (TGI1A) void int_tgi1b(void) MTU1 (TGI1B) void int_tci1v(void) MTU1 (TGI1V) void int_tci1u(void) MTU1 (TGI1U)

void int_tgi2a(void) MTU2 (TGI2A) void int_tgi2b(void) MTU2 (TGI2B) void int_tci2v(void) MTU2 (TGI2V) void int_tci2u(void) MTU2 (TGI2U) void int_tgi3a(void) MTU3 (TGI3A) void int_tgi3b(void) MTU3 (TGI3B) void int_tgi3c(void) MTU3 (TGI3C) void int_tgi3d(void) MTU3 (TGI3D) void int_tci3v(void) MTU3 (TGI3V) void int_tgi4a(void) MTU4 (TGI4A) void int_tgi4b(void) MTU4 (TGI4B) void int_tgi4c(void) MTU4 (TGI4C) void int_tgi4d(void) MTU4 (TGI4D) void int_tci4v(void) MTU4 (TGI4V) void int_eri0(void) SCI0 (ERI0) void int_rxi0(void) SCI0 (RXI0) void int_txi0(void) SCI0 (TXI0) void int_tei0(void) SCI0 (TEI0) void int_eri1(void) SCI1 (ERI1) void int_rxi1(void) SCI1 (RXI1) void int_txi1(void) SCI1 (TXI1) void int_tei1(void) SCI1 (TEI1) void int_eri2(void) SCI2 (ERI2) void int_rxi2(void) SCI2 (RXI2) void int_txi2(void) SCI2 (TXI2) void int_tei2(void) SCI2 (TEI2) void int_eri3(void) SCI3 (ERI3) void int_rxi3(void) SCI3 (RXI3) void int_txi3(void) SCI3 (TXI3) void int_tei3(void) SCI3 (TEI3) void int_adi0(void) A/D (ADI0) void int_adi1(void) A/D (ADI1) void int_swdtce(void) DTC (SWDTCE) void int_cmi0(void) CMI0 (CMI0) void int_cmi1(void) CMI1 (CMI1) void int_iti(void) WDT (ITI) void int_cmi(void) BSC (CMI) void int_oei(void) I/O (OEI) void int_ici(void) IIC (ICI)

割り込みが使用されない(ソースプログラム中に宣言がない)場合は、その割り込みベクタはプログ

ラムのスタートアドレスに設定されます。つまり割り込み関数をプログラム上で定義していないにも関

わらず割り込みを発生させてしまった場合は、プログラムは見かけ上ソフトウェアリセットがかかりま

す。

19

9-2. 割り込み処理関数のコーディング

ユーザのソースプログラムにターゲットに応じた各ヘッダファイルをインクルード宣言し、任意の割り

込み処理要因に対応した関数名にて割り込み処理関数を作成するだけです。 例) H8/3687FのタイマBオーバフロー割り込み処理関数を定義する場合。

#include <3687.h> // ヘッダファイルのインクルード(必須) void void int_timerb1(void) // 割り込み関数本体 { IRR2.BIT.IRRTB1 =0; // タイマB割り込み要求フラグクリア // 以下割り込み処理 .... } void main(void) { TB1.TMB1.BIT.CKS = 0; // クロック選択 IENR2.BIT.IENTB1 = 1; // B1割り込み許可 EI; // 割り込み許可マクロ .... }

実際に割り込みを利用するにあたっては、割り込み処理レジスタ等を任意の値に設定する操作が

必要になります。H8用ヘッダファイルにはCCRレジスタの割り込み許可ビットをマスク処理するマクロEI(割込み許可)とDI(割込み禁止)が、SH用には割り込みマスク処理関数SetSRRegが定義済みです。 またここでは説明しきれない具体的な使用法に関しては、各マイコン用に用意されたサンプルプロ

グラムを参照してください。

10. 最後に コンパイル済みのH8およびSH用GNUTOOLバイナリはKPIT社より逐次最新版がダウンロード可

能です。 ・KPIT Cummins GNU Tools & Support http://www.kpitgnutools.com/ また、GCC Developer Liteは単なるヘルパーソフトウェアです。機能も少なく拡張性はないといっ

ても過言ではありません。GCCの機能をフル活用するには早くGCC Developer Liteから卒業し、ご自分の趣向に合った開発環境を整えられるようになる事を切望します。

【改定履歴】 2000 7/22 第一版 2000 12/11 第二版 SH2関連追記 2000 12/24 第三版 SH2コンパイラオプションの設定修正 2001 2/20 第四版 簡易ターミナルの通信速度に関する記述変更 2001 4/10 第五版 サンプルプログラム誤記修正 2001 6/27 第六版 H8 Tiny関連追記・GDLのバージョンアップに伴う変更 2002 7/31 第七版 GDL&GCC大幅更新に伴う前面変更 2003 3/10 第八版 SIMPLE TERMに変更・その他バージョンアップに伴う修正 2003 4/15 第九版 SH7047F追記 2004 3/22 第十版 H8/3687F, H8/3694F追記 H8/3048F関連全面削除 2004 4/25 第十一版 SH7145F追記 2004 12/24 第十二版 H8Tiny割り込み処理関数名誤記修正 ドキュメントやCD-ROMの内容に関してお気づきの点がございましたら下記へご連絡ください。

〒210-0812 神奈川県川崎市東門前3-3-7

株式会社ベストテクノロジー

TEL 044-266-3066

FAX 044-276-3167

URL http://www.besttechnology.co.jp

Email [email protected]