SDカード・トランスポータの作成(その18)
ようやく形になってきました。
昨日作った擬似CPLD-INT(ATtiny2313で作成)で22us間隔で割り込みを発生させてデータを出力し、同時にSDCからデータを読み込むといった事が両立するか確認しました。PLAY, POUSE, SKIP, STOP相当の機能を入れ込んで状態遷移させているのでこれらの機能も確認しました。と言っても、まだ実際に音を聞ける段階にないのでロジアナで出力波形&内容を確認しただけですけどね。


CPLDへのデータはL-chのLow byteを設定し、High byteを設定の後、LATCH信号に立ち下がりエッジを発生させてL-chのデータ(16bit)をCPLDへ取り込みます。その後、R-chのLow byte、High byteを設定します。R-chのデータの取り込みはCPLDがINT信号を出す直前に自動的に行い、このタイミングのL-ch, R-chを採用する事にしています。設定開始から終了まで4usかかっている様なので残りの18usで他の処理ができれば良いわけです。
連続実効中のSDCへのデータ取得は1863usの余裕があるみたいなので、その間にファイル検索や操作系側のマイコンへのデータ通信を行う事ができます。といってもこの読み込み量はあからさまに512byte分です。5倍(512x5=2560byte)のバッファを持っているので演奏中に2,3回 SDCへアクセスしても何とか間に合いそうです。
プログラムはこれです。
sdc_stream_mpu_ver_b0_20090620.zip
ROM: 11564 byte
RAM: 3778 byte
プログラム中のEX-OR(ビット毎の排他的論理和)は対応するビットを '0' にするための演算です。ビット反転して論理積をとってもいいが、場合によっては CBI 命令に変換されてしまい、2サイクルかかります。その点、EX-ORを使えば 1サイクルの EOR 命令が使用されます。この事は…何処かのサイトで知りました。
それと、CPLDからの外部割込み(INT2)の処理を最優先に扱うために、その他の割り込みでは多重割り込みを許しています。割り込み処理中で sei() を呼び出すだけですがね。

CPLDへ繋ぐ端子の状態を計測する為にロジアナに繋いだのでブレッドボード上の配線がすごい事になってます。最終的には ATmega644Pの全ての端子を使う事になるのでテスト期間中はまだ増えそうです。
昨日作った擬似CPLD-INT(ATtiny2313で作成)で22us間隔で割り込みを発生させてデータを出力し、同時にSDCからデータを読み込むといった事が両立するか確認しました。PLAY, POUSE, SKIP, STOP相当の機能を入れ込んで状態遷移させているのでこれらの機能も確認しました。と言っても、まだ実際に音を聞ける段階にないのでロジアナで出力波形&内容を確認しただけですけどね。


CPLDへのデータはL-chのLow byteを設定し、High byteを設定の後、LATCH信号に立ち下がりエッジを発生させてL-chのデータ(16bit)をCPLDへ取り込みます。その後、R-chのLow byte、High byteを設定します。R-chのデータの取り込みはCPLDがINT信号を出す直前に自動的に行い、このタイミングのL-ch, R-chを採用する事にしています。設定開始から終了まで4usかかっている様なので残りの18usで他の処理ができれば良いわけです。
連続実効中のSDCへのデータ取得は1863usの余裕があるみたいなので、その間にファイル検索や操作系側のマイコンへのデータ通信を行う事ができます。といってもこの読み込み量はあからさまに512byte分です。5倍(512x5=2560byte)のバッファを持っているので演奏中に2,3回 SDCへアクセスしても何とか間に合いそうです。
プログラムはこれです。
sdc_stream_mpu_ver_b0_20090620.zip
ROM: 11564 byte
RAM: 3778 byte
プログラム中のEX-OR(ビット毎の排他的論理和)は対応するビットを '0' にするための演算です。ビット反転して論理積をとってもいいが、場合によっては CBI 命令に変換されてしまい、2サイクルかかります。その点、EX-ORを使えば 1サイクルの EOR 命令が使用されます。この事は…何処かのサイトで知りました。
それと、CPLDからの外部割込み(INT2)の処理を最優先に扱うために、その他の割り込みでは多重割り込みを許しています。割り込み処理中で sei() を呼び出すだけですがね。

CPLDへ繋ぐ端子の状態を計測する為にロジアナに繋いだのでブレッドボード上の配線がすごい事になってます。最終的には ATmega644Pの全ての端子を使う事になるのでテスト期間中はまだ増えそうです。
スポンサーサイト