WB_UART8_V2 - Wishbone シリアル通信ポート (AD10)

Parent article: Wishbone コンポーネント

WB_UART8_V2 ペリフェラルは Altium Designer 10 で強化されました。以下の新しい機能があります:

  • 言語の長さは 5、6、7、8 ビットに設定できます 
  • パリティは None、Odd、Even、User-Defined に設定できます。 
  • 1 or 2 stop bits
  • 追加されたシリアル通信パラメータレジスタ (PARM)
  • 追加されたバージョン情報レジスタ (VERSION)

ハードウェア側(ペリフェラルコア自体)では、変更は内部レジスタへ反映、設定されます。Software Platform 側では、サポートするドライバが強化され新しいコアを適応させるために変更されました。このアーティクルでは変更のみを説明します。ペリフェラルの資料(このページの 更に の項目にあるリンク)と一緒に確認してください。 

このバージョンのコアに設定したレジスタは変更(拡張)しましたが、既存の WB_UART8_V2 と互換性があります。

レジスタインターフェースの変更

以下の表は、以降の項目で説明する既存のレジスタや新しいレジスタへの特定の変更についてと、新しい WB_UART8_V2 ペリフェラルに設定したレジスタの概要です。 

アドレス

レジスタ

Content

0000

BRGHIGH

高バイトの baudrate ジェネレーター

0001

BRGMID

中バイトの baudrate ジェネレーター

0010

BRGLOW

低バイトの baudrate ジェネレーター

0011

LCR

ラインコントロール

0100

STATUS

UART status レジスタ

0101

INTMASK_SET

割り込みマスクの read とセット

0110

INTMASK_RST

割り込みマスクリセット

0111

SBUF

シリアル伝送と受信バッファ

1000

TXLOWMARK

Transmitter low watermark

1001

RXHIGHMARK

Receiver high watermark

1010

RXLOWMARK

Receiver low watermark

1011

RXDTO

Receiver タイムアウト

1100

ICD

Inter-character 遅延

1101

BRKLEN

Break length

1110

PARM

シリアル通信パラメータ

1111

VERSION

コアバージョン

Baudrate ジェネレーター (BRGHIGH, BRGMID, BRGLOW)

baudrate ジェネレーターは、CLK_I 信号の各立ち上がりエッジでレジスタ 0、1、2 に設定した値と共に増えるカウンタから成ります。オーバーフローする時、UART state マシンで state 変更を生成します。内部の state マシンは 1 ビットにつき 8 サイクルから成ります。 

ラインコントロールレジスタ (LCR)

ラインコントロールレジスタは以下のビットから成ります:

ビット

信号

Content

0

CTSEN

設定した場合、CTS/RTS handshake を使用

1

FORCERTS

RTS を強制的に既知の state へ

2

RTSVAL

FORCERTS を設定した場合、RTS の値

3

FRAMERR

framing エラーは receiver で検出されました

4

PARERR

パリティエラーは receiver、またはユーザ定義のパリティを選択する時、パリティビットの値で検出されました

5

RXD

RXD 入力の値

6

BREAK

BREAK 状態が receiver で検出されました

7

CTS

CTS 入力の値

FRAMERR と PARERR ビットは新しいバージョン 3 のコアです。それらは旧バージョンで '0' として読みます。

FRAMERR は、BREAK(receiver は '0' になる停止ビットを検出したので!)の場合に'1' になります。同様に、PARERR は BREAK の場合に設定されるかもしれません。もし、それを設定しない場合、FRAMERR、PARERR(FRAMERR も設定しない場合)をチェックし最初に、BREAK のために検出すべきです。 

エラーと break ビットは FIFO の最高の受信状態を示します。receiver FIFO を読んだらそれらをクリアします。 

Status と割り込みコントロールレジスタ (STATUS, INTMASK_SET, INTMASK_RST)

Status と割り込みコントロールレジスタは以下のビットから成ります:

ビット

信号

Content

0

TXFULL

Transmitter FIFO は一杯です

1

TXEMPTY

Transmitter FIFO は空です

2

TXLOW

Transmitter FIFO はほとんど空です

3

TXSHEMPTY

Transmitter シフトレジスタは空です

4

RXTIMEOUT

Receive FIFO は char を読まずタイムアウトします

5

RXNEMPTY

Receive FIFO は空ではありません

6

RXHIGH

Receive FIFO はほとんど一杯です

7

RXFULL

Receive FIFO は制限を超えました

シリアル通信パラメータレジスタ (PARM)

シリアル通信パラメータレジスタは以下のビットから成ります:

ビット

信号

Content

0..1

WORDLEN

Word 長
00 = 5 ビット
01 = 6 ビット
10 = 7 ビット
11 = 8 ビット

2

STOPBITS

停止ビット数を定義:
0 = 1 stopbit
1 = 2 stopbits

3-4

PARITY

パリティ
00 = None
01 = Even
10 = User
11 = Odd

5

PARITYVAL

PARITY を "User" に設定した場合のパリティビットの値

このレジスタはこのバージョンの新しいコアです。旧バージョンでそれに書いても効果はありません。reading は既知の値を戻します。

コアバージョンレジスタ (VERSION)

バージョン情報を得るには、途中で他のレジスタを読まないでこのレジスタを 2 度読んでください。もし、MSB が state を変更する('1' から '0' へ、またはその逆)場合、他の 7 ビットはバージョン数を含みます。もし、MSB が変更しない場合、コアバージョンは無効です。この場合に、バージョン 3 より古いコアと仮定します。 

ソフトウェアプラットフォーム変更

新しいバージョンの WB_UART8_V2 を考慮するために、Software Platform ドライバが強化、修正されました。ほとんどの場合に、新しいドライバを使用する時、アプリケーションの変更は必要ありません。 

修正した関数 - uart8_getchar()

以下の特別な値は、 uart8_getchar() から戻された値の OR'ed を含めることができます:

  • UART8_PARERR
  • UART8_FRAMERR

これらの値は、データを受信している時の通信エラーを示します。PARERR はパリティエラーを示します。FRAMERR は framing エラーを示します。注意: ユーザパリティを選択する時、user parity を示すために UART8_PARERR を使用します。これは必ずしもエラーではありません!

新しい関数 - uart8_get_version()

Parameters: drv – ドライバへのポインタは uart8_open() で戻された時に構築されます 

Returns: コアバージョン数

コアバージョンを取り戻すには関数 uart8_get_versionuart8_open() を使用してドライバを開いた後)を使用します。その関数は 3、またはより高度なコアバージョン 3、またはそれ以降を戻します。そうでなければ、バージョン 2 を戻します。 

新しい関数 - uart8_set_parameters()

Parameters: drv – ドライバへのポインタは uart8_open() で戻された時に構築されます
                         baudrate – ビット/秒のリクエストした通信スピード 
                         parity – 設定するためのパリティ
                         wordlen – word 長 (5、6、7、8 ビット)
                         stopbits – 停止ビット数 (1、または 2 であるべきです)

Returns: nothing

通信パラメータを設定するにはこの関数を使用します。コアは、no parity、8 つのデータビット、 1 つの停止ビット、no speed(効果的に無効)にリセット後、初期化されます。この動作は、以前の WB_UART8 コアと同じです。 

parity パラメータは以下が可能です:

  • UART8_NO_PARITY – no parity
  • UART8_ODD_PARITY – odd parity
  • UART8_EVEN_PARITY – even parity
  • UART8_USER_PARITY – user parity

ユーザパリティを設定する時、その値を定義するには関数 uart8_set_user_parity() を使用します。 

新しい関数 - uart8_set_user_parity()

Parameters: drv – ドライバへのポインタは uart8_open() で戻された時に構築されます
                         val – 送信に使用するパリティビットの値 

Returns: 特にありません

パリティを "user parity" に設定する時、送信のためにパリティビットの値を定義するにはこの関数を使用します。このパリティビットは送信したデータの内容に依存しませんが、この関数で定義した値に従って設定されます。 

注意: ユーザパリティでデータを受信している時、 UART8_PARERR は parity slot に '1'、または '0' を送ったリモートデバイスを示します。 

新しい関数 - uart8_ignore()

Parameters: drv – ドライバへのポインタは uart8_open() で戻された時に構築されます
                         rx_mask – どの状態が getchar() でレポートする必要が無いかを示すマスク 

Returns: 特にありません

デフォルトでは、getchar() を使用している時、パリティと framing エラーと同様に break はユーザへレポートされます。データを受信している時、これらの状態を無視すべきドライバを識別し、エラーと/または break をスキップするには、この関数を使用します。マスクは、UART8_BREAK、UART8_PARERR、UART8_FRAMERR の値の論理的な OR から成るべきです。このように、framing やパリティエラーを無視したいが break について知りたい場合、UART8_PARERR|UART8_FRAMERR に設定したマスク値がある uart8_ignore をコールします。

uart8_read() は、break と/またはエラー状態をレポートしませんが常にそれらをスキップします!

他の変更

以前のバージョンのドライバで、割り込みモードの時に既に待機中の他の break があり break 状態を検出した場合、receiver は停止しました。これは、起こりません(break は他の character と同様に扱われます)。 

サンプルデザイン

強化された UART ペリフェラルを使用したサンプルデザインは、Altium Designer に含まれています:

  • UART_Error_Handling.PrjFpg\Examples\Soft Designs\Communication\UART ComError Handling フォルダに保存されています。

更に

You are reporting an issue with the following selected text and/or image within the active document: