スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

SDカード・トランスポータの作成(その18)

ようやく形になってきました。

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

sdc_int_test_20090620_01

sdc_int_test_20090620_02

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() を呼び出すだけですがね。

sdc_int_test_20090620_03

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

スポンサーサイト

コメントの投稿

非公開コメント

黒ねこ時計 くろック D02
プロフィール

jujurou

Author:jujurou
運営HP:チャコの部屋
Twitter:jujurou

カレンダー
07 | 2017/08 | 09
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 - -
最新記事
最新コメント
カテゴリ
ユーザタグ

ぺるけ RaspberryPi Linux トランジスタ式ミニワッター TRminiWatterPart4 MPD OpenOCD イーサネットコンバータ FON2405E DAC buildroot FM3ペリフェラル BeagleBoneBlack FM3評価ボード library OpenGL mingw ODROID-U2 TL-WR700N Edison bitbake KiCad 計測 VMware シングル FM4 ミニワッター 6N6P プリアンプ 

月別アーカイブ
ランキング

FC2 Blog Ranking

カウンター
検索フォーム
リンク
RSSリンクの表示
QRコード
QRコード
ライセンス
クリエイティブ・コモンズ・ライセンス
Twitter
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。