2012年4月30日月曜日

SPIコントローラの作成 7

リードの高速化について前回のブログに書いたとおり、先頭アドレスとデータ長を設定して起動したら連続してSPIサイクルを発生しデータを連続して送信するようにした。 データ長はCTLレジスタのbit31-12の20bitに割り当てることにし、レジスタ仕様は以下のようになった。


bit31-12を0にしての受信動作は従来と同じ動作となり、受信したデータはRXDレジスタをリード
することで得る。 bit31-12を0以上の値(データ長)にして受信動作を起動すると、設定回数分SPI
受信→UART送信動作を行う。 この機能を使う制御プログラムは以下のようになる。


処理時間は以下のようになった。

前回ブログと同じ256ワードのリードは0.42秒と6倍近く高速化できた。
また、256Kワード(1Mバイト)のリードも行ってみたところ、23.14秒になった。

UART I/Fは921600bpsで8bit,non-parity,1stopbitの設定で、また、通信フレームは従来通
りの8byte (STX,TYP,32bit_DATA,ETX,SUM)なので、256Kワードの転送時間の計算値は
(262144 x 8byte) / (921600 / 10bit) = 22.76秒であるので、ほぼUART側の上限値まで
高速化できた。  STX~SUM形式を止めて正味のデータ(32bit)だけを送信するようにすれば
さらに高速化可能だが変更の規模が大きくなっちゃうので、とりあえずはここまででいいかな。
次はライトの高速化を考えよう。

0 件のコメント:

コメントを投稿

ERROR: Failed to spawn fakeroot worker to run ...

なにかと忙しくてなかなか趣味の時間を確保できない。 ...orz  家の開発機のOSはLinux Mintなのだが、最近バージョンを22に更新したところ、myCNC用のpetalinuxをビルドできなくなってしまった。ビルドの途中で ERROR: Failed to spawn ...