EMILY BoardはマイコンATmega164を積んでいるのでそのためのソフトウェアが必要です。このソフトウェアは大きく分けて2つの機能を持っています。
- ユーザコマンド処理
UART0に接続されたターミナルから入力されたコマンドに従い、メモリの読み書き・I/Oリクエスト用のアドレス設定・ターゲットプロセッサのリセットなどを行ないます。
- I/Oリクエスト処理
ターゲットプロセッサからの要求に従い、I/O動作を行ないます。現在対応しているのはUART1を使用したコンソール入出力のみです。
メモリ容量がもう少し大きければSDカード等のアクセス機能を加えてCP/MといったOSを動かすことも視野に入るのですが、最大でも16kBではあまりに小さすぎます。プロセッサボードに128k×8bitのRAM載せることも検討してみたいです。
両機能は並列動作させなくてはなりません。RTOSがあれば簡単ですが、残念ながらAVR用に使えそうなものは見当たりませんでした。一発書いてみるのも面白そうですが、やりたいことに対して大げさすぎるように思います。
どちらの処理も待ちが多い(1.はUARTのステータス待ち、2.も共有メモリに要求が書かれるの待ち)ので待ちが発生したらもう一方の処理にスイッチするという方法もあります。
割り込みを使用する方法もあります。1.はUART割り込みが利用できますが、DPSRAMは割り込みを発生できません。ターゲットプロセッサからの書き込みを検出する(ワークエリアなどへの書き込みでも検出してしまいますが)回路を追加するか、タイマ割り込みでポーリングする必要があります。
1.の機能はUniversal Monitorをベースにして先に動作していましたのでこれはそのままにして、タイマ割り込みを使用することにしました。RESETのパルス幅を決めるための0.2ms周期の割り込みで2.の共有メモリのポーリングを行なっています。UARTは9600bpsなのでポーリング頻度は十分ですが、UART以外の機能を追加するに際しては再検討が必要かもしれません。