Renesas



Section1
Section2
Section3
Section4
Section5
Section6




次にPeripheral Driver Generatorについて説明します。

Peripheral Driver Generatorとは、内蔵周辺機能の初期化や内蔵周辺機能の操作などを行うライブラリを呼び出すインタフェース関数(RAPI)を自動生成するツールです。以下PDGと呼びます。 PDGを使用することで、周辺機能制御レジスタの設定や操作方法を理解する時間を削減でき、周辺ドライバを作成する手間も省くことができます。さらにライブラリソースも含まれますので、ユーザによるドライバライブラリの改変も可能です。

 2010年6月末(予定)の量産時には、SYSTEM,ICU,I/O,TMR,CMT,TPU,A/D,SCI,I2C,DMACの計10種類のモジュールをサポート予定です。

 PDGを使用した開発イメージです。使用するモジュールの種類や動作設定などをPDGのGUI上で行い、インタフェース関数を自動生成させます。その後、自動生成されたファイルを、High-performance Embedded Workshopで作成されたアプリケーションプログラムに自動登録します。

あとは、アプリケーションプログラム内でインタフェース関数をコールして、周辺モジュールの初期化や操作を行うだけです。

さらにRX対応のPDGでは、1つの端子に複数の周辺機能が割り当てられている場合、警告メッセージを出力する“端子競合チェック機能”も備わっています。 RX610は従来のマイコンと同様に、1端子に複数の入出力機能が割り当てられている多重端子となっています。もし同一端子に割り当てられている周辺機能を2つ以上有効とした場合、それらの周辺機能には“優先度”が決められており、優先度の高い周辺機能がその端子を使用することになります。

この場合、ユーザアプリケーションからでは、その端子が実際にはどの周辺機能の入出力端子として動作しているか分かりにくいですが、PDGの“端子競合チェック機能”があれば、一瞬で分かります。

 それでは、PDGを使用してプログラムを作成してみましょう。

プログラムの仕様は、先ほどの演習2と同じで、SW1または2を押し下げるごとに立下りエッジが入力されるため、これによりIRQ8とIRQ9の割り込み要求を発生させます。 SW1はLED2と3の点灯/消灯を制御し、SW2はLCDに表示されている24時間時計の開始/停止を制御します。 演習2では、周辺機能の各制御レジスタに対して直接値を設定していましたが、演習3ではPDGが自動生成したインタフェース関数(RAPI)を使用して、周辺モジュールの初期化および操作を行います。 演習ではこれらのインタフェース関数をコールして各モジュールの初期化と操作を行います。 青枠の虫食い部分を埋めてプログラムを完成させます。

 それぞれでコールするインタフェース関数は、このようになります。

 それでは、PDGでインタフェース関数を生成する手順について説明します。 PDGもHigh-performance Embedded Workshopと同様に、“プロジェクト”単位でファイルの自動生成を行いますので、まず『新規ファイル』を押し、作成する“プロジェクト名”と“生成ディレクトリ”を指定します。今回はプロジェクト名を“ext_int”、ディレクトリをこの場所とします。その後、対象となるCPUシリーズやグループを選択しますが、今回はディフォルトのまま『O.K.』ボタンを押します。するとこのようなGUI画面が表示されます。  まずは“SYSTEM”タブで、CPUの動作周波数などを設定します。今回は、周波数12.5MHzの水晶振動子を使用していますので、“EXTAL”を12.5とします。  システムクロック(ICLK)を8逓倍(100MHz)、周辺クロック(PCLK)を4逓倍(50MHz)、外部バスクロック(BCLK)を2逓倍(25MHz)にそれぞれ設定します。  次にI/Oポートを設定します。まずLEDが接続されているポート3を設定します。LEDはポート3のビット3とビット6に接続されていますので、それぞれこのビットをチェックし、方向を出力にします。

 次に、スイッチ1と2が接続されているポート0を設定します。SW1はビット0、SW2はビット1に接続されていますので、それぞれこのビットをチェックし、方向は入力に設定します。ここでポート0のビット0はIRQ8と、ビット1はIRQ9との多重端子となっているので、周辺機能(IRQ8,IRQ9)に外部信号を伝えるため、それぞれ“入力バッファ”を有効にしておきます。

 次にTMRの設定です。今回は2つあるユニットのうちユニット0の方を使います。まずは“ユニット0”をクリックします。動作モードは、今回カスケード接続させて“16ビットタイマモード”で動かします。  “カウントソース”は、1秒周期で割り込み要求を発生させたいので、PCLKの1024分周を選びます。続いて“カウンタのクリア要因”ですが、“今回はコンペマッチA”つまりコンスタントレジスタAとの一致でクリアさせます。これによりコンスタントレジスタAに設定する値が、割り込み発生周期となります。

次に、その割り込み発生周期を設定します。単位が最大で“ms”ですので、1000を設定します。これにより、“コンスタントレジスタA”に設定する値が自動的に計算されます。  次に割り込み要求を発生させる“要因”を選択します。TMRは3種類が選択できますが、今回は“コンペアマッチA割り込み”、つまり1秒周期で発生させます。この際、割り込み要求をどこに伝えるかを選択できますので、“CPU”へ要求します。“通知関数名”は、割り込みが発生した際にコールされる関数名のことです。あらかじめ、このように関数名が指定されていますが、名前は自由に指定できます。 ユーザは、ここで指定した関数、つまり“割り込み処理”のみ作成すればいいだけです。 最後に割り込み優先レベルをシステムに合わせて設定します。

 次に、外部割り込み端子の設定です。今回はIRQ8とIRQ9を使用しますので、それぞれこのチェックボックスをチェックします。“検出方法”は、今回IRQ8,IRQ9ともに立ち下りを選択します。  割り込み要求先は、TMR割り込みと同様“CPU”にします。割り込み優先レベルは任意で構いません。“割り込み通知関数”は、TMRの場合と同様、ディフォルトの関数名が表示されますが、変更しても構いません。外部割り込み端子の設定は以上です。

 これで、演習で使用するモジュールの設定は全て完了しましたので、最後に『ソース生成ボタン』を押して、インタフェース関数(RAPI)などのソースファイルを自動生成します。

 今回生成されたTMRおよび外部割り込み端子のインタフェース関数(RAPI)です。この他にもI/Oポート、システムクロックなどを初期化するインタフェース関数(RAPI)が生成されます。 ファイル名の部分をダブルクリックすれば、エディタを起動して直接ソースファイルを開くこともできます。

 次に、生成したソースファイルをルネサス統合開発環境(High-performance Embedded Workshop)に 登録します。  まず、PDGのメニュー「ツール」 の 「ファイルをHEWプロジェクトに登録」を選択します。 このメッセージウィンドウが出力されますので、登録したいHEWプロジェクトがアクティブになっているか確認後、「OK」ボタンを押します。次に“ライブラリリンク優先順位設定ウィンドウ”が出力されます。 PDGのライブラリが複数ある場合は、ここに2つ以上表示されます。今回はこのまま「OK」とします。  ルネサス統合開発環境(High-performance Embedded Workshop)への登録が完了すると、このメッセージが出力されますので、「OK」ボタンを押して、登録完了です。

 登録後、ルネサス統合開発環境(High-performance Embedded Workshop)のワークスペースウィンドウに“AddFromPDG”フォルダが追加され、このように自動生成されたソースファイル類が追加登録されます。  またPDGプロジェクト生成時に指定したディレクトリには、設定したモジュールごとにフォルダが作成されます。各フォルダには、自動生成したインタフェース関数などのソースファイルが入っています。  なおディレクトリ内に、インタフェース関数(RAPI)の“定義ファイル”も自動生成されますので、インタフェース関数(RAPI)をコールするアプリケーションファイル内でインクルードしてください。“定義ファイル”は、PDGプロジェクトと同一名で作成されます。

 最後に、High-performance Embedded Workshopのプロジェクトをビルドして、アプリケーションプログラムは完成です。