スポンサーサイト

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

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

CPLDからの割り込み処理をアセンブリ言語化しました。アセンブリ言語を書く上で参考にしたのは HEROさんの所の AVRinst.pdf と、Wiki と、ChaNさんのHP です。まー最も参考になったのは同様の処理をC言語で記載してavr-gccを通してできた .lst ファイルです。この中にはアセンブリ言語化された処理が記載されています。ただ、端折れるところも多々あるので、その点を上記 HPで学びました。

基本的には .lstファイルから不要と思われる処理を削除したり、メモリの配置やサイズを全体的に見直して早く処理できるように作り変えました。メモリの配置は前回記載した内容です。メモリのサイズとは、AVRは8bitマイコンなので16bitの演算には複数のオペコードを使用しなければなりません。なので、できるだけ8bitに収まる様にしました。read_buff[][]の後ろ側の配列要素は 512 ありますが、この値をそのまま持つのではなく、処理中は4byteの塊で処理するので 4で割った値を使用しました。これでMAX=127になり、最大値+1のインデックス=128 を合わせても 8bitで収まります。当然、この修正には割り込み処理内のみではなく、ファイル読み込み部分にも手を入れないといけなかったです。

出来上がったソースコードはこれです。
sdc_stream_mpu_ver_b1_20090629.zip

実行時の波形をロジアナで計測しました。

sdc_int_test_20090629_01

sdc_int_test_20090629_02

以前のプログラムではL-ch, R-chの出力に 4.1us かかっていたのに対して今回のは 0.64us です。割り込み処理全体ではもう少しかかるけど、かなり高速化しました。というか、前回のがアセンブラの事を考え無さ過ぎていたんですね。これの恩恵で、SDCの読み込み中の割り込み時間が短くなり、速度が上がっています。前回は CS信号のネガティブ期間が 1863.68us であったのに対して、今回は 2058.24us となりました。約 200us アイドル時間が増えました。

高速化できたし、アセンブリ言語の書き方も分ったので非常に満足しています。

int2____.c がアセンブリ言語の事を考慮してC言語で、できるだけ高速にしたファイルです。これをコンパイルして得られる int2____.lst 中に書かれているアセンブリ言語を大々的に参考にしました。

スポンサーサイト
黒ねこ時計 くろック D02
プロフィール

jujurou

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

カレンダー
05 | 2009/06 | 07
- 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 - - - -
最新記事
最新コメント
カテゴリ
ユーザタグ

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

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

FC2 Blog Ranking

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