ムライボックス (4) --- エコノミー版 (2)

今回は、送信 UART によってシリアル化された信号を切り取る時間窓としてのゲート信号に要求されるタイミングについて説明します。
まず、シリアル信号とゲート信号との関係を表すタイミング・チャートを下に示します。

一番上の「UART_TX」信号が送信 UART によってシリアル化された送信信号です。
「S」と記入してあるのがスタート (Start) ビットで、「P」がストップ (stoP) ビットです。 「0」から「7」までの数字は 8 ビット・データのビット番号を示しています。
シリアル信号のフォーマットは、8 ビット・データ / パリティなし / 1 ストップ・ビットの、いわゆる「8N1」フォーマットとなっています。
3 キャラクタ分の波形を示してありますが、1 番目と 3 番目のキャラクタは 1 部分のみの表示となっています。 1 番目と 2 番目のキャラクタは連続して送信されており、2 番目のキャラクタ・フレームの終了後、しばらく送信 UART はアイドル状態を経過してから 3 番目のキャラクタを送出しています。
「GATE_n」信号が任意のポートのゲート信号に要求される信号変化の一般的なタイミングを示しています。
このゲート信号でスタート・ビットが「削られて」しまうと受信側の MIDI 機器の受信タイミング・マージンを損なって受信エラーにつながることがあります。 そうならないためには、ゲート信号が変化し終わってから送信 UART は次のキャラクタの送信に入らなければなりません。
このこと自体はソフトウェア的には簡単で、

  • まず、次のキャラクタに対するゲート信号の値を設定
  • 次いで、送信 UART のバッファ・レジスタに次のキャラクタ・データを書き込む

という順序を守れば、ゲート信号によってスタート・ビットが削られることはありません。
一方、送信データの最上位ビットである b7 についても考慮する必要があります。
b7 の送信タイミングが終わって、ストップ・ビットの送信に入ってからゲート信号を変化させれば、b7 がゲート信号によって削られることはありません。
結局、b7 と次のスタート・ビットの間にあるストップ・ビットの幅の範囲内でゲート信号を切り換えれば、スタート・ビットおよびデータ・ビット部分に影響を与えることはありません。
2 番目と 3 番目のキャラクタのように、間にアイドル状態が挟まっている場合には、ゲート信号の切り換えタイミングはストップ・ビットおよびアイドル状態の期間内におさまれば影響がありません。
タイミング・チャートの「GATE_1」信号は、2 番目のキャラクタを抜き出し、1 番目と 3 番目のキャラクタはブロックする場合のタイミングです。
一番下の信号「OUT_1」は、UART_TX 信号と GATE_1 信号の "OR" (論理和) を取ったもので、2 番目のキャラクタのみを抜き出し、1 番目と 3 番目のキャラクタのタイミングでは論理値「1」により「埋められる」あるいは「塗りつぶされる」状態になっています。
この UART がストップ・ビットの送信状態に入った、あるいは、ストップ・ビットを含めて送信が完全に終了したという状態については、ほとんどの UART モジュールではステータス・レジスタ

  • 送信シフトレジスタ・エンプティ (transmit shift register empty)
  • 送信完了 (transmit complete / transmit done)
  • 送信アイドル (transmit idle)

といったように名付けられたフラグを持っており、また一部の機種では割り込みをかけることが可能です。
次回は、各マイコンに内蔵されている UART モジュールの、このフラグに関する仕様を比較しながら説明します。