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 は、各種標準プロトコル (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.
8 ビット PIC
®
マイクロコントローラの内蔵
UART モジュール
注意: この日本語版文書は参考資料としてご利用ください。最 新情報は必ずオリジナルの英語版をご参照願います。
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 制御ギアおよび制御デバイス — — 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
USART or EUSART
RX/DT
TX/CK
8-bit PIC®MCU
USART or EUSART RX/DT Master Slave 1 TX/CK Data Line Clock Line
8-bit PIC®MCU USART or EUSART RX/DT Slave n TX/CK • • •
bit 0 bit 1 bit 2 bit 3 bit 4 bit 5 bit 6 bit 7 RX/DT pin TX/CK pin (SCKP = 0) TX/CK pin (SCKP = 1)
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 UxTXIE Interrupt Mode Control PPS RxyPPS TX pin TXEN UxBRGH UxBRGL BRGS Multiplier x4 x16 1 0 +1 ÷n Fosc
Baud Rate Generator Address or Parity Mode TXMTIF TX_out UxTXCHK 8 + n
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 UxBRGL BRGS Multiplier x4 x16 1 0 +1 ÷n FoscBaud Rate Generator
Mode Data Recovery Pin Buffer and Control PPS RX pin Stop RXPPS RXEN (8) • • • 1 0 Start Address or Parity Mode UxRXB Register PERIF FERIF RSR Register LSb MSb RXFOIF RXIDL 8 Data Bus UxRXIF UxRXIE Interrupt FIFO n 7 UxRXCHK +
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 7 Start
bit
Stop bit/s
bit 0 bit 1 bit 2 bit 3 bit 4 bit 5 bit 6 bit 7 Start bit Parity bit Stop bit/s bit 0 bit 1 bit 2 bit 3 bit 4 bit 5 bit 6 bit 7
Start bit Address bit Stop bit/s bit 0 bit 1 bit 2 bit 3 bit 4 bit 5 bit 6
Start bit Stop bit/s 7-bit(2) 8-bit
8-bit with odd or even parity(2) 8-bit with address indicator(1)
LSb
1 Baud
bit 0 bit 1 bit 2 bit 3 bit 4 bit 5 bit 6 bit 7 Start
bit bit 8
Stop bit 9-bit(1)
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 1 Start bit Stop bit Databit 0 bit 1 bit 2 bit 3 bit 4 bit 5 bit 6 bit 7
Start bit
Stop bit bit 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 1 TX 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 1 TX RX UART 2 TX RX UART 3 TX RX UART 4 TX RX UART 5 TX RX Time
UxP2L = 0x02 UxP2L = 0x03 UxP2L = 0x04 UxP2L = 0x05 Receiver Address
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 TBITBreak Start Code Slot 1 Data
•••
MAB Slot 2 Data Slot 512
Data DMX512 Packet 25 TBIT 1 TBIT LSb MSb Stop Bits Slot Time RESET Sequence Start Bit RS-485 Transmitter Higher Level Application UART CONSOLE TX T E R M I N A T I O N 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 MAB START Data 0 Data 1 Data 2 Data 3 Data 4 Data 5 Data 6 Data 7 Data 8 Data 9 Data 10 UxP2H:L = 2 UxP3H:L = 5 UxP2H:L = 0 UxP3H:L = 1 UxP2H:L = 8 UxP3H:L = 10 UxP2H:L = 6 UxP3H:L = 7 UxP1H:L = 10 2 2 3 4 1 4 3 1 n = 11 Reset Sequence UxP1H:L = 11 - 1 UxP1H: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
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 bytes void 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 packet void 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 }
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 rxLength
while (!U1ERRIRbits.RXBKIF); // Wait for break reception U1ERRIRbits.RXBKIF = 0;
startCode = UART_Read(); // Save Start code for (uint8_t i = 0; i < rxLength; i++){
rxDataArray[i] = UART_Read(); // Save Data }
/**Some code for Start code and received data processing**/ }
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 Response Frame
Break SYNC Field Data Field 1
•••
Data Field 8 Checksum Field Response Space
Delimiter Bit
Inter-frame Space
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;
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 reception U1ERRIRbits.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; }
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® マイクロコントローラへのMCC LIN スタック ライブラリの実装』を参照してください。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 制御デバイスの初期化用サン プルコードを示します。 IDLE IDLE 1 0 0 1 0 1 0 1 1 0 0 1 1 0 1 0 0 Forward FrameStart Bit Control Byte Data Byte Stop Bits
IDLE 3.5 to 11 TBIT IDLE 0 0 0 1 1 0 0 1 1 Back Frame MSb 1 TBIT Data Byte >11 TBIT Stop Bits Start Bit
TB3156
例11: DALI制 御デバイスの初期化コード ソフトウェアは、次のフォワード フレームを書き込む 前に、出力シフタがエンプティになるまで待機します。 待機時間中にバックワード フレームを受信した場合、 バックワード フレームの受信が完了してから設定さ れた待機時間が過ぎるまで、送信バッファレジスタに 書き込まれたバイトは送信されません。void DALI_ControlDevice_Initialize (void){
U1CON0bits.MODE = 0b1000; // DALI Control Device Mode U1CON0bits.TXEN = 1; // Enable transmit
U1CON0bits.RXEN = 1; // Enable receive
U1P1H = 0x00; // 16 half-bit periods wait time after complete… U1P1L = 0x16; // …transmission of forward frame
U1P2H = 0x00; // Frames following Idle periods more than 15 half-bit… U1P2L = 0x15; // …periods are detected as Forward frames
U1BRGH = 0x0D;
U1BRGL = 0x04; // Baud = 1200; Fosc = 64 MHz
U1CON2bits.TXPOL = 0; // Data polarity is not inverted; Set to '1' if inverted // polarity is required
U1CON2bits.STP = 0b10; // 2 Stop bits
Pin_Initialize(); // Set the corresponding TX pin via PPS
U1CON1bits.ON = 1; // Enable serial port }
TB3156
DALI 制御ギアモード
制御ギアモードは、フォワード フレームを受信し、 バックワード フレームを送信するためのモードです。 バックワード フレームは、制御ギアが制御デバイスへ 返す応答パケットです。DALI では、フォワード フレー ムを受信するまでバックワード フレームは送信でき ません。設定されたしきい値よりも長いアイドル期間 後のフレームだけがフォワード フレームとして検出 されます。例11に、DALI 制御ギア向けの初期化用サ ンプルコードを示します。 例12: DALI制 御ギアの初期化コード フォワード フレームは、受信 FIFO で 1 度に 1 バイト ずつ受信され、受信バッファレジスタから読み出され ます。制御ギアがフォワード フレームから受け取った データは、アプリケーション ソフトウェアで処理され ます。また、制御ギアはバックワード フレームを送信 するかどうかを判断します。待機時間が過ぎた後に バックワード フレーム データが書き込まれた場合、そ のデータは、次のフォワード フレームの後の待機時間 が過ぎるまで保持されます。void DALI_ControlGear_Initialize (void){
U1CON0bits.MODE = 0b1001; // DALI Control Gear Mode U1CON0bits.TXEN = 1; // Enable transmit
U1CON0bits.RXEN = 1; // Enable receive
U1P1H = 0x00; // 8 half-bit periods wait time after complete… U1P1L = 0x08; // …reception of a forward frame
U1P2H = 0x00; // Frames following Idle periods more than 15 half-U1P2L = 0x15; // bit periods are detected as Forward frames U1BRGH = 0x0D;
U1BRGL = 0x04; // Baud = 1200; Fosc = 64 MHz
U1CON2bits.TXPOL = 0; // Data polarity is not inverted; Set to '1' if // inverted polarity is required
U1CON2bits.RXPOL = 0; // Same as TXPOL U1CON2bits.STP = 0b10; // 2 Stop bits
Pin_Initialize(); // Set the corresponding TX pin via PPS
U1CON1bits.ON = 1; // Enable serial port }
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 0 StartBit StopBit
0000h RX Pin
Edge 2 Edge 3 Edge 4 Edge 5
BRG Clock
BRG Value 000Bh
TB3156
自動チェックサム計算
プロトコル サポート付き UART は、送受信チェックサ ム加算器を備えています。有効にした場合、加算器は 送信または受信した各バイトを積算します。積算値は 加算の桁上げを含み、チェックサム レジスタに保存さ れます。 ソフトウェアは、トランザクションの前にチェックサ ム レジスタをクリアし、トランザクションの最後で チェックを実行する必要があります。LIN モードの場 合、自動チェックサム計算は常に有効であり、ハード ウェアが自動的に積算値をクリアおよびチェックしま す。フロー制御
プロトコル サポート付き UART は、ハードウェアおよ びソフトウェアによるフロー制御を備えています。ど ちらを使うかは、ハンドシェイク フロー制御ビットで 選択します。フロー制御は、デバイスがデータ送受信 の準備を完了した時に合図する事により、データ喪失 のリスクを低減すると共にバッファのオーバーランを 防ぎます。ハードウェア
フロー制御
ハードウェア フロー制御は、TX および RX ピンに加 えて2 本のマイクロコントローラ ピンを使います。そ れらの RS-232 信号名は、RTS (Request to Send) と CTS (Clear to Send) です。2 つの DTE (Data Terminal Equipment) 間の代表的な構成を図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の 構成X
ON/X
OFFソフトウェア
フロー制御
XON/XOFFは、特殊なキャラクタを使って送信を保留/ 再開します。トランスミッタは送信中にこの信号を受 信する必要があるため、全二重動作が必要です。UART はXOFFに対して13h を使い、XONに対して11h を使 います。 トランスミッタは既定値によりXON ( トランスミッタ は有効) です。XOFFキャラクタを受信すると、トラン スミッタは実行中のキャラクタ送信を完了した後に、 送信を停止します。トランスミッタは、XONキャラク タを受信するまで停止したままです。 内部ソフトウェア フロー制御を使うと、ハードウェア 制御で必要になる追加のピンを節約できます。しかし、 XONおよびXOFF キャラクタをシリアル ストリームに 挿入するため、レイテンシが生じるという欠点があり ます。 TX CTS RX RTS DTE UART RX RTS DTE UART TX CTS 8-bit PIC® MCU UART RX TXDE SN75716 R RE DE D TX A B 4k7 4k7 VCCTB3156
他の周辺モジュールとの連動
以下では、UART と他の内蔵周辺モジュールを組み合 わせた実装例を示します。HLT を使った RX/TX アクティビティ タイ
ムアウト
偶数番号タイマモジュールが備えるハードウェア リ ミットタイマ(HLT) を使うと、UART の TX および RX ラインのアクティビティを監視できます。TX または RX ラインは、HLT へのリセット信号源として設定で きます。HLT 周期が過ぎる前に UART アクティビティ が HLT を繰り返しリセットするように HLT を設定す る必要があります。HLT 周期が過ぎても TX または RX ライン上でアクティビティが発生しなかった場合、タ イムアウト イベントを知らせる HLT 割り込みが生成 されます。DMA を使った UART データ転送
PIC18FXXK42 等のデバイスは、DMA (Direct Memory Access) コントローラを内蔵しています。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) 通信
TB3156
本書に記載されているデバイス アプリケーション等に関する 情報は、ユーザの便宜のためにのみ提供されているものであ り、更新によって無効とされる事があります。お客様のアプ リケーションが仕様を満たす事を保証する責任は、お客様に あります。Microchip 社は、明示的、暗黙的、書面、口頭、法 定のいずれであるかを問わず、本書に記載されている情報に 関して、状態、品質、性能、商品性、特定目的への適合性を は じ め と す る、い か な る 類 の 表 明 も 保 証 も 行 い ま せ ん。 Microchip 社は、本書の情報およびその使用に起因する一切の 責任を否認します。Microchip 社の明示的な書面による承認な しに、生命維持装置あるいは生命安全用途に Microchip 社の製 品を使用する事は全て購入者のリスクとし、また購入者はこ れによって発生したあらゆる損害、クレーム、訴訟、費用に 関して、Microchip 社は擁護され、免責され、損害をうけない 事に同意するものとします。暗黙的あるいは明示的を問わず、 Microchip社が知的財産権を保有しているライセンスは一切譲 渡されません。 商標
Microchip 社の名称と Microchip ロゴ、dsPIC、FlashFlex、 KEELOQ、KEELOQロゴ、MPLAB、PIC、PICmicro、PICSTART、 PIC32ロゴ、rfPIC、SST、SST ロゴ、SuperFlash、UNI/O は、 米 国お よ びそ の 他の 国 にお け る Microchip Technology Incorporated の登録商標です。
FilterLab、Hampshire、HI-TECH C、Linear Active Thermistor、 MTP、SEEVAL、Embedded Control Solutions Company は、 米国における Microchip Technology Incorporated の登録商標 です。
Silicon Storage Technology は、その他の国における Microchip Technology 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 Technology Germany II GmbH & Co. & KG (Microchip Technology Incorporated の子会社 ) の登録商標です。
その他、本書に記載されている商標は各社に帰属します。 ©2013, Microchip Technology Incorporated, Printed in the U.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
北米 本社 2355 West Chandler Blvd. Chandler, AZ 85224-6199 Tel:480-792-7200 Fax:480-792-7277 技術サポート : http://www.microchip.com/ support URL: 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-8323 Fax: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 Floor Tower 6, The Gateway Harbour City, Kowloon Hong Kong Tel:852-2943-5100 Fax:852-2401-3431 オーストラリア - シドニー Tel:61-2-9868-6733 Fax:61-2-9868-6755 中国 - 北京 Tel:86-10-8569-7000 Fax:86-10-8528-2104 中国 - 成都 Tel:86-28-8665-5511 Fax:86-28-8665-7889 中国 - 重慶 Tel:86-23-8980-9588 Fax:86-23-8980-9500 中国 - 東莞 Tel:86-769-8702-9880 中国 - 杭州 Tel:86-571-8792-8115 Fax:86-571-8792-8116 中国 - 香港 SAR Tel:852-2943-5100 Fax:852-2401-3431 中国 - 南京 Tel:86-25-8473-2460 Fax:86-25-8473-2470 中国 - 青島 Tel:86-532-8502-7355 Fax:86-532-8502-7205 中国 - 上海 Tel:86-21-5407-5533 Fax:86-21-5407-5066 中国 - 瀋陽 Tel:86-24-2334-2829 Fax:86-24-2334-2393 中国 - 深圳 Tel:86-755-8864-2200 Fax:86-755-8203-1760 中国 - 武漢 Tel:86-27-5980-5300 Fax:86-27-5980-5118 中国 - 西安 Tel:86-29-8833-7252 Fax: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-8631 Fax: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-4301 Fax:82-53-744-4302 韓国 - ソウル Tel:82-2-554-7200 Fax:82-2-558-5932 または 82-2-558-5934 マレーシア - クアラルンプール Tel:60-3-6201-9857 Fax:60-3-6201-9859 マレーシア - ペナン Tel:60-4-227-8870 Fax:60-4-227-4068 フィリピン - マニラ Tel:63-2-634-9065 Fax:63-2-634-9069 シンガポール Tel:65-6334-8870 Fax:65-6334-8850 台湾 - 新竹 Tel:886-3-5778-366 Fax:886-3-5770-955 台湾 - 高雄 Tel:886-7-213-7828 台湾 - 台北 Tel:886-2-2508-8600 Fax:886-2-2508-0102 タイ - バンコク Tel:66-2-694-1351 Fax: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-90 Fax:34-91-708-08-91 スウェーデン - ストックホルム Tel:46-8-5090-4654 イギリス - ウォーキンガム Tel:44-118-921-5800 Fax:44-118-921-5820