...というか、RS-232C ボードの作成のきっかけも、音声合成のLSIの解析をしようと思っていたからでした。
というわけで、解析用のボードを作りました。
音声合成LSIは、CPUインタフェースからパラメータを設定すると、音声データを出力します。この出力は2種類あって、1つはアナログデータで、そのまま音声データとして使えます。
もう一つは、アナログデータをD/Aする前のデジタルデータが出力されています。今回はこれを取り込んで解析に使用します。
デジタルデータはシリアルで出力されます。タイミングは下図の通りです。
パルス幅などが書かれていないのは手抜きです。VCK の立下りの間隔は、3.6MHz クロックで6クロック分です(1.67μS)。
他の人が使う事がないと思いますが、参考のために回路図とAVRのプログラムを載せておきます。
今回は AVR を使用しました。AVR のテスト用に購入した AT90USB162 が搭載されているデータを使用しました。
音声合成ボード(AVRプログラム)
ちなみにボードの詳細はここ。
http://strawberry-linux.com/products/at90usb162/spec.php
USB からプログラムを書き換えられるので便利かなーと思ったので、これにしました。
ヒューズビットの読み書きをした場合には、ISPライタが必要になります。このボードを使っている分には必要ないかとは思います。
私は、LPTから接続できるISPライタを自作しました。
プログラムの構成自体は簡単で、VCK の立下りで DVO を取り込み1ビットシフト、VSTB の立ち上がりでデータを確定させてデータを送信するだけです。
これだけなんですが、VCK の立下りがくる間隔が 1.67μs 毎です。
これは、16MHz で数えると26クロックぐらいなので、 AVR では結構厳しいものがあります。
ですので、AVR のプログラムは、割り込みルーチンをアセンブラで書いています。さらに、SREG 待避とデータ取り込み専用のレジスタを設けています(メインプログラムからは使われない)。
取り込んだデータは USART を通して、RS-232C経由でパソコンに送信します。計算上は、ボーレートが250Kbps もあれば十分なはずなんですが、なぜか安定しませんでした。500Kbps にすれば安定的に送信できましたので、今の値になっています。