プロセッサーエキスパートの概要
マイコンを制御するプログラムを記述する場合、まず最初に考えなくてはならないのが、デバイスの設定です。IOポートの入出力やプルアップの有無、クロック周波数や割込み設定などマイコンの持つ機能(コンポーネント)を一通り把握してからでないと設定する事ができません。ところがデバイスが変わると設定するレジスタ名が違ったり、設定範囲が違ったりするので、一から確認しなければなりません。初期設定で、これらのレジスタを設定したコードを記述した後、デバイスを変更するとなると、一から始める事とあまり変わらなくなってしまいます。設定が間違っているめに、動作しない事も多々あります。デバイスメーカが違う場合、更に憂鬱な事になります。
プロセッサーエキスパートはこの憂鬱な気分を解消してくれる素晴らしいツールです。初期設定はもちろん、例えばIOポートではGetVal()という関数が用意されているのでポートの状態を直ぐに手に入れる事が出来ます。
デバイスを変更しても、違う部分のみにエラーが出るのでその部分だけ設定を変更すれば、すぐに動作します。プロセッサーエキスパートは、Bean(豆)と呼ばれる各種コンポーネント(機能)で構成されます。コンポーネントにはIO、Timer、割込み、AD変換、通信関係などマイコンに内蔵された機能を殆ど網羅しています。
下図がCodeWarriorのプロジェクトウィンドータブでProcessor Expertを選択した画面です。コンポーネントライブラリウィンドーでCPU Internal Peripheral(CPU内臓機能)フォルダを開いてPort I/Oを表示しています。BitIO・BitsIO・ByteIOの3つのコンポーネントが表示されています。このコンポーネントをダブルクリックするとプロジェクトウィンドーに追加する事が出来ます。追加されたコンポーネントの設定はコンポーネント管理ウィンドーに表示されますので必要設定値を入れるとコンパイル時に自動生成してくれます。設定内容にエラーがある場合は!マークが表示されエラーがある事を教えてくれます。プロジェクトウィンドーではDISPLAY:ByteIOというBeanの+をクリックして関数を表示しています。チェックマークが付いている関数は自動生成されるのでメインプログラムなどで使用する事が出来ます。右クリックでHelpを表示すればこの関数の引数や戻り値について知る事が出来ます。例えばGetVal関数をドラッグしてエディタウィンドーのソースコード上にドロップすると、この関数を呼び出す記述が追加されます。追加したコンポーネントには名前が付けられるので生成されたソースの管理や関数呼び出しも分かりやすくする事が出来ます。入出力コンポーネントの解説で自動生成する関数について解説します。
コンポーネントにカーソルを合わせ右クリックでメニューを表示させると下図のようにコマンドリストが表示されます。
Remove Component from Projyecyがこのコンポーネントの削除。Helpがこのコンポーネントの解説(英語)が表示されます。
【コンポーネントの解説】
【入出力コンポーネント】 BitIO・BitsIO・ByteIO。
ポート設定用コンポーネントです。1ポートを単独(Bit)に設定したり、複数(Bits)のポートを一括で扱ったり、バイト単位(Byte)で扱うように設定する事が出来ます。
【通信コンポーネント】 AsynchroSerial・SynchroMaster・SynchroSlave
シリアルコミュニケーション設定用コンポーネントです。AsynchroSerialはSCI(非同期シリアル通信)設定用コンポーネントでTxDとRxD端子を使って8ビットシリアル通信機能の設定が出来ます。
SynchroMaster・SynchroSlaveはSPI (シリアルペリフェラルインターフェース)設定用コンポーネントです。データ・クロック・ストローブ(チップセレクト)の3本の信号線でシリアル通信を設定します。
【コンバータコンポーネント】 ADC
ADコンバータ設定用コンポーネントです。
【判定コンポーネント】 Capture
キャプチャー設定用コンポーネントです。
【割込コンポーネント】 ExtInt・InterruptVecter
割込み設定用コンポーネントです。
【タイマーコンポーネント】 EventCntr16・EventCntr32・EventCntr8・FreeCntr・FreeCntr8・FreeCnt16r・FreeCntr32・PPG・PWM・RTIshared・TimerInt・TimerOut・WatchDog
イベントカウンタ・フリーカウンタ・プログラマブルパルスジェネレータ・PWM・タイマーアウトポート・ウォッチドックタイマ設定用コンポーネントです。
【初期設定コンポーネント】 Init_ACMP・Init_ADC・Init_COP・Init_FLASH・Init_GPIO・Init_IIC・Init_IRQ・Init_KBI・Init_MTIM・Init_RTC・Init_SCI・Init_SPI・Init_TPM・InterruptVector【割込み関数】
各コンポーネントの初期設定のみの設定用コンポーネントです。
各コンポーネントには割込みに関する設定が含まれています。割込みをイネーブルするとコンポーネント管理ウィンドーのGenerated Codeフォルダ内のVectors.cにジャンプ先がコンポーネント名.cファイルに自動的に記述され、Eventsコードファイルに割込み処理関数が自動的に用意されます。ユーザーはこのEvents.cファイルの関数の /* Write your code here ... */という記述以降に割込み処理を記述して利用する事が出来ます。