スパイス  組み込み制御装置の受注製作

ライブラリの導入
平成27年 4月24日

 PIC32の周辺機能(USART)を活用する
 また暫く更新出来ませんでした。
これから数回に分けてUSARTの実装を行います。
PIC32を採用するメリットは幾つかありますが、その中でも比較的魅力的なのが周辺機能の多くにFIFOが実装されていることです。
PIC32ではUSARTやSPIなどの周辺機能に8バイトのFIFOが実装されています。これがPIC24だと4バイトに減少するので魅力も半減します。
USARTやSPIを使用する場合に一番機を使うのは、「どの程度の速度までならデータを取りこぼさずに通信できるか」ですが、FIFOのおかげで8バイトまでは取りこぼしの心配はありません。つまり、8バイト単位でブロック転送を行えば通信速度は非常に高速であっても問題はない事になります。
(H27/05/01追記訂正)
 PIC32のデバイス仕様を細部まで確認していなかったため誤りがありました。PIC32はUSART、SPI共に8バイトのFIFOを実装していますが、USARTの受信ではFIFOが一杯になった状態で割り込みを起動できません。最大でもFIFO容量の3/4である6バイト受信で割り込みを発生させるのが最大です。このため、当初は8バイトを1ブロックとして転送することを前提にしていましたが、確実に動作させるなら6バイトを1ブロックとして動作させることになります。既存の文書は順次訂正していきます。
 また、SPIではFIFOフルで割り込みを起こせます。

なお、本文書の各所で上記で説明した8バイト1ブロックから6バイト1ブロックとする変更を行っています。
(追記ここまで)

図に示すと次のようになります。
最初に8 6バイトのブロックを転送後、受信側が受信処理を終わらせるのに十分な時間だけ送信を一時中断します。
その後再び8 6バイトブロックの転送を行うようにすれば、通信速度は非常に高速であっても何の問題も起きません。
当然、通信ケーブルと環境からの制約は受けますが。
送信側 [6バイトブロック]|[決められた待ち時間]  |[6バイトブロック]|
-------------------------------------------------------------------------------
受信側                   |[受信処理]            | 

 例として、通信速度を1Mbps、待ち時間を500usとすると、8 6バイトの通信時間は僅か80 60usです。
受信側は待ち時間以内に割り込み処理を受け付けて次の受信データに備えることが出来れば通信は成功します。
通常なら、割り込みに許される処理時間は1バイト分の通信時間です。処理時間500usなら通信速度は概ね19.2Kbps(19,200bps)に相当します。
つまり、19.2Kbpsの応答速度でおよそ140Kbps相当(80bits/580us) 110Kbps(60bits/560us)の通信が行えます。
実際には処理の開始をポーリングで検出することになるのでもう少し遅くはなりますが、それでも非常に魅力的な性能です。

    制約:
 この方法は非常に魅力的ですが通信相手も同じように8 6バイトのFIFOを実装しているか、DMA転送のように高速な通信速度に対応できるだけのハードウェア性能が必要です。安価な8ビットや16ビットのマイコンではほとんど対応できません。
現状では通信相手もPIC32である(安価なDIP品でも十分)か、ある程度の規模の32ビットマイコンであることが条件になります。
つまり、送受信ともに新規開発の案件でしか使えません。

 デバッグのことを考えると複数のPIC32を扱うのは面倒なので、1個のPIC32に送信と受信のプログラムを別のタスクとして動作させることにします。そのために、USARTのCH番号を比較的簡単に変更できるようにプログラムしておきます。
 具体的には、初期化の段階で使用するUSARTのCH番号を指定するようにします。幸いPIC32のUSART機能は基本的に全て同じ機能を実装しているので面倒がありません。






目次へ  前へ  次へ