この日本語版文書は参考資料としてご利用ください...

22
2017 Microchip Technology Inc. DS90003156A_JP - p. 1 TB3156 はじめに UART は、デバイス間でデータをシリアル転送するた めの通信ハードウェアです。8 ビット PIC ® マイクロ コントローラが内蔵する UART モジュールには、以下 3 種類があります。 USART (Universal Synchronous Asynchronous Receiver Transmitter) EUSART (Enhanced Universal Synchronous Asynchronous Receiver Transmitter) プロトコル サポート付き UART (Universal Asynchronous Receiver Transmitter) USART は、従来型 PIC MCU のほとんどが内蔵してい ます。USART は、ハードウェア UART の基本機能 ( 非同期送受信等 ) に加えて、同期マスタおよびスレー ブモードでの動作が可能です。EUSART は、USART に比べて拡張された機能 ( ブレーク キャラクタのサ ポート、 LIN 向けの自動 baud レート検出機能等 ) を備 えています。 EUSART は、拡張ミッドレンジおよびハ イエンド デバイスが内蔵しています。プロトコル ポート付き UART は、各種標準プロトコル (DMX512DALI (Digital Addressable Lighting Interface)LIN (Local Interconnect Network) ) のハードウェア ポートを備えた最新の UART モジュールです。このタ イプの UART は、PIC18FXXK42 ファミリ等が内蔵し ています。8 ビット PIC MCU 1 つまたは複数の UART モジュールを内蔵しています。 本書には、UART モジュールが備える各種機能の概要 を記載しています。また、幅広いアプリケーションへ の実装が可能なこれらのモジュールの堅牢性と柔軟性 を示すため、サンプル コンフィグレーションも記載し ています。 機能とプロトコル サポート デバイス間で信頼性の高いシリアル通信を維持すると 共に、データ転送中のソフトウェアの介入を最小限に するため、ハードウェアは割り込み駆動型の送受信、 FIFO バッファリング、エラー検出をサポートします。 一部のデバイスは、先進機能としてパリティ、チェッ クサム計算、標準プロトコル ( LINDMXDALI ) のハードウェア サポート等も提供します。 Note: 特に明記しない限り、本書では「UART ジュール」という呼称を 3 種類のモジュー (USARTEUSART、プロトコル サポー ト付きUART) の全て指す意味で使います。 Author: Mary Tamar Tan Microchip Technology Inc. 8 ビット PIC ® マイクロコントローラの内蔵 UART モジュール 注意 : この日本語版文書は参考資料としてご利用ください。最 新情報は必ずオリジナルの英語版をご参照願います。

Upload: doankhanh

Post on 27-Oct-2018

282 views

Category:

Documents


0 download

TRANSCRIPT

TB31568 ビット PIC® マイクロコントローラの内蔵 UART モジュール

注意 : この日本語版文書は参考資料としてご利用ください。最新情報は必ずオリジナルの英語版をご参照願います。

はじめに

UART は、デバイス間でデータをシリアル転送するための通信ハードウェアです。8 ビット PIC® マイクロコントローラが内蔵する UART モジュールには、以下の 3 種類があります。

• USART (Universal Synchronous Asynchronous Receiver Transmitter)

• EUSART (Enhanced Universal Synchronous Asynchronous Receiver Transmitter)

• プロトコル サポート付き UART (Universal Asynchronous Receiver Transmitter)

USART は、従来型 PIC MCU のほとんどが内蔵しています。USART は、ハードウェア UART の基本機能( 非同期送受信等 ) に加えて、同期マスタおよびスレーブモードでの動作が可能です。EUSART は、USARTに比べて拡張された機能 ( ブレーク キャラクタのサポート、LIN 向けの自動 baud レート検出機能等 ) を備えています。EUSART は、拡張ミッドレンジおよびハイエンド デバイスが内蔵しています。プロトコル サポート付き UART は、各種標準プロトコル (DMX512、DALI (Digital Addressable Lighting Interface)、LIN(Local Interconnect Network) 等 ) のハードウェア サポートを備えた最新の UART モジュールです。このタイプの UART は、PIC18FXXK42 ファミリ等が内蔵しています。8 ビット PIC MCU は 1 つまたは複数のUART モジュールを内蔵しています。

本書には、UART モジュールが備える各種機能の概要を記載しています。また、幅広いアプリケーションへの実装が可能なこれらのモジュールの堅牢性と柔軟性を示すため、サンプル コンフィグレーションも記載しています。

機能とプロトコル サポート

デバイス間で信頼性の高いシリアル通信を維持すると共に、データ転送中のソフトウェアの介入を最小限にするため、ハードウェアは割り込み駆動型の送受信、FIFO バッファリング、エラー検出をサポートします。一部のデバイスは、先進機能としてパリティ、チェックサム計算、標準プロトコル ( LIN、DMX、DALI 等 )のハードウェア サポート等も提供します。

Note: 特に明記しない限り、本書では「UART モジュール」という呼称を 3 種類のモジュール (USART、EUSART、プロトコル サポート付きUART)の全て指す意味で使います。

Author: Mary Tamar TanMicrochip Technology Inc.

2017 Microchip Technology Inc. DS90003156A_JP - p. 1

TB3156

表 1 に、8 ビット PIC マイクロコントローラが内蔵する 3種類のUARTモジュールの機能を比較した一覧を示します。

表 1: サポートする機能とプロトコル

ハードウェア機能 USART EUSART プロトコル サポート付き UART

全二重非同期送受信

半二重同期マスタ —

半二重同期スレーブ —

2 キャラクタの入力バッファ

1 キャラクタの出力バッファ

設定可能キャラクタ長 8/9 ビット 8/9 ビット 7/8/9 ビット

第 9 ビットによるアドレス検出 —

第 9 ビットによる偶数 / 奇数パリティ — —

入力バッファ オーバーラン エラー検出

受信キャラクタ フレーミング エラー検出

ハードウェア / ソフトウェア フロー制御 — —

自動チェックサム — —

設定可能なストップビット数 — — 1、1.5、2設定可能なデータ極性 —

マンチェスタ エンコーダ / デコーダ — —

baud レートの自動検出と校正 —

ブレーク受信時の復帰 —

ブレーク周期の自動生成 — 固定 13 ビット キャラクタ

LIN および DALI 向け自動ブレーク周期とユーザによるタイミング設定

サポートするプロトコル

LIN マスタ / スレーブ — —

DMX モード — —

DALI 制御ギアおよび制御デバイス — —

DS90003156A_JP - p. 2 2017 Microchip Technology Inc.

TB3156

同期モード

USART と EUSART の「S」は「Synchronous」( 同期 )を意味します。「同期」とは、デバイス間のデータ転送がクロック信号に同期する事を意味します。この種の通信では、非同期システムで使われる信号方式(スタートおよびストップビット等 ) を使いません。

一般に、同期通信は 1 つのマスタと 1 つまたは複数のスレーブで構成されるシステムで使います。マスタデバイスは baud レート生成用の回路を備え、システム内の全てのデバイスにクロックを供給します。スレーブデバイスはクロック生成用の内部回路を備えず、マスタから供給されるクロックを使います。

同期モードでは、2 本のマイクロコントローラ ピン(RX/DT と TX/CK) を使います。RX/DT は双方向データラインであり、TX/CK はクロックラインです。スレーブは、マスタから供給される外部クロックを使って、シリアルデータを受信シフトレジスタにシフトインし、送信シフトレジスタからシフトアウトします。データラインは双方向であるため、同期動作は半二重のみです。半二重では、データを双方向 ( マスタからスレーブ、スレーブからマスタ ) に伝送できますが、両方が同時に送信する事はできません。USART および EUSART モジュールはマスタデバイスとしてもスレーブデバイスとしても動作できます。代表的な回路を図 1 に示します。

図 1: 同期通信の構成

同期マスタモード

同期マスタモードでは、マスタは TX/CK ラインを介してクロックを送信します。Microwire と互換とするため、クロックの極性は選択可能です。図 2 を参照してください。

モジュールを同期マスタ動作向けに設定した場合、送信中に RX/DT および TX/CK ピンの出力ドライバが自動的に有効になります。データビットは、RX/DT ピンを介してシフトアウトされます。各データビットはマスタクロックの前縁で変化し、次のクロックの前縁まで有効です。

図 2: データとクロックの同期

同期マスタが受信中である時、RX/DT ピンの出力ドライバは自動的に無効になります。クロックサイクルは連続的に生成するか、1 キャラクタ内のデータビットの数だけ生成するように設定できます。

同期スレーブモード

スレーブは、TX/CK ラインでクロックを受信します( 図 1 参照 )。デバイスを同期スレーブ送信または受信動作向けに設定すると、TX/CK ピンの出力ドライバは自動的に無効になります。シリアルデータ ビットは各クロックの前縁で遷移し、そのクロックの後縁で確定値を取り込みます。1 クロックサイクルあたり 1 ビットのデータを転送します。データビットの数だけクロックサイクルを受信します。

8-bit PIC® MCU

USARTor

EUSART

RX/DT

TX/CK

8-bit PIC® MCU

USARTor

EUSART

RX/DT

Master Slave 1

TX/CK

Data Line

Clock Line

8-bit PIC® MCU

USARTor

EUSART

RX/DT

Slave n

TX/CK

•••

bit 0 bit 1 bit 2 bit 3 bit 4 bit 5 bit 6 bit 7RX/DT pin

TX/CK pin(SCKP = 0)

TX/CK pin(SCKP = 1)

2017 Microchip Technology Inc. DS90003156A_JP - p. 3

TB3156

非同期送信

PIC18FXXK42 の UART モジュールのブロック図を図 3 に示します。PIC18FXXK42 は、プロトコル サポート付きUARTを実装した最初の 8ビットPICマイクロコントローラ ファミリです。

図 3: UART送 信ブロック図

送信は、送信バッファ (UxTXB) に 1 キャラクタを書き込む事によって開始します。それが最初のキャラクタである場合、または前のキャラクタが TSR から完全に送信された後である場合、UxTXB に書き込まれたデータはただちにTSRへ転送されます。TSR内の前のキャラクタの送信が完了するまで、新しく書き込まれたキャラクタデータはUxTXB内で保持されます。UxTXB内で保留中のキャラクタは、前のキャラクタのストップビットの送信が始まった時点で TSR へ転送されます。前のキャラクタの全てのストップビットの送信が完了すると、ただちに次のスタートビット /データビット / ストップビット シーケンスの送信が始まります。

UxCON0 レジスタの TXEN ビットをセットすると、トランスミッタが有効になります。TSRは、UxBRGH:UxBRGLレジスタと UxCON0 レジスタの BRGS ビットによって決まるレートで、データビットをシフトアウトします。UART モード (7 ビット、8 ビット、アドレスビットまたはパリティビット付き8ビットのいずれか )は、UxCON0 レジスタの MODE<3:0> ビットで選択します。

UART 送信出力 (TX_out) は、ペリフェラル ピンセレクト (PPS)モジュールのRxyPPSレジスタで選択したTX ピンから出力できます。TX_out は、他の内蔵周辺モジュール ( 構成可能なロジックセル (CLC) 等 ) への入力としてソフトウェアで設定する事もできます ( 対応する周辺モジュール レジスタで設定 )。TX_out を他の周辺モジュールの入力へ内部接続する事により、外付けの配線を省略できる他、2 本のデバイスピン (TXピンと周辺モジュール入力ピン ) を他の機能向けに解放できます。

2 個のフラグビット (UxTXIF、UxTXMTIF) により、トランスミッタのステータスが示されます。UxTXIF 送信割り込みフラグビットは、UxTXIE 送信割り込みイネーブルビットの状態に関係なく、UxTxB がエンプティの時にセットされます。UxTXIF ビットは、UxTXBにキャラクタが格納され、かつ TSR 内のキャラクタの送信が完了していない時にだけクリアされます。もう1 つの UxTXMTIF ビットは、TSR がエンプティになるとセットされ、UxTXB から TSR レジスタにキャラクタが転送されるとクリアされます。これらの 2 つのフラグビットは、モジュールへのデータの書き込み方法(割り込み方式かポーリング方式か )に応じて実装されます。

Note: デバイスによっては、送信ブロック図とレジスタ名およびビット名が異なる場合があります。詳細は各デバイスのデータシートを参照してください。

UxTXB Register

• • • Transmit Shift Register (TSR)

(8) 0

MSb LSb

Data Bus

UxTXIF

UxTXIEInterrupt

Mode Control PPS

RxyPPSTX pinTXEN

UxBRGH UxBRGLBRGS

Multiplier x4 x161 0

+1

÷nFoscBaud Rate Generator Address or

Parity ModeTXMTIF TX_out

UxTXCHK8

+

n

DS90003156A_JP - p. 4 2017 Microchip Technology Inc.

TB3156

非同期受信

PIC18FXXK42 の UART レシーバのブロック図を図 4に示します。

Rx ピンは、PPS モジュールの RXPPS レジスタで選択します。UxCON0 レジスタの RXEN ビットをセットすると、UART のレシーバ回路が有効になります。RX ピンで受信したデータがデータ復元ブロックを駆動します。データ復元ブロックは、baud レートの 4 倍

または 16 倍 (UxCON0 レジスタの BRGS ビットで選択 ) で動作する高速シフタです。シリアル受信シフトレジスタ (RSR) は、設定された baud レートでキャラクタビットをシフトインします。キャラクタの全てのビットが RSR にシフトインされると、ただちに 2 キャラクタ FIFO ( 先入れ先出し ) メモリに転送されます。この時点で PIR1 レジスタの UxRXIF 割り込みフラグが ( 無効にされていなければ ) セットされます。FIFOバッファにより、ソフトウェアの受信処理開始までに2 キャラクタまで保持し、処理開始猶予を確保できます。ソフトウェアは FIFO と RSR レジスタに直接アクセスできません。受信データには受信バッファ(UxRXB)レジスタを介してアクセスする必要があります。

図 4: UART受 信ブロック図

UxERRIR レジスタのフレーミング エラー割り込みフラグビット (FERIF) は、受信 FIFO の先頭の未読キャラクタのフレームステータスを示します。このフラグビットは、FIFO の先頭のキャラクタにフレーミングエラーがない場合または受信 FIFO 内の全てのバイトが読み出し済みの場合にクリアされます。

いずれかのパリティモードで動作している場合、UxERRIR レジスタのパリティエラー割り込みフラグビット (PERIF) は、受信 FIFO の先頭の未読キャラクタのパリティエラーを示します ( パリティビット自体の状態を示すのではありません )。アドレス指定モードが有効な場合、このフラグビットはアドレスまたはデータ インジケータとして機能する他、DALI モードではフォワードまたはバックワード フレーム インジケータとして機能します。

受信 FIFO オーバーフロー割り込みフラグビット(RXFOIF) は、受信 FIFO が保持可能な数を超えるキャラクタを受信した時にセットされます。オーバーフロー条件を発生させたキャラクタは常に破棄されます。受信ピンアイドル ステータスビット (RXIDL) は、RX ピンがアイドル状態の時にセットされ、UART がスタート /ストップ /データ /自動 baudレート /ブレーク キャラクタのいずれかを受信中の時にクリアされます。

非同期モード

UART は、2 つのレベル (VOH ( マーク、「1」データビット ) と VOL ( スペース、「0」データビット )) による標準的なNRZ (Non-Return-to-Zero)フォーマットを使ってデータを送受信します。NRZ で同じ値のデータビットを続けて送信する場合、出力レベルはそのビットのレベルのまま変化しません(1ビットを送信するたびにニュートラル レベルに戻るのではなく、ポートはマーク状態でアイドルする )。スタートビットは必ずスペースであり、ストップビットは必ずマークです。各ビットは (1/baud レート ) の間持続します。baudレートは、デバイスが内蔵する 16 ビット baud レートジェネレータにより生成されます (「baud レート ジェネレータ」参照 )。UART は、図 5 に示す各種の非同期モードで動作可能です。

Note: デバイスによっては、受信ブロック図とレジスタ名およびビット名が異なる場合があります。詳細は各デバイスのデータシートを参照してください。

UxBRGH UxBRGLBRGS

Multiplier x4 x161 0

+1

÷nFoscBaud Rate Generator

Mode Data Recovery

Pin Buffer and ControlPPS

RX pin

Stop

RXPPS

RXEN

(8) • • • 1 0 Start

Address or Parity Mode

UxRXB RegisterPERIFFERIF

RSR Register LSbMSb

RXFOIF RXIDL

8Data Bus

UxRXIFUxRXIE

Interrupt

FIFO

n

7

UxRXCHK+

2017 Microchip Technology Inc. DS90003156A_JP - p. 5

TB3156

図 5: UART非 同期モード

7 ビットモード

7 ビットモードでは、スタートビットとストップビットの間でデータの最下位 7 ビット (7 LSb) だけが送信されます。通常このモードは、7 ビットの ASCII キャラクタを伝送する場合に使います。

8 ビットモード

このモードは、1 つのスタートビット、8 つのデータビット ( パリティなし )、1 つまたは複数のストップビットで構成されます。PC で最も一般的に使われるデータ フォーマットは、8N1 (8 つのデータビット、パリティなし、1 つのストップビット ) です。

9 ビットモード

EUSARTモジュールは9ビットの非同期通信をサポートします。このモードでは、ソフトウェアで第 9 ビットの機能 ( パリティまたはアドレス インジケータ ) を選択します。これに対しプロトコル サポート付きUART では、ハードウェアで第 9 ビットをパリティチェック用またはアドレス検出用に使う事ができます。

偶数または奇数パリティを持つ8ビットデータ

プロトコル サポート付きUARTモジュールはパリティを完全にサポートします。パリティチェックは追加の1 ビットを使って「1」のデータビットの個数を示す簡潔なエラー検出法であり、偶数パリティと奇数パリティがあります。

偶数パリティの場合、「1」のデータビットの個数が奇数である場合にパリティビットは「1」にセットされ、偶数である場合に「0」にクリアされます。奇数パリティの場合、「1」のデータビットの個数が偶数である場合にパリティビットは「1」にセットされ、奇数である場合に「0」にクリアされます。

偶数パリティまたは奇数パリティのどちらかを選択すると、送信中にハードウェアが自動的にパリティビットを設定してシリアルデータ ストリームに挿入します。UART レシーバもパリティチェックを実行できます。受信中にパリティエラーが検出されると、エラーフラグがセットされます。

アドレス インジケータを持つ 8 ビットデータ

このモードは、第 9 ビットをアドレスビットとして使います。詳細は「非同期アドレス指定モード」を参照してください。

非同期アドレス指定モード

複数のレシーバが同じ伝送ラインを共有するマルチドロップ アプリケーション (RS-485 システム等 ) では、通信バス上の競合を防ぐためにアドレス指定が必要です。デバイスが内蔵する UART モジュールのタイプに応じて 2 種類のアドレス指定モードのどちらかが使えます。

EUSART のアドレス検出モード

EUSART の場合、ADDEN ビットをセットするとアドレス検出機能が有効になります。このビットを有効にすると、第 9 データビットがセットされているキャラクタだけが受信 FIFO バッファに転送され、その他のキャラクタは無視されます。アドレス キャラクタの受信時に、そのアドレスが自分のアドレスと一致するかどうかは、ユーザ ソフトウェアで判定します。

プロトコル サポート付き UART のアドレス指定モード

プロトコル サポート付き UART は、データを 9 ビット キャラクタとして送受信する非同期アドレス指定モードをサポートします ( 図 6 参照 )。第 9 ビットは、そのキャラクタがアドレスなのかデータなのかを示します。第 9 ビットがセットされている場合、下位の8 ビットはアドレスです。第 9 ビットがクリアされている場合、下位の 8 ビットはデータです。

Note 1: EUSART とプロトコル サポート付き UART のみ

2: プロトコル サポート付き UART のみ

bit 0 bit 1 bit 2 bit 3 bit 4 bit 5 bit 6 bit 7Start bit

Stop bit/s

bit 0 bit 1 bit 2 bit 3 bit 4 bit 5 bit 6 bit 7Start bit

Parity bit

Stop bit/s

bit 0 bit 1 bit 2 bit 3 bit 4 bit 5 bit 6 bit 7Start bit

Address bit

Stop bit/s

bit 0 bit 1 bit 2 bit 3 bit 4 bit 5 bit 6Start bit

Stop bit/s7-bit(2)

8-bit

8-bit with odd oreven parity(2)

8-bit with addressindicator(1)

LSb1

Baud

bit 0 bit 1 bit 2 bit 3 bit 4 bit 5 bit 6 bit 7Start bit bit 8 Stop

bit9-bit(1)

DS90003156A_JP - p. 6 2017 Microchip Technology Inc.

TB3156

図 6: UARTの アドレス指定モード 図 7 に、PIC18F25K42 を使った単一トランスミッタ

( マスタ )/ 複数レシーバ ( スレーブ ) システムの例を示します。全てのアドレスおよびデータパケットの送信は、マスタによって開始されます。 PIC18FXXK42のUARTをマスタとして使う場合、キャラクタの書き込みは非常に単純です。すなわち、アドレスを UxP1L レジスタに書き込み、データを UxTXB送信バッファレジスタに書き込みます。送信時にハードウェアが自動的に「1」または「0」の第 9 ビットを付加します。

図 7: UARTア ドレス指定モードの実装

スレーブは、第 9 ビットがセットされたキャラクタを受信するたびに下位の 8 ビットとレシーバアドレス(UxP2L) を比較し、その結果をマスクレジスタで確認する事により、アドレスを照合します。アドレスが一致した場合、後続の全てのデータは受信 FIFO に保存され、受信バッファレジスタを介して読み出せます。アドレスが一致しなかった場合、後続の全てのデータは無視され、スレーブはバス上の次のアドレスを待機します。 アドレス指定モードは、どのようなマルチ トランスミッタおよびマルチレシーバ システムでも使えます。バスでの競合を防ぐため、ソフトウェアでタスクを適切にスケジューリングする事で、2 つのトランスミッタが同時にアクティブにならないようにする必要があります。

DMX モード

プロトコル サポート付き UART のみが DMX モードをサポートします。DMX または DMX512 は、照明機器とその付属品を制御するための非同期シリアル デジタルデータ通信規格です。DMX は、コマンドを送信する制御コンソールと、コマンドを受信する同一データリンク上の機器 ( 劇場の調光器、スモーク発生機、ストロボライト等 ) により構成されます。

プロトコル サポート付き UART ハードウェアは、以下の DMX 機能をサポートします。

• ブレークおよびメークアフター ブレーク シーケンスの自動生成

• ブレークおよびメークアフター ブレーク シーケンスの検出

• 構成可能な内部データバイト カウンタ

• 受信開始 / 終了バイト検出のための専用レジスタ

通常 DMX512 は 250 kbit/s のビットレートで動作します。このビットレートは、デバイスのデータシートに記載されている式を使って計算します。PIC18FXXK42向けのビットレート計算式は「baud レート ジェネレータ」に記載しています。

DMX512 パケットは、リセット シーケンスに続くデータバイト ( 最大 512 個 ) で構成されます ( 図 8 参照 )。

0

1Start bit

Stop bit

Data

bit 0 bit 1 bit 2 bit 3 bit 4 bit 5 bit 6 bit 7

Start bit

Stop bitbit 0 bit 1 bit 2 bit 3 bit 4 bit 5 bit 6 bit 7

Address

UxP1L = 0x03

UxTXB = Data

UxTXB = Data

UxTXB = Data

UxP1L = 0x02

UxTXB = Data

UxP1L = 0x05

UxTXB = Data

UxTXB = Data

UxTXB = Data

UxP1L = 0x04

UxTXB = Data

UART 2

UART 3

UART 4

UART 5

UART 1TX Packet

BUS

Addresses don’t match and data is ignored

Serial Packets

Addresses match and data is stored in the receive FIFO

N N+1 N+2 N+3 N+4 N+5 N+6 N+7 N+8 N+9 N+10 N+11

UART 1TX RX

UART 2TX RX

UART 3TX RX

UART 4TX RX

UART 5TX RX

Time

UxP2L = 0x02 UxP2L = 0x03 UxP2L = 0x04 UxP2L = 0x05

Receiver Address

Transmitter

2017 Microchip Technology Inc. DS90003156A_JP - p. 7

TB3156

図 8: DMX512パ ケット

DMX コンソールのトランスミッタ

UART はブレーク、メークアフター ブレーク (MAB)、スタートコードで構成されたリセット シーケンスを生成可能です。このモジュールでは、ブレークの長さは 25 ビット時間に固定されます。ブレークの後に約3 ビット時間の MAB ( 値を保持するアイドル期間 ) が続きます。スタートコードは、パケットの後続データバイトの機能を指定します。

スタートコードとデータバイトは、送信バッファレジスタに書き込まれます。DMX ステートマシンは、「n」バイトが書き込まれた後に自動的にブレークを挿入して内部カウンタをリセットするため、丁度必要な数だけのバイトを送信する必要があります。このため、ソフトウェアは、送信バッファに書き込まれたバイト数を追跡する必要があります。

各データスロットはスタートビットで始まり、2 個のストップビットで終了します。

DMX 機器のレシーバ

DMX 機器のブレーク キャラクタ長のしきい値は23 ビット時間です。これより短いブレークは無視され、DMX ステートマシンはアイドルモードのままです。ブレークを受信すると、受信データストリームと同調するために DMX カウンタがリセットします。UART は MAB ( メークアフター ブレーク ) を検出し、スタートコードを受信 FIFO に格納します。

スタートコードに続いて、最初から 512 番目まで全てのバイトを受信しますが、必要なバイトだけが受信FIFO に保存されます。UART は、2 つの専用 16 ビットレジスタに基づいて、データバイトの保存を開始および終了します。

DMX モードの実装

PIC16F25K42 の場合、MODE<3:0> = 1010 かつSTP<1:0> = 10 に設定する事により、UART を DMXモードに設定します。

図 9: DMXモ ードの実装

3 TBIT

Break Start Code Slot 1 Data•••

MAB Slot 2 Data Slot 512 Data

DMX512 Packet

25 TBIT 1 TBIT LSb MSbStop BitsSlot Time

RESET Sequence

Start Bit

RS-485 Transmitter

Higher Level Application

UART

CONSOLE

TX

TERMINATION

Console Out

Equipment 1 FIFO

Equipment 2 FIFO

Equipment 3 FIFO

Equipment 4 FIFO

(DMX Data Link)

Data 0 Data 1

Data 2 Data 3 Data 4 Data 5

Data 6 Data 7

Data 8 Data 9 Data 10

BREAK Data 0 Data 1 Data 2 Data 3 Data 4 Data 5 Data 6 Data 7 Data 8 Data 9 Data 10STARTMAB

UxP2H:L = 2UxP3H:L = 5

UxP2H:L = 0UxP3H:L = 1

UxP2H:L = 8UxP3H:L = 10

UxP2H:L = 6UxP3H:L = 7UxP1H:L = 10

2

23 4

1

4

3

1

n = 11Reset Sequence

UxP1H:L = 11 - 1UxP1H:L = n - 1

RS-485 Receiver

Higher Level Application

UART

EQUIPMENT 2

RX

RS-485 Receiver

Higher Level Application

UART

EQUIPMENT 3

RX

RS-485 Receiver

Higher Level Application

UART

EQUIPMENT 4

RX

RS-485 Receiver

Higher Level Application

UART

EQUIPMENT 1

RX

DS90003156A_JP - p. 8 2017 Microchip Technology Inc.

TB3156

図 9 に、DMX512 ユニバースの例を示します。この例では、1 つのコントローラ コンソールに 4 つのユニットロード (または機器 )をデイジーチェーン形式で接続しています。コンソールが送信するデータバイトの数は、UxP1H:UxP1L レジスタによって決まります。DMX機器は FIFO への受信データの保存を UxP2H:UxP2L レジスタに基づいて開始し、UxP3H:UxP3L に基づいて終了します。データパケットは、データが変化した時に機器に対するデータを更新するために、繰り返し再送信されます。

図 9 内の DMX コンソール (CONSOLE) の初期化コードを例 1 に示し、DMX 機器 2 (EQUIPMENT2) の初期化コードを例 2 に示します。

例 1: DMXコ ンソールの初期化コード

例 2: DMX機 器 2の 初期化コード

// Initialize DMX Console to transmit 11 data bytesvoid DMX_Console_Initialize (void){ U1CON0bits.MODE = 0b1010; // DMX mode U1CON0bits.TXEN = 1; // Enable transmit U1CON0bits.RXEN = 0; // Disable receive U1CON2bits.TXPOL = 0; // Data polarity is not inverted U1P1H = 0x00; // n-1 = 11-1 U1P1L = 0x0A; U1BRGH = 0x00; // Initialize baud rate to 250k; Fosc = 64 MHz U1BRGL = 0x0F; U1CON2bits.STP = 0b10; // 2 Stop bits

Pin_Initialize(); // Set the corresponding TX pin via PPS U1CON1bits.ON = 1; // Enable serial port}

// Initialize DMX Equipment 2 to receive data 8 through 10 from the console packetvoid DMX_Equipment2_Initialize (void){ U1CON0bits.MODE = 0b1010; // DMX mode U1CON0bits.TXEN = 0; // Disable transmit U1CON0bits.RXEN = 1; // Enable receive U1CON2bits.RXPOL = 0; // Data polarity is not inverted U1P2H = 0x00; // Receive data 8 U1P2L = 0x08; // : U1P3H = 0x00; // : U1P3L = 0x0A; // through 10 U1BRGH = 0x00; // Initialize Baud Rate to 250k; Fosc = 64 MHz U1BRGL = 0x0F; U1CON2bits.STP = 0b10; // 2 Stop bits Pin_Initialize(); // Set the corresponding RX pin via PPS U1CON1bits.ON = 1; // Enable serial port}

2017 Microchip Technology Inc. DS90003156A_JP - p. 9

TB3156

例 3 に、DMX コンソールの送信ルーチンのサンプルコードを示します。このコードでは、送信データ値を符号なし 8 ビット型の配列に保存します。配列インデックスはバイト数に一致するため、送信バイト数を容易にカウントできます。

例 3: DMXコ ンソールの送信ルーチン

例 4 に示すサンプルルーチンは、変数を使って受信バイト数を指定し、受信データを配列に保存する事で、ユーザ アプリケーション コードで受信データが使えるようにします。

例 4: DMX機 器の受信ルーチン

void DMX_Console_Transmit (uint8_t txLength, uint8_t *txDataArray){ UART_Write (START_CODE); for(uint8_t i = 0; i < txLength; i++){ // txLength = n; Max value = 512 UART_Write(txDataArray[i]); }}

void DMX_Equipment_Receive (uint16_t rxLength){ // rxLength = number of bytes to // receive

uint8_t startCode;uint8_t rxDataArray[arraySize]; // arraySize value should be at least

// equal to rxLengthwhile (!U1ERRIRbits.RXBKIF); // Wait for break receptionU1ERRIRbits.RXBKIF = 0;

startCode = UART_Read(); // Save Start codefor (uint8_t i = 0; i < rxLength; i++){rxDataArray[i] = UART_Read(); // Save Data

} /**Some code for Start code and received data processing**/}

DS90003156A_JP - p. 10 2017 Microchip Technology Inc.

TB3156

LIN モード

LIN (Local Interconnect Network) は、主に車載および産業用アプリケーションで使われるプロトコルです。

プロトコル サポート付き UART モジュールは、LIN 向けに以下のハードウェア サポートを備えます。

• 自動チェックサム計算

• レガシー チェックサムと拡張チェックサムの選択

• PID パリティビットの自動計算 • シリアル ストリームへのブレーク / デリミタビッ

ト /Sync/PID の自動的な挿入

• RX ピンでのブレーク検出

• スレーブノード向けの自動 baud レート検出

LIN フレームは、マスタプロセスとスレーブプロセスにより構成されます ( 図 10 参照 )。プロトコル サポート付き UART は、LIN 向けに 2 種類のモード (LIN マスタ / スレーブモードと LIN スレーブモード ) を提供します。マスタ / スレーブモードは、マスタプロセスとスレーブプロセスの両方をサポートし、マスタノードに実装されます。他方、スレーブモードはスレーブプロセスのみサポートし、スレーブノードに実装されます。

図 10: LINフ レーム

例 5 に、UART1 を使う LIN マスタ / スレーブモード向けの初期化サンプルコードを示します。LIN スレーブモード向けの初期化パターンも基本的に同じですが、MODE<3:0>ビットの設定が異なります(スレーブモードでは 0b1011に設定 )。

Note: プロトコル サポート付き UART のみが各種の LIM モードをサポートしますが、EUSART も LIN プロトコル向けにいくつかのサポート機能を備えています(「EUSART の LIN サポート」内の機能の説明参照 )。

13 TBIT 1 TBIT

PID Field

Inter-byte Space

Header ResponseFrame

Break SYNC Field Data Field 1•••

Data Field 8 Checksum Field

Response SpaceDelimiter Bit Inter-frame Space

(Master Process) (Slave Process)

2017 Microchip Technology Inc. DS90003156A_JP - p. 11

TB3156

例 5: LINマ スタ /ス レーブモードの初期化コード

マスタプロセス

UART はブレーク フィールドを長さ 13 ビット時間のスペースとして生成し、ブレークデリミタを長さ1 ビット時間のマークとして生成します。UART はSync、PID、データフィールド向けに 8 データビットの非同期フォーマットを実装します。ストップビット数は 1、1.5、2 ビット時間のいずれかに選択できます。Sync バイトは ASCII 文字の「U」(55h) です。PID バイトは 6 ビットのフレーム ID と 2 個のパリティビット ( ハードウェアが自動計算 ) により構成されます。ブレーク、デリミタビット、Sync は、6 ビット ID が専用のレジスタに書き込まれた後に自動的に送信されます。例 6 に、マスタプロセスのサンプルコードを示します。

例 6: マスタプロセス (ヘ ッダの送信 )

スレーブプロセス

PID は、どのスレーブプロセスがマスタに応答するのかを指定します。スレーブプロセスは、パブリッシャである場合にフレーム レスポンスの送信を担当し、サブスクライバである場合にフレーム レスポンスの受信を担当します。フレーム レスポンスは、データフィールドとチェックサム フィールドで構成されます。データフィールドは、スレーブプロセス中に送受信する実際の情報です。チェックサム フィールドは、エラー検出用に使います。例 7 のサンプルコードに、スレーブプロセス中に PID を取得する方法を示します。例 8 と例 9 のサンプルコードに、配列を使ってデータフィールドを送受信する方法を示します。

void LIN_MasterSlaveMode_Initialize (void){ U1CON0bits.BRGS = 0; // BRG operates in normal speed; Baud = Fosc/[16(n+1)] U1BRGH = 0x01; // Initialize Baud Rate to 9600; Fosc = 64 MHz U1BRGL = 0x9F; U1CON0bits.MODE = 0b1100; // LIN Master/Slave mode U1CON0bits.TXEN = 1; // Enable transmit U1CON0bits.RXEN = 1; // Enable receive U1CON2bits.TXPOL = 0; // Data polarity is not inverted U1CON2bits.STP = 0b00; // 1 Stop bit Pin_Initialize(); // Set the corresponding TX and RX pins via PPS U1CON2bits.C0EN = 1; // Enhanced checksum; Clear to '0' for legacy checksum U1CON1bits.ON = 1; // Enable serial port}

void LIN_MasterTransmitHeader (uint8_t slave_ID){ U1P1L = slave_ID; }

DS90003156A_JP - p. 12 2017 Microchip Technology Inc.

TB3156

例 7: スレーブプロセス中の PIDの 取得

例 8: スレーブプロセス中のデータフィールドの送信

例 9: スレーブプロセス中のデータフィールドの受信

チェックサムの計算には、レガシーと拡張の 2 通りの方法が使えます。レガシーチェックサムはデータバイトだけを含むのに対し、拡張チェックサムは PID とデータバイトを含みます。

スレーブプロセスがデータを送信する場合、UART は各バイトを送信しながら自動的にそれらのチェックサムを計算し、反転したチェックサム バイトをスレーブレスポンスに付加します。スレーブがデータを受信する場合、送信プロセスと同じアルゴリズムを使って、

各バイトを受信しながらそれらのチェックサムを積算します。UART は、最後の受信バイト ( 送信プロセスによって計算された反転チェックサム値 ) を受信中に計算したチェックサム値に加算します。その結果が全て「1」であればチェックは合格です。その他の場合、チェックは不合格となり、チェックサム エラー フラグビットがセットされます。例 10 に、チェックサムの合否を検証する方法を示します。

例 10: チェックサムのベリファイ

uint8_t LIN_Get_PID (void) {uint8_t PID;

while (!U1ERRIRbits.RXBKIF); // Wait for break receptionU1ERRIRbits.RXBKIF = 0;

PID = UART_Read();

return PID;}

void LIN_SlaveDataTransmit (uint8_t txLength, uint8_t *txDataArray){ U1P2H = 0x00; U1P2L = txLength; // Size of the data array; Max value = 8 for(uint8_t i = 0; i < txLength; i++){ UART_Write(txDataArray[i]); }}

void LIN_SlaveDataReceive (uint8_t rxLength){ // rxLength = Number of data bytes // to receive

uint8_t rxDataArray[8];

U1P3H = 0x00;U1P3L = rxLength;

for (uint8_t i = 0; i < rxLength; i++) {rxDataArray[i] = UART_Read(); // Save data

}

/** Some code for checksum verification and processing of received data **/}

bool LIN_VerifyRxChecksum (void){ while(!PIR3bits.U1RXIF);

if(U1ERRIRbits.CERIF == 0) return true; // Checksum passed } return false;}

2017 Microchip Technology Inc. DS90003156A_JP - p. 13

TB3156

チェックサムの計算方法、データバイトの数、スレーブプロセスの動作 ( 送信または受信 ) は、PID に従ってソフトウェアで定義されます。バイト間スペース、タイムアウト、フレームの時間間隔は、UART ではなく他の手段を使ってソフトウェアにより制御します。これには、デバイスの内蔵ハードウェア タイマ(Timer0/1/2 等 ) が使えます。

EUSART の LIN サポート

拡張ミッドレンジおよびハイエンド PIC MCU が内蔵する EUSART モジュールは、13 ビット固定のブレーク送信とブレーク検出時復帰機能をサポートします。ユーザは、その他の動作をソフトウェアで設定できます。Microchip 社の MPLAB® Code Configurator (MCC)の LIN モジュールにより、使いやすい GUI 上でスケジュール テーブルを作成し、チェックサムのタイプとハードウェア タイマを選択できます。MCC はEUSART を内蔵したデバイスの大部分をサポートし、ラピッド プロトタイピングに必要なソフトウェアルーチンを生成できます。詳細は『AN2059 - LIN の基礎と 8 ビット PIC® マイクロコントローラへの MCCLIN スタック ライブラリの実装』を参照してください。

DALI モード

DALI (Digital Addressable Lighting Interface)は、オフィスや工場等の大規模ビルディング内の照明のデジタル制御用に使われるプロトコルです。プロトコル サポート付き UART モジュールのみが DALI をサポートします。このモジュールは DALI 向けに以下の機能を提供します。

• 2 つのモード ( 制御デバイスと制御ギア ) が選択可能

• マンチェスタ エンコード

• MSb 先頭出力

• バイト間のストップビットを省略

• フレーム終わりでの 2 個のストップビットの送信 /検出

• 1/2 ビットステップでフォワードおよびバックワード待機時間を設定可能

• フォワード / バックワード フレーム検出しきい値デリミタを 1/2 ビットステップで設定可能

• 待機時間終了時にバックワード フレームを自動送信

2つの制御モード (DALI制御デバイスモードとDALI制御ギアモード ) が使えます。制御デバイスは、コマンドとデータを制御ギア ( 照明機器 ) へ送信するメインのコントローラです。図 11 に、バス上の DALI パケットの例を示します。全てのバイトは、マンチェスタ 符号化フォーマットによりMSb先頭で送受信されます。

図 11: DALIパ ケット

DALI 制御デバイスモード

制御デバイスモードは、フォワード フレームを送信するためのモードです。フォワード フレームは、制御デバイスから制御ギアへ送信するパケットです。このパケットは、 DALI 1.0 では 2 バイトを含み、DALI 2.0 では 3 バイトを含みます。送信割り込みフラグが「真」に遷移した後、ただちに ( 出力シフタがエンプティになる前に ) 送信バッファに書き込む事により、中断のない連続したバイト送信が可能です。最後のストップビットの後、対応するレジスタで定義された追加の待機時間が過ぎるまで、TX 出力はアイドル状態を保持します。例 10 に、DALI 制御デバイスの初期化用サンプルコードを示します。

IDLEIDLE1 0 0 1 0 1 0 1 1 0 0 1 1 0 1 0 0

Forward Frame

Start Bit Stop BitsData ByteControl Byte

IDLE

3.5 to 11 TBIT

IDLE0 0 0 1 1 0 0 11

Back Frame

MSb 1 TBIT

Data Byte >11TBIT

Stop BitsStart Bit

DS90003156A_JP - p. 14 2017 Microchip Technology Inc.

TB3156

例 11: DALI制 御デバイスの初期化コード

ソフトウェアは、次のフォワード フレームを書き込む前に、出力シフタがエンプティになるまで待機します。待機時間中にバックワード フレームを受信した場合、バックワード フレームの受信が完了してから設定された待機時間が過ぎるまで、送信バッファレジスタに書き込まれたバイトは送信されません。

void DALI_ControlDevice_Initialize (void){U1CON0bits.MODE = 0b1000; // DALI Control Device ModeU1CON0bits.TXEN = 1; // Enable transmitU1CON0bits.RXEN = 1; // Enable receiveU1P1H = 0x00; // 16 half-bit periods wait time after complete… U1P1L = 0x16; // …transmission of forward frameU1P2H = 0x00; // Frames following Idle periods more than 15 half-bit…U1P2L = 0x15; // …periods are detected as Forward framesU1BRGH = 0x0D;U1BRGL = 0x04; // Baud = 1200; Fosc = 64 MHzU1CON2bits.TXPOL = 0; // Data polarity is not inverted; Set to '1' if inverted

// polarity is requiredU1CON2bits.STP = 0b10; // 2 Stop bits

Pin_Initialize(); // Set the corresponding TX pin via PPS

U1CON1bits.ON = 1; // Enable serial port

}

2017 Microchip Technology Inc. DS90003156A_JP - p. 15

TB3156

DALI 制御ギアモード

制御ギアモードは、フォワード フレームを受信し、バックワード フレームを送信するためのモードです。バックワード フレームは、制御ギアが制御デバイスへ返す応答パケットです。DALI では、フォワード フレームを受信するまでバックワード フレームは送信できません。設定されたしきい値よりも長いアイドル期間後のフレームだけがフォワード フレームとして検出されます。例 11 に、DALI 制御ギア向けの初期化用サンプルコードを示します。

例 12: DALI制 御ギアの初期化コード

フォワード フレームは、受信 FIFO で 1 度に 1 バイトずつ受信され、受信バッファレジスタから読み出されます。制御ギアがフォワード フレームから受け取ったデータは、アプリケーション ソフトウェアで処理されます。また、制御ギアはバックワード フレームを送信するかどうかを判断します。待機時間が過ぎた後にバックワード フレーム データが書き込まれた場合、そのデータは、次のフォワード フレームの後の待機時間が過ぎるまで保持されます。

void DALI_ControlGear_Initialize (void){U1CON0bits.MODE = 0b1001; // DALI Control Gear ModeU1CON0bits.TXEN = 1; // Enable transmitU1CON0bits.RXEN = 1; // Enable receiveU1P1H = 0x00; // 8 half-bit periods wait time after complete…U1P1L = 0x08; // …reception of a forward frameU1P2H = 0x00; // Frames following Idle periods more than 15 half-U1P2L = 0x15; // bit periods are detected as Forward framesU1BRGH = 0x0D;U1BRGL = 0x04; // Baud = 1200; Fosc = 64 MHzU1CON2bits.TXPOL = 0; // Data polarity is not inverted; Set to '1' if

// inverted polarity is requiredU1CON2bits.RXPOL = 0; // Same as TXPOLU1CON2bits.STP = 0b10; // 2 Stop bits

Pin_Initialize(); // Set the corresponding TX pin via PPS

U1CON1bits.ON = 1; // Enable serial port

}

DS90003156A_JP - p. 16 2017 Microchip Technology Inc.

TB3156

汎用マンチェスタ

汎用マンチェスタはDALIモードのサブセットです。これは全ての面で DALI モードの機能を維持します。唯一の違いとして、待機時間は 0 に設定されます。従って書き込み動作は受信動作の完了を待機しないため、全二重および半二重動作が可能です。

baud レート ジェネレータ

baud レート ジェネレータ (BRG) は、同期および非同期の両方の動作モードをサポートする 8 ビットまたは16 ビットのタイマです。

UART モジュールでは、標準 baud レートレンジと高baud レートレンジの選択が可能です。高 baud レートレンジは、標準レンジでは必要な baud レートが得られない場合にのみ使います。それ以外の場合、標準baud レートレンジの使用を推奨します。

baud レートの計算は、UART モジュールのタイプと設定された速度に応じて異なります。通常、baud レートの式はデバイスのデータシートに記載されています。表 2 に、PIC18FXXK42 向けの baud レートの計算式を示します。

計算された baud レートは 8 ビットレジスタのペアに保存されます。

自動 baud レート検出

自動baudレート検出 (ABD)がアクティブな場合、BRGへのクロックが逆方向になります (BRG が入力 RX 信号にクロックを供給するのではなく、RX 信号を BRGへのタイミング信号として使います )。すなわち、baudレート ジェネレータを使って、LIN バスの同期キャラクタである 55h (ASCII 文字の「U」) の受信周期を計測します。文字「U」は、スタートビットのエッジを含む 5 つの立ち下がりエッジと、ストップビットのエッジを含む 5 つの立ち上がりエッジを持つ特別なキャラクタです。図 12 を参照してください。

図 12: 自動 BAUDレ ート検出

ABD は、8 ビット非同期モードと LIN モードでサポートされます。

8 ビット非同期モードの場合、自動 baud レート検出は ABDEN ビットをセットする事により有効になります。受信ラインの最初の立ち上がりエッジで、baudレート ジェネレータは BRG カウンタクロックを使ってカウントアップを始めます。5 番目の立ち下がりエッジの時点で、BRG レジスタペアは BRG 周期を正しく表す積算値を格納します。この時点でABDENビットが自動的にクリアされて、ABD 割り込みフラグがセットされます。

LIN モードの場合、ハードウェアは Sync キャラクタの受信時に自動的に ABD を実行します。この場合、ABDEN ビットをセットする必要はありません ( そもそもセットできません )。

ストップビットの選択

プロトコル サポート付き UART では、ストップビット数を以下のいずれかに設定できます。

• 送信は 1ビット、受信は最初の 1ビットをベリファイ

• 送信は 1.5ビット、受信は最初の 1ビットをベリファイ

• 送信は 2ビット、受信は 2ビットをベリファイ

• 送信は 2ビット、受信は最初の 1ビットのみベリファイ

DALI を除く全てのモードでは、トランスミッタは各送信ワードの後 ( 次の送信ワードの前 ) でストップビット数の間アイドル状態になります。DALI の場合、ストップビットは、送信データストリームの最後のビットの後で生成されます。

表 2: PIC18FXXK42 向けの baud レート計算式

BRG/UART モード baud レート

高 baud レート FOSC/[4(n+1)]標準 baud レート FOSC/[16(n+1)]

1 0 1 0 1 0 1 0StartBit

StopBit

0000h

RX Pin

Edge 2 Edge 3 Edge 4 Edge 5

BRG Clock

BRG Value 000Bh

Edge 1

2017 Microchip Technology Inc. DS90003156A_JP - p. 17

TB3156

自動チェックサム計算

プロトコル サポート付き UART は、送受信チェックサム加算器を備えています。有効にした場合、加算器は送信または受信した各バイトを積算します。積算値は加算の桁上げを含み、チェックサム レジスタに保存されます。

ソフトウェアは、トランザクションの前にチェックサム レジスタをクリアし、トランザクションの最後でチェックを実行する必要があります。LIN モードの場合、自動チェックサム計算は常に有効であり、ハードウェアが自動的に積算値をクリアおよびチェックします。

フロー制御

プロトコル サポート付き UART は、ハードウェアおよびソフトウェアによるフロー制御を備えています。どちらを使うかは、ハンドシェイク フロー制御ビットで選択します。フロー制御は、デバイスがデータ送受信の準備を完了した時に合図する事により、データ喪失のリスクを低減すると共にバッファのオーバーランを防ぎます。

ハードウェア フロー制御

ハードウェア フロー制御は、TX および RX ピンに加えて 2 本のマイクロコントローラ ピンを使います。それらの RS-232 信号名は、RTS (Request to Send) とCTS (Clear to Send) です。2 つの DTE (Data TerminalEquipment) 間の代表的な構成を図 13 に示します。各DTE は、他のデバイスから新しいデータを受信可能かどうか示すために RTS 出力を使い、他のデバイスへデータを送信可能かどうか調べるためにCTS入力を読み出します。どちらのラインも LOW が「真」であり、PPS モジュールを使って設定できます。

図 13: ハードウェア フロー制御の構成

データを受信する UART は、入力 FIFO がエンプティである場合に RTS 出力を LOW にアサートします。キャラクタを受信すると RTS 出力は HIGH に遷移し、受信バッファが読み出されて 2 つの FIFO 位置が解放されるまで HIGH を維持します。

データを送信する UART は、CTS 入力が LOW の時にのみ送信できます。バイトの送信が始まった後に CTS入力が HIGH に遷移しても、その送信は正常に完了します。これに対応して、データを受信する側の UARTは、 2番目のFIFO位置が受信キャラクタ格納用に空いている状態です。

RS-485 トランシーバ制御

もう 1 つのマイクロコントローラ ピンを使って RS-485 トランシーバを制御する事ができます。この信号名は TXDE (Transmit Drive Enable) です。この出力は、TX 出力がキャラクタを送信中の時にだけ HIGH になります。ハードウェア フロー制御により、RS-485 トランシーバの通信方向を制御できます。構成例を図 14に示します。TXDE ピンは、PPS モジュールにより選択します。

図 14: RS-485の 構成

XON/XOFF ソフトウェア フロー制御

XON/XOFF は、特殊なキャラクタを使って送信を保留 /再開します。トランスミッタは送信中にこの信号を受信する必要があるため、全二重動作が必要です。UARTは XOFF に対して 13h を使い、XON に対して 11h を使います。 トランスミッタは既定値により XON ( トランスミッタは有効 ) です。XOFF キャラクタを受信すると、トランスミッタは実行中のキャラクタ送信を完了した後に、送信を停止します。トランスミッタは、XON キャラクタを受信するまで停止したままです。

内部ソフトウェア フロー制御を使うと、ハードウェア制御で必要になる追加のピンを節約できます。しかし、XON および XOFF キャラクタをシリアル ストリームに挿入するため、レイテンシが生じるという欠点があります。

TX

CTS

RX

RTS

DTE

UART

RX

RTS

DTE

UARTTX

CTS

8-bit PIC®

MCU

UART

RX

TXDE

SN75716R

RE

DE

DTX

A

B

4k7

4k7

VCC

DS90003156A_JP - p. 18 2017 Microchip Technology Inc.

TB3156

他の周辺モジュールとの連動

以下では、UART と他の内蔵周辺モジュールを組み合わせた実装例を示します。

HLT を使った RX/TX アクティビティ タイムアウト

偶数番号タイマモジュールが備えるハードウェア リミットタイマ (HLT) を使うと、UART の TX および RXラインのアクティビティを監視できます。TX またはRX ラインは、HLT へのリセット信号源として設定できます。HLT 周期が過ぎる前に UART アクティビティが HLT を繰り返しリセットするように HLT を設定する必要があります。HLT 周期が過ぎても TX または RXライン上でアクティビティが発生しなかった場合、タイムアウト イベントを知らせる HLT 割り込みが生成されます。

DMA を使った UART データ転送

PIC18FXXK42 等のデバイスは、DMA (Direct MemoryAccess) コントローラを内蔵しています。DMA により、UART は CPU からの介入を必要とせずに直接データを受信バッファレジスタから RAM へ、または RAMから送信バッファレジスタへ直接転送できます。UART の RX と TX によって DMA に対する割り込み要求をトリガする事で、新しい DMA メッセージの転送を開始する事もできます。UART データの転送中はDMA がメモリバスを制御し、CPU は他の重要タスクを実行できるため、CPU の使用効率とデータ スループットが向上します。

UART と CLC を使ったデジタル変調

デバイス内部で複数のUARTモジュールの送信出力を構成可能ロジックセル (CLC) に接続できます。UARTと CLC の組み合わせによる重要な実装例として、データ信号変調器 (DSM) があります。DSM は各種のデジタル変調方式 (ON/OFF キーイング (OOK)、周波数シフトキーイング (FSK)、位相シフトキーイング (PSK)等 ) をサポートします。CLC は UART を入力データ源として使い、他の信号源 ( 同期クロック、LPRC、SOSC等 ) をキャリア信号として使います。詳細は『AN2133- CLC を使った PIC® MCU の機能拡張』を参照してください。

まとめ

本書では、8 ビット PIC マイクロコントローラが内蔵する 3種類のUARTモジュールの機能と特長について説明しました。プロトコル サポート付き UART モジュールの説明に重点を置く事で、USART およびEUSART がサポートしない先進機能に関する読者の理解を促しました。このモジュールを使うと、UARTベース アプリケーションのソフトウェア オーバーヘッドを大幅に削減しながら開発期間を短縮できます。

参考資料

• PIC18FXXK42 データシート

• ANSI E1.11-2008 (R2013) Standard• AN1659 -DMX512A (DS00001659)• AN2059 - LIN の基礎と 8 ビット PIC® マイクロコ

ントローラへの MCC LIN スタック ライブラリの実装

• AN1465 - DALI (Digitally Addressable Lighting Interface) 通信

• AN2133 - CLC を使った PIC® MCU の機能拡張

2017 Microchip Technology Inc. DS90003156A_JP - p. 19

TB3156

NOTE:

DS90003156A_JP - p. 20 2017 Microchip Technology Inc.

2017 Microchip Technology Inc. DS90003156A_JP - p. 21

本書に記載されているデバイス アプリケーション等に関する

情報は、ユーザの便宜のためにのみ提供されているものであ

り、更新によって無効とされる事があります。お客様のアプ

リケーションが仕様を満たす事を保証する責任は、お客様に

あります。Microchip 社は、明示的、暗黙的、書面、口頭、法

定のいずれであるかを問わず、本書に記載されている情報に

関して、状態、品質、性能、商品性、特定目的への適合性を

はじめとする、いかなる類の表明も保証も行いません。

Microchip 社は、本書の情報およびその使用に起因する一切の

責任を否認します。Microchip 社の明示的な書面による承認な

しに、生命維持装置あるいは生命安全用途に Microchip 社の製

品を使用する事は全て購入者のリスクとし、また購入者はこ

れによって発生したあらゆる損害、クレーム、訴訟、費用に

関して、Microchip 社は擁護され、免責され、損害をうけない

事に同意するものとします。暗黙的あるいは明示的を問わず、

Microchip社が知的財産権を保有しているライセンスは一切譲

渡されません。

商標

Microchip 社の名称と Microchip ロゴ、dsPIC、FlashFlex、KEELOQ、KEELOQ ロゴ、MPLAB、PIC、PICmicro、PICSTART、PIC32 ロゴ、rfPIC、SST、SST ロゴ、SuperFlash、UNI/O は、

米国およびその他の国における Microchip TechnologyIncorporated の登録商標です。

FilterLab、Hampshire、HI-TECH C、Linear Active Thermistor、MTP、SEEVAL、Embedded Control Solutions Company は、

米国における Microchip Technology Incorporated の登録商標

です。

Silicon Storage Technologyは、その他の国におけるMicrochipTechnology Incorporated の登録商標です。

Analog-for-the-Digital Age、Application Maestro、BodyCom、

chipKIT、chipKIT ロゴ、CodeGuard、dsPICDEM、dsPICDEM.net、dsPICworks、dsSPEAK、ECAN、ECONOMONITOR、FanSense、HI-TIDE、In-Circuit Serial Programming、ICSP、Mindi、MiWi、MPASM、MPF、MPLAB 認証ロゴ、MPLIB、MPLINK、mTouch、Omniscient Code Generation、PICC、PICC-18、PICDEM、

PICDEM.net、PICkit、PICtail、REAL ICE、rfLAB、Select Mode、SQI、Serial Quad I/O、Total Endurance、TSHARC、UniWinDriver、WiperLock、ZENA、Z-Scale は、米国およびその他の国におけ

る Microchip Technology Incorporatedの登録商標です。

SQTP は、米国における Microchip Technology Incorporatedのサービスマークです。

GestICとULPPは、その他の国におけるMicrochip TechnologyGermany II GmbH & Co. & KG (Microchip TechnologyIncorporated の子会社 ) の登録商標です。

その他、本書に記載されている商標は各社に帰属します。

©2013, Microchip Technology Incorporated, Printed in theU.S.A., All Rights Reserved.

ISBN: 978-1-5224-1607-4

Microchip 社製デバイスのコード保護機能に関して次の点にご注意ください。

• Microchip 社製品は、該当する Microchip 社データシートに記載の仕様を満たしています。

• Microchip 社では、通常の条件ならびに仕様に従って使用した場合、Microchip 社製品のセキュリティ レベルは、現在市場に流

通している同種製品の中でも最も高度であると考えています。

• しかし、コード保護機能を解除するための不正かつ違法な方法が存在する事もまた事実です。弊社の理解ではこうした手法は、

Microchip 社データシートにある動作仕様書以外の方法で Microchip 社製品を使用する事になります。このような行為は知的所

有権の侵害に該当する可能性が非常に高いと言えます。

• Microchip 社は、コードの保全性に懸念を抱くお客様と連携し、対応策に取り組んでいきます。

• Microchip 社を含む全ての半導体メーカーで、自社のコードのセキュリティを完全に保証できる企業はありません。コード保護

機能とは、Microchip 社が製品を「解読不能」として保証するものではありません。

コード保護機能は常に進歩しています。Microchip 社では、常に製品のコード保護機能の改善に取り組んでいます。Microchip 社

のコード保護機能の侵害は、デジタル ミレニアム著作権法に違反します。そのような行為によってソフトウェアまたはその他の著

Microchip 社では、Chandler および Tempe ( アリゾナ州 )、Gresham( オレゴン州 ) の本部、設計部およびウェハー製造工場そしてカリフォルニア州とインドのデザインセンターが ISO/TS-16949:2009 認証を取得しています。Microchip 社の品質システム プロセスおよび手順は、PIC® MCU および dsPIC® DSC、KEELOQ® コード ホッピング デバイス、シリアル EEPROM、マイクロペリフェラル、不揮発性メモリ、アナログ製品に採用されています。さらに、開発システムの設計と製造に関する Microchip 社の品質システムは ISO 9001:2000 認証を取得しています。

QUALITY MANAGEMENT SYSTEM CERTIFIED BY DNV

== ISO/TS 16949 ==

DS90003156A_JP - p. 22 2017 Microchip Technology Inc.

北米本社2355 West Chandler Blvd.Chandler, AZ 85224-6199Tel:480-792-7200 Fax:480-792-7277技術サポート : http://www.microchip.com/supportURL: www.microchip.com

アトランタDuluth, GA Tel:678-957-9614 Fax:678-957-1455

オースティン (TX)Tel:512-257-3370

ボストンWestborough, MA Tel:774-760-0087 Fax:774-760-0088

シカゴItasca, IL Tel:630-285-0071 Fax:630-285-0075

クリーブランドIndependence, OH Tel:216-447-0464

Fax:216-447-0643

ダラスAddison, TX Tel:972-818-7423 Fax:972-818-2924

デトロイトNovi, MI Tel:248-848-4000

ヒューストン (TX) Tel:281-894-5983

インディアナポリスNoblesville, IN Tel:317-773-8323Fax:317-773-5453

ロサンゼルスMission Viejo, CA Tel:949-462-9523 Fax:949-462-9608

ニューヨーク (NY) Tel:631-435-6000

サンノゼ (CA) Tel:408-735-9110

カナダ - トロントTel:905-673-0699 Fax:905-673-6509

アジア / 太平洋

アジア太平洋支社Suites 3707-14, 37th FloorTower 6, The GatewayHarbour City, KowloonHong KongTel:852-2943-5100Fax:852-2401-3431

オーストラリア - シドニーTel:61-2-9868-6733Fax:61-2-9868-6755

中国 - 北京Tel:86-10-8569-7000 Fax:86-10-8528-2104

中国 - 成都Tel:86-28-8665-5511Fax:86-28-8665-7889

中国 - 重慶Tel:86-23-8980-9588Fax:86-23-8980-9500

中国 - 東莞

Tel:86-769-8702-9880

中国 - 杭州Tel:86-571-8792-8115 Fax:86-571-8792-8116

中国 - 香港 SARTel:852-2943-5100 Fax:852-2401-3431

中国 - 南京Tel:86-25-8473-2460Fax:86-25-8473-2470

中国 - 青島Tel:86-532-8502-7355Fax:86-532-8502-7205

中国 - 上海Tel:86-21-5407-5533 Fax:86-21-5407-5066

中国 - 瀋陽Tel:86-24-2334-2829Fax:86-24-2334-2393

中国 - 深圳Tel:86-755-8864-2200 Fax:86-755-8203-1760

中国 - 武漢Tel:86-27-5980-5300Fax:86-27-5980-5118

中国 - 西安Tel:86-29-8833-7252Fax:86-29-8833-7256

アジア / 太平洋

中国 - 厦門Tel:86-592-2388138 Fax:86-592-2388130

中国 - 珠海Tel:86-756-3210040 Fax:86-756-3210049

インド - バンガロールTel:91-80-3090-4444 Fax:91-80-3090-4123

インド - ニューデリーTel:91-11-4160-8631Fax:91-11-4160-8632

インド - プネTel:91-20-3019-1500

日本 - 大阪Tel:81-6-6152-7160 Fax:81-6-6152-9310

日本 - 東京Tel:81-3-6880- 3770 Fax:81-3-6880-3771

韓国 - 大邱Tel:82-53-744-4301Fax:82-53-744-4302

韓国 - ソウルTel:82-2-554-7200Fax:82-2-558-5932 または 82-2-558-5934

マレーシア - クアラルンプールTel:60-3-6201-9857Fax:60-3-6201-9859

マレーシア - ペナンTel:60-4-227-8870Fax:60-4-227-4068

フィリピン - マニラTel:63-2-634-9065Fax:63-2-634-9069

シンガポールTel:65-6334-8870Fax:65-6334-8850

台湾 - 新竹Tel:886-3-5778-366Fax:886-3-5770-955

台湾 - 高雄Tel:886-7-213-7828

台湾 - 台北Tel:886-2-2508-8600 Fax:886-2-2508-0102

タイ - バンコクTel:66-2-694-1351Fax:66-2-694-1350

ヨーロッパ

オーストリア - ヴェルスTel:43-7242-2244-39

Fax:43-7242-2244-393

デンマーク - コペンハーゲンTel:45-4450-2828 Fax:45-4485-2829

フランス - パリTel:33-1-69-53-63-20 Fax:33-1-69-30-90-79

ドイツ - デュッセルドルフTel:49-2129-3766400

ドイツ - ミュンヘンTel:49-89-627-144-0 Fax:49-89-627-144-44

ドイツ - プフォルツハイムTel:49-7231-424750

イタリア - ミラノ Tel:39-0331-742611 Fax:39-0331-466781

イタリア - ベニスTel:39-049-7625286

オランダ - ドリューネンTel:31-416-690399 Fax:31-416-690340

ポーランド - ワルシャワTel:48-22-3325737

スペイン - マドリッドTel:34-91-708-08-90Fax:34-91-708-08-91

スウェーデン - ストックホルムTel:46-8-5090-4654

イギリス - ウォーキンガムTel:44-118-921-5800Fax:44-118-921-5820

各国の営業所とサービス

01/27/15