--/--/--  --:--    スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
2010/09/06  00:56    XMEGAでUART&EBI
久しぶりにXMEGAについてです。
今回は、UART(USART)とEBIを試してみました。

P1020201.jpg
一応試している回路の全体像です。
XMEGAに秋月300円液晶とSRAM(CY62128EV30)を接続しています。
SRAMをつなぐことによって、今まではFLASH上に定数配置していた
イメージデータをSRAMに置くことができるようになるので、
読み出し速度の向上(結果的にはSRAMが45nsなのであまり向上しなかった)と
何かしらの方法で外部からイメージデータを転送してSRAMに格納し、
表示することができるようになります。

P1020203.jpg
SRAMはEagleにて変換基板を設計し、学校の基板加工機で削って実装しています。
以前にも少し書いた覚えがありますが、
XMEGAではついにラッチを使うことなくバスを出せるようにもなりました・・・が、
今の所XMEGAのシリーズで物理的にPORTLが存在しないのでラッチを付ける必要があります。
今回は変換基板の裏側に74AC573を実装しており、A0~A7とA8~A15を多重化しています。
まだ登場してあまり時間が経っていないせいか、
まだまだデータシートには不明確だったり分かりづらい部分が多くありました。
例えば、EBIは最大64MHzで動作可能と書かれており、
最初はタイミング表を見ていたのでシステムクロックである
32MHzを2逓倍してEBIは動いてくれているのだと思っていましたが、
ねむいさんのぶろぐ - いろいろ試す4
にてバスの64MHz動作の注意について書かれていたので、
32MHz内蔵発振器をCLKSYSに使うとバスも32MHzで動作してしまっているようです。
私は現状は32MHzのままで動作させていますが、
64MHzでバスを動作させたい方は注意が必要です。

EBIを使った時の感じとしては、

WinAVRにてXMEGAから可能になったメモリ空間0xFFFFを超えるアクセスができません。
(強引にレジスタをいじると一応できます)
例えば0x10000にアクセスしようとすると0x0000にアクセスしてしまうようです。
以前Twitterにていえなが氏も同じ現象に出くわしている事をお聞きしたので、
まだ対応できていないと思われます。

また、外部SRAMと内部レジスタなどがアドレス的に重複している場合は、
CSが下がらない?(波形は未確認)ため干渉してしまうことはなさそうです。
今回は64KB(このSRAMは128KBであるが64KBとして使用)で、
ベースアドレスを0x0000に設定しましたが、
内部予約分0x3FFFまでは内部を使用し0x4000~0xFFFFは外部SRAMを使用できました。


SRAMにROM上配列を展開し、SRAMから液晶にデータを転送して表示させようとしましたが、
なぜかデータが化けるので、デバッグのためにUARTを使用しました。
モニタは有名なChaN氏が公開されている汎用printfモジュールを実装しました。
uartの受信・送信用の関数を用意して関数ポインタを渡してあげれば、
printfなどが使えるようになり、とても便利でした。
あわせて、同氏が公開されているI/F誌付録LPC2000基板の試食のソースを参考に、
簡易モニタを実装してメモリをDumpしながらデータ化けの原因を探しました。
結果、例えば0x8000にデータを書き込むと、
0x8002、0x8004が同じようにデータが変化したため、配線不良であると予測しました。
SRAM変換基板のSRAMの足を再度半田付けし直したところ、正常に動くようになりました。
やはりモニタが使えるとだいぶデバッグが楽に行えてモニタのすごさを実感しました。

せっかくなので、UARTから表示データを転送し、
SRAMに格納して秋月液晶に表示出来るようにしてみました。
これがまた一難ありまして、
バイナリデータをターミナルから送信すればいいと思っていたので、
C#にてBMP変換ソフトバイナリ形式出力対応版を作成し、
モニタのコマンドにてバイナリファイルを受け付ける用にしてみましたが、
なぜかうまくいかないので、悩んでいたところ
ターミナル(私はTeratermを使用しています)は基本文字データのやりとりしかできず、
色々なプロトコルにてバイナリデータ転送も出来るようになっていることがわかりました。
わざわざプロトコルに対応させるのは面倒だったので、
出力データ1Byteを4bitずつに分割し0x30と足しあわせ、
数字・記号データとして転送するように工夫して転送するようにしました。
データの転送量は基データの2倍になってしまいましたが、
ターミナルからイメージデータを転送できるようになりました。
バイナリデータは76KBで、UART-9600bpsにて約101秒で転送できました。

P1020204.jpg
試しにWEBページのロゴを転送して表示してみました。
PCからバイナリデータを転送すればいいので、
わざわざFLASHに画像データを書き直すという事をしなくても、
様々な画像を表示できるようになりました。
ただし、電源を落とすとSRAMなのでもちろん消えますが・・・

今回のソースを一応置いておきます。自己責任にてお使いください。
人に見せられるようなプログラムではないですが、少しでも参考になれば幸いです。
xmega_lcd_sram_uart.txt
(拡張子をtxtからzipに戻してから解凍してください)
Secret

TrackBackURL
→http://amenotiyukizora.blog76.fc2.com/tb.php/339-60224f66
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。