久々にAT91SAM7を使う。頼まれ事があり、USBとRS232Cシリアルの変換をAT91SAM7Sを使って製作。SAM7-H256にレベル変換のADM3202ANを付けただけのようなものです。DB9コネクタは、オスとメスの両方を準備。秋月のDサブ9P基板(小)がちょうどいいサイズでした。これで、オス/メスが合わないために、ケーブル継ぎ足したりする面倒から少しは解放されるでしょう。今のところ、ストレート結線しか必要ないですが、ジャンパつけ足してクロス/ストレートの変更も可能にできますし。
ソフトの方は、ATMELの提供しているサンプルを使うつもりでいたのですが、ボーレートが115200bpsで初期化されたまま変更できないようです。そこで、いつも自分がデバックコンソール用に使っていたコードを変更することに。処理としては、USBから受信したものをUSARTに送り、USARTから受信したものをUSBに送るという、簡単なブリッジをすればいいだけのものです。それでもSAM7らしさは出したいので、USARTの送受信にはPDCによるDMAを使っています。
DMAでの転送量はUSBのバルク転送に合わせて最大64バイトに。送信の時は、送信したいデータ量に合わせてDMAすればいいのですが、受信の時には64バイト受信するまで待ち続けるわけにはいきません。そこで、一定時間あらたな入力が無い場合にはタイムアウトにより、DMA待ちから抜けるようにします。普通ならタイマが必要となる処理ですが、AT91SAM7のUSARTには受信タイムアウト機能が用意されており、USART単独でこのタイムアウト機能が実現できて大変便利です。
ソフトの方は、ATMELの提供しているサンプルを使うつもりでいたのですが、ボーレートが115200bpsで初期化されたまま変更できないようです。そこで、いつも自分がデバックコンソール用に使っていたコードを変更することに。処理としては、USBから受信したものをUSARTに送り、USARTから受信したものをUSBに送るという、簡単なブリッジをすればいいだけのものです。それでもSAM7らしさは出したいので、USARTの送受信にはPDCによるDMAを使っています。
DMAでの転送量はUSBのバルク転送に合わせて最大64バイトに。送信の時は、送信したいデータ量に合わせてDMAすればいいのですが、受信の時には64バイト受信するまで待ち続けるわけにはいきません。そこで、一定時間あらたな入力が無い場合にはタイムアウトにより、DMA待ちから抜けるようにします。普通ならタイマが必要となる処理ですが、AT91SAM7のUSARTには受信タイムアウト機能が用意されており、USART単独でこのタイムアウト機能が実現できて大変便利です。