シリアルOLED その2

Spin の速度があんまりだ、という感じなので、フレームバッファを用意して
シリアル転送を一括で行うアセンブリルーチンを作成することにしました。

1bit シリアル転送を CPU で行う場合、ピンの上げ下げを含めたループの最短は
28 クロックなので、読み書きの限界速度は約 2.8Mbps です。
(OLED モジュールの受け側が高速なので、Propeller 側でのウェイトは不要)

これを 96x64x16bit で割ると 29.06、これが1コアのCPU処理で出せる
最大フレームレートになります。実際はメインメモリからデータを読む部分や
ループ外の処理もあるため、20fps 前後でしょうか。

spi_asm オブジェクトを OLED ドライバ専用に改造して、
だいたい理論値付近が出るようになりました。

ここでふと気付いたのですが、SDカードドライバの fsrw の転送レートは
10Mbps を超えていました。CPU処理だけでは達成できない速度のため
ソースを読んでみたところ、内蔵カウンタ(ctra, ctrb)を使い 4クロックで 1bit を
読み書きする仕組みを作れるようです。転送速度は瞬間最大で 20Mbps に達し、
余裕の60fps動作が可能になります!これは取り入れるしかありませんね。

次回は、上記のテクニックを研究してもっと高速なOLEDドライバを作ります。

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。