PSoCマイコンのファームウェア開発はPSoC Designerを用いるのだが、この上でいきなりソースコードを書き始めるわけではなく、ユーザーモジュールデザインという行程を経てからソースコードの記述を行う。

図13: モジュールデザイン画面

このユーザーモジュールデザインがPSoCの最大の特徴ともいえるので説明しておこう(図13)。

PSoCマイコンの内部には「デジタルブロック」と「アナログブロック」と呼ばれるブロックエリアと、それらを結ぶセレクタブルな内部バスが存在している。

通常のマイコンではカウンターがいくつとか、PWMがいくつにADCがいくつと型番によって周辺モジュールが固定されており、それらが使えるピンも固定で、GPIOとどちらを使うかといった形でスイッチする。PSoCマイコンではそういった周辺モジュールをユーザーが自由に選択して配置でき、入出力のピンもある程度ソフトウェアで配線できる。それがユーザーモジュールデザインである。

これによってブロックが埋まるまで好きなだけADCを置いたり、全部PWMにしてハードウェアモジュールにサーボコントロールさせたりと自由な設計を行える。また、これらモジュールデザインはファームウェアから動的に切り替えられるので、状況に応じてまったく違う機能のマイコンになるといったことも可能である。

さて、今回の"かなで"ではMIDIプロトコルを受け取るので、8bitシリアルモジュールである「RX8」を配置する。MIDIの出力はしないのでReceiveモジュールだけで良いという設計である。シリアル通信のボーレートはこのRX8に与えるクロックで設定するのだが、3,1250bpsになるちょうどよいクロックを与えるために、8bitPWMである「PWM8」を隣に配置し、48MHzのシステムクロックを1/192に分周している。

もう1つの8bitPWMと16bitPWMの組は、MIDI入力を音として出力するための分周機と矩形波出力のモジュールとなる。MIDIからA3のノートがやってきたら、ちょうど440Hzの分周になるようPWMのカウンタを設定してやる。こうすることで、耳に聞こえる「音」が出力される。このPWMの設定を変えることでサーボのコントロールも行えるので、内部モードによってはデューティー比可変の15msサーボコントロールPWM出力となるようにプログラムすることにした(図14)。

図14: 内部配線の拡大図

これら必要なモジュールを配置したら、設計通りのピンに入出力が割り当てられるように配線を切り替えていく。

モジュールの配置と設定が終わったらコンフィギュレーションを書き出す。書き出し終わると、プロジェクトに配置したモジュールへのアクセスライブラリが自動的に追加される。これらモジュールのライブラリがあらかじめ用意されている点が、PSoCでの開発を容易にしている一因でもある。

さて、無事書き出し終わったらソースコード編集モードへと移ろう。

ソースコードの編集モード

図15: ソースコード編集モード

ソースコードの編集モードは一般的な開発環境の画面となっている(図15)。特に混乱をきたす要素はないだろう。

PSoC Designerでは、開発とデバッグの環境を提供しており、一般的な開発と同じくデバッグもシームレスに行えるようになっている。しかし、デバッグには373.75米ドルもするICE Debugger Kitが必要で、PSoC MiniProgではデバッグは行えない。このため筆者は、デバッグモードを使わずに開発を行っているが、そこはエンジニアの腕の見せ所である。LEDやLCDモジュールをつないでいろいろ表示できるようにすればなんとかなるものですよ、と言っておこう。

無事ビルドが終わってファームウェアイメージができあがったら、それをマイコン内部のフラッシュROMに書き込む。組み込み系ではこの作業をプログラミングという。ファームウェアそのものの開発と混同しないように注意してもらいたい。

PSoCマイコンへの書き込みはPSoC ProgrammerとPSoC MiniProgによって行う(図16図17)。

図16: PSoCProgrammerの画面写真

図17: PSoC MiniProgを接続している写真

プログラマによってファームウェアをマイコンに書き込んだら、そのファームウェアが動き出す。これで自作コントローラの完成だ。

今回は開発手順を中心に説明を行った。ファームウェアのコードについては解説を省かせてもらったが、C言語で書いてある上そんなにステップ数もないので、プロジェクトファイルの実際のコードを参照していただきたい。