WB_UART8_V2 - Wishbone シリアル通信ポート (AD10)
Contents
- レジスタインターフェースの変更
- Baudrate ジェネレーター (BRGHIGH, BRGMID, BRGLOW)
- ラインコントロールレジスタ (LCR)
- Status と割り込みコントロールレジスタ (STATUS, INTMASK_SET, INTMASK_RST)
- シリアル通信パラメータレジスタ (PARM)
- コアバージョンレジスタ (VERSION)
- ソフトウェアプラットフォーム変更
- 修正した関数 - uart8_getchar()
- 新しい関数 - uart8_get_version()
- 新しい関数 - uart8_set_parameters()
- 新しい関数 - uart8_set_user_parity()
- 新しい関数 - uart8_ignore()
- 他の変更
- サンプルデザイン
- 更に
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 長 |
2 | STOPBITS | 停止ビット数を定義: |
3-4 | PARITY | パリティ |
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_version
(uart8_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
をコールします。
他の変更
以前のバージョンのドライバで、割り込みモードの時に既に待機中の他の break があり break 状態を検出した場合、receiver は停止しました。これは、起こりません(break は他の character と同様に扱われます)。
サンプルデザイン
強化された UART ペリフェラルを使用したサンプルデザインは、Altium Designer に含まれています:
UART_Error_Handling.PrjFpg
–\Examples\Soft Designs\Communication\UART ComError Handling
フォルダに保存されています。