13. 非同期送受信UART
13.1 UART概要
CH559チップは、2つの全二重非同期シリアルポートを備えています。UART0とUART1です。UART0は、標準的なMCS51シリアルポートです。データの送受信は、物理的に分離された送信/受信レジスタへのSBUFアクセスによって実現されます。SBUFに書き込まれたデータは送信レジスタにロードされ、SBUFへの読み出し操作は受信バッファレジスタに対応します。
UART1は、以下の機能を持つ拡張非同期シリアルポートです:
- 16C550の非同期式シリアルポートと互換性があり、拡張されています。
- 5、6、7、8データビットと1、2ストップビットをサポート。
- 奇数、偶数、パリティなし、ブランク0、フラグ1などの検証方法に対応。
- プログラム可能な通信ボーレート、115200bpsをサポートし、最大3Mbpsの通信ボーレートを実現。
- 独立した送受信バッファと8バイトのFIFO FIFOバッファを内蔵し、4つのFIFOトリガレベルをサポート。
- MODEMモデムの信号CTS、DSR、RI、DCD、DTR、RTSをサポートし、外部からRS232レベルに変換することができます。
- TL16C550Cと互換性のあるハードウェアフローコントロール信号CTSとRTSの自動ハンドシェイクと自動伝送レートコントロールをサポートしています。
- シリアルフレームエラー検出、ブレイクライン間隔検出に対応。
- SIR赤外線コーデックを内蔵し、2400bps~115200bpsのボーレートでのIrDA赤外線通信に対応。
- 全二重、半二重のシリアル通信に対応し、RS485を切り替えるためのステータス端子を備えています。
- 半二重差動トランシーバーを内蔵し、RS485バスと同様のシンプルな長距離複合機通信を直接サポートします。
- 本機をスレーブとして使用する際のアドレスのプリセットをサポートし、複数台通信時にバス上のデータパケットを自動的に一致させるために使用します。
13.2 UARTレジスタ
表13.2.1 UART関連レジスタ一覧
名前 | アドレス | 備考 | リセット値 |
---|---|---|---|
SBUF | 99h | UART0データレジスタ | xxh |
SCON | 98h | UART0制御レジスタ | 00h |
SER1_DLL | 9Ah | UART1ボーレートディバイザーラッチ下位バイト | xxh |
SER1_RBR | 9Ah | UART1データ受信バッファレジスタ(読み取り専用) | xxh |
SER1_THR | 9Ah | UART1データ送信ホールドレジスタ(書き込み専用) | xxh |
SER1_FIFO | 9Ah | UART1データFIFOリード/ライトレジスタ | xxh |
SER1_DIV | 97h | UART1プリスケーラ除算器レジスタ | xxh |
SER1_ADDR | 97h | UART1バスアドレスプリセットレジスタ | FFh |
SER1_MSR | 96h | UART1 MODEMステータスレジスタ(読み取り専用) | F0h |
SER1_LSR | 95h | UART1ラインステータスレジスタ(読み取り専用) | 60h |
SER1_MCR | 94h | UART1 MODEM制御レジスタ | 00h |
SER1_LCR | 93h | UART1ライン制御レジスタ | 00h |
SER1_IIR | 92h | UART1割り込み識別レジスタ(読み取り専用) | 01h |
SER1_FCR | 92h | UART1 FIFO制御レジスタ(書き込み専用) | 00h |
SER1_DLM | 91h | UART1ボーレートディバイザラッチ上位バイト | 80h |
SER1_IER | 91h | UART1割り込み許可レジスタ | 00h |
13.2.1 UART0レジスタ概要
UART0制御レジスタ(SCON):
ビット | 名前 | アクセス | 備考 | リセット値 |
---|---|---|---|---|
7 | SM0 | RW | UART0作業モード選択ビット0。 0: 8ビットデータの非同期通信が選択。 1: 9ビットデータの非同期通信が選択。 | 0 |
6 | SM1 | RW | UART0作業モード選択ビット1。 0: 固定ボーレートを設定。 1: T1またはT2によって生成される可変ボーレートを設定。 | 0 |
5 | SM2 | RW | UART0マルチマシン通信制御ビットです。 | 0 |
4 | REN | RW | UART0 許可受信制御ビットです。 0: 受信無効。 1: 受信可能。 | 0 |
3 | TB8 | RW | 送信データの9ビット目です。モード2および3では、TB8は送信データの9ビット目を書き込むために使用され、パリティビットになることがあります。マルチマシン通信では、ホストがアドレスバイトを送信するかどうかを示すために使用されます。 データバイト、TB8=0はデータ、TB8=1はアドレスです。 | 0 |
2 | RB8 | RW | 受信データの9ビット目、モード2と3では、RB8を使って受信データの9ビット目を格納します。モード1では、SM2=0の場合、RB8を使用して受信したストップビットを格納します。モード0では、RB8を使用せず。 | 0 |
1 | TI | RW | 送信割り込みフラグビット。データバイトが送信された後にハードウェアによって設定され、ソフトウェアによってクリアされる必要があります。 | 0 |
0 | RI | RW | 受信割り込みフラグビット。データバイトを受信した後にハードウェアによって設定され、ソフトウェアによってクリアされる必要があります。 | 0 |
表13.2.1.1 UART0作業モード選択
SM0 | SM1 | 備考 |
---|---|---|
0 | 0 | モード0。シフトレジスタモード、固定ボーレートはFsys / 12 |
0 | 1 | モード1。8ビットの非同期通信モード。可変ボーレート、タイマーT1またはT2で生成されます。 |
1 | 0 | モード2。9ビットの非同期通信モード。ボーレートは、Fsys / 128(SMOD = 0)またはFsys / 32(SMOD = 1)です。 |
1 | 1 | モード3。9ビット非同期通信。可変ボーレート。タイマーT1またはT2で生成。 |
モード1および3では、RCLK = 0およびTCLK = 0の場合、UART0のボーレートはタイマーT1によって生成されます。T1はモード2のオートリロード8ビットタイマーモードに設定し、bT1_CTとbT1_GATEは共に0でなければならず、以下のタイプのクロック状況に分けられます。
表13.2.1.2 T1で生成されるUART0ボーレートの計算式
bTMR_CLK | bT1_CLK | SMOD | 備考 |
---|---|---|---|
1 | 1 | 0 | TH1 = 256-Fsys/32/ボーレート |
1 | 1 | 1 | TH1 = 256-Fsys/16/ボーレート |
0 | 1 | 0 | TH1 = 256-Fsys/4/32/ボーレート |
0 | 1 | 1 | TH1 = 256-Fsys/4/16/ボーレート |
X | 0 | 0 | TH1 = 256-Fsys/12/32/ボーレート |
X | 0 | 1 | TH1 = 256-Fsys/12/16/ボーレート |
モード1および3では、RCLK = 1またはTCLK = 1の場合、UART0のボーレートはタイマーT2によって生成されます。T2は16ビットの自動再搬送レート生成モードに設定し、C_T2とCP_RL2はともに0でなければならず、以下のタイプのクロック状況に分けられます。
表13.2.1.3 T2で生成されるUART0ボーレートの計算式
bTMR_CLK | bT2_CLK | 備考 |
---|---|---|
1 | 1 | RCAP2 = 65536-Fsys/16/ボーレート |
0 | 1 | RCAP2 = 65536-Fsys/2/16/ボーレート |
X | 0 | RCAP2 = 65536-Fsys/4/16/ボーレート |
UART0データレジスタ(SBUF):
ビット | 名前 | アクセス | 備考 | リセット値 |
---|---|---|---|---|
[7:0] | SBUF | RW | UART0のデータレジスタで、物理的に分離した2つのレジスタの送信と受信を含む。SBUFへのデータ書き込みは、送信データレジスタに対応します。SBUFからのデータの読み出しは、受信データレジスタに対応します。 | xxh |
13.2.2 UART1関連レジスタ
UART1データFIFOリード&ライトレジスタSER1_FIFOは、データ受信バッファレジスタSER1_RBRとデータ送信ホールディングレジスタSER1_THRの2つの物理的に独立したレジスタを含む。
データ受信バッファレジスタ(SER1_RBR), bLCR_DLAB = 0の場合:
ビット | 名前 | アクセス | 備考 | リセット値 |
---|---|---|---|---|
[7:0] | SER1_RBR | RO | シリアルポート受信バッファレジスタ。SER1_LSRのbLSR_DATA_RDYビットが1であれば、このレジスタから受信データを読み出すことができる。bFCR_FIFO_ENが1の場合、シリアルポートのシフトレジスタから受信したデータは、まず受信FIFOに格納されてから、このレジスタのリードに渡される。 | xxh |
データ送信用ホールドレジスタ(SER1_THR), bLCR_DLAB = 0の場合:
ビット | 名前 | アクセス | 備考 | リセット値 |
---|---|---|---|---|
[7:0] | SER1_THR | WO | 送信FIFOを含むシリアルポートの送信ホールドレジスタは、送信するデータの書き込みに使用されます。bFCR_FIFO_ENが1の場合、書き込まれたデータは、まず送信FIFOに格納され、その後送信シフトレジスタを介して1つずつ出力される。 | xxh |
割り込み許可レジスタ(SER1_IER), bLCR_DLAB = 0の場合:
ビット | 名前 | アクセス | 備考 | リセット値 |
---|---|---|---|---|
7 | bIER_RESET | RW | シリアルポートソフトウェアリセット制御ビット。 1: シリアルポートがリセットされます。 このビットは、ソフトウェアクリアなしで自動的にクリアすることができます。 | 0 |
6 | bIER_EN_MODEM_O | RW | UART1モデム信号出力許可ビットです。 1: MODEM信号RTS/DTRの出力が有効になります。 0: 出力は無効となります。 | 0 |
5 | bIER_PIN_MOD1 | RW | UART1ピンモード選択上位 | 0 |
4 | bIER_PIN_MOD0 | RW | UART1ピンモード選択下位 | 0 |
3 | bIER_MODEM_CHG | RW | モデム入力状態変化割り込み許可ビット。 1: モデム入力状態変化割り込みを有効にする。 0: 無効にする。 | 0 |
2 | bIER_LINE_STAT | RW | 受信ラインステータス割り込み許可ビット。 1: 受信ラインステータス割り込みが有効になります。 0: 無効になります。 | 0 |
1 | bIER_THR_EMPTY | RW | 送信保持レジスタ空割り込み許可ビット。 1: 送信保持レジスタ空割り込みが有効になります。 0: 無効になります。 | 0 |
0 | bIER_RECV_RDY | RW | 受信データ割り込み許可ビット。 1: 受信データ完了割り込みとそれに続く受信データのタイムアウト割り込みの発生が有効になります。 0: 無効になります。 | 0 |
UART1のピンモードは、bIER_PIN_MOD1とbIER_PIN_MOD0の両方と、bUH1_DISABLE、bXBUS_CS_OE、bXBUS_AL_OE、bALE_CLK_ENを組み合わせて、さまざまな構成を選択できます。これらのうち,最後の4つはRS485ENにまとめることができます。:
RS485EN = bUH1_DISABLE & ~ ( bXBUS_CS_OE & ~ bXBUS_AL_OE | bALE_CLK_EN )
RS485EN | bIER_PIN_MOD1 | bIER_PIN_MOD0 | 備考 |
---|---|---|---|
x | 0 | 0 | RXD1: P4.0/RXD1_ TXD1: 無効 |
0 | 1 | 0 | RXD1: P2.6 TXD1: P2.7 |
0 | 0 | 1 | RXD1: P4.0/RXD1_ TXD1: P4.4/TXD1_ |
0 | 1 | 1 | RXD1: P2.6 TXD1: P2.7 TNOW: P2.5 |
1 | 1 | 0 | RXD1: iRS485 XAと共有 TXD1: iRS485のXBと共有 |
1 | 0 | 1 | RXD1: iRS485 XAと共有 TXD1: iRS485のXBと共有 TNOW: P4.4 |
1 | 1 | 1 | RXD1: iRS485 XAと共有 TXD1: iRS485のXBと共有 TNOW: P2.5 |
上の表の最後の3つの構成は、iRS485の半二重通信モードです。この時、RS485EN=1、RXD1とTXD1はiRS485の差動ピンXAとXBを併用しています。内蔵の半二重差動トランシーバーを介して、それは直接バスのシンプルなRS485長距離複数のマシンの通信をサポートしています。
iRS485の半二重通信モードでは、以下のパラメータを設定する必要があります:
- SER1_MCRのbMCR_HALFを1に設定し、半二重トランシーバモードとする。
- UHUB1_CTRLのbUH1_DISABLEを1に設定することで,HP / HM端子を無効にすることができる。
割り込み識別レジスタ(SER1_IIR):
ビット | 名前 | アクセス | 備考 | リセット値 |
---|---|---|---|---|
[7:6] | MASK_U1_IIR_ID | R0 | FIFO許可フラグ、11はFIFOが有効であることを意味する | 00b |
[5:4] | reserved | R0 | 予約 | 00b |
[3:0] | MASK_U1_IIR_INT | R0 | UART1割り込みステータスフラグ | 0001b |
0 | bIIR_NO_INT | R0 | UART1は割り込みフラグで、割り込みがないと1になります。0は割込みあり | 1 |
UART1の割り込み状態は、bIIR_INT_FLAG3、bIIR_INT_FLAG2、bIIR_INT_FLAG1、bIIR_INT_FLAG0の4ビットで構成されています。MASK_U1_IIR_INTは、UART1のシリアルポート割り込みフラグとして使用されます。具体的な割り込みの内容は次の表のとおりです。
名前 | アドレス | 割り込み種類 | 割り込みソース | 割り込みクリア方法 |
---|---|---|---|---|
U1_INT_SLV_ADDR | 0Eh | バスアドレス一致 | 受信1データはシリアルバスアドレスで、アドレスはプリセット値またはブロードキャストアドレスと一致する | SER1_IIRの読み出しまたはマルチマシンモードの無効化 |
U1_INT_LINE_STAT | 06h | 受信ラインの状態 | bLSR_OVER_ERRまたはbLSR_PAR_ERRまたはbLSR_FRAME_ERRまたはbLSR_BREAK_ERR | SER1_LSR読み出し |
U1_INT_RECV_RDY | 04h | 受信データあり | 受信したバイト数がFIFOのトリガーポイントに達した場合 | SER1_RBR読み出し |
U1_INT_RECV_TOUT | 0Ch | 受信データタイムアウト | データを受信したが、次のデータを4データバイト以上受信していない場合 | SER1_RBR読み出し |
U1_INT_THR_EMPTY | 02h | SER1_THRレジスタが空 | 送信ホールディングレジスタが空になり、bIER_THR_EMPTYが0から1に変化して、割り込みが再び有効になる。 | SER1_IIR読み出しかSER1_THR書き込み |
U1_INT_MODEM_CHG | 00h | MODEMの入力変化 | △CTSまたは△DSRまたは△RIまたは△DCD | SER1_MSR読み出し |
U1_INT_NO_INTER | 01h | 割り込み無し | 割り込みがない場合 |
FIFO制御レジスタ(SER1_FCR):
ビット | 名前 | アクセス | 備考 | リセット値 |
---|---|---|---|---|
7 | bFCR_FIFO_TRIG1 | W0 | 受信FIFO割り込みとハードウェアフローコントロールのトリガーポイントがHIGHに設定される | 0 |
6 | bFCR_FIFO_TRIG0 | W0 | 受信FIFO割り込みとハードウェアフローコントロールのトリガーポイントがLOWに設定される | 0 |
[5:3] | reserved | R0 | 予約 | 000b |
2 | bFCR_T_FIFO_CLR | W0 | 送信FIFOデータクリアイ許可ビット。このビットが1の場合、送信FIFO内のデータ(送信中のデータを除く)がクリアされます。このビットは、ソフトウェアでクリアしなくても自動的にクリアできます。 | 0 |
1 | bFCR_R_FIFO_CLR | W0 | 受信FIFOデータクリア許可ビット。このビットが1の場合、受信FIFO内のデータ(受信中のデータを除く)がクリアされます。このビットは、ソフトウェアでクリアしなくても自動的にクリアできます。 | 0 |
0 | bFCR_FIFO_EN | W0 | FIFO許可ビット。 1: FIFOが有効になります。 0: FIFOは無効になります。 FIFOをディセーブルにすると、16C450互換モードとなり、1バイトの深さしかないFIFOと同等になります。FIFOを有効にすることをお勧めします。 | 0 |
bFCR_FIFO_TRIG1とbFCR_FIFO_TRIG0は、MASK_U1_FIFO_TRIGを構成し、受信FIFOの割り込みポイントとハードウェアフローコントロールのトリガーポイントを設定するために使用されます。
11: 7バイトに対応しています。つまり、7バイトフルに受信するとデータ受信可能な割り込みが発生します。=1の場合、RTS端子のレベルは自動的に無効になります。
10: 4バイトに対応しています。
01: 2バイトに対応しています。
00: 1バイトに対応しています。
ライン制御レジスタ(SER1_LCR):
ビット | 名前 | アクセス | 備考 | リセット値 |
---|---|---|---|---|
7 | bLCR_DLAB | RW | ボーレートディバイザラッチアクセス許可ビット。 0: レジスタSER1_RBR, SER1_THR, SER1_IER, SER1_ADRへのアクセスが有効となる。 1: レジスタSER1_DLL, SER1_DLM, SER1_DIVへのアクセスが可能となる。 | 0 |
6 | bLCR_BREAK_EN | RW | 強制BREAKライン間隔許可ビット。 0: BREAK出力は発生しません。 1: 強制的にBREAK出力を行います。 | 0 |
5 | bLCR_PAR_MOD1 | RW | ハイパリティモード | 0 |
4 | bLCR_PAR_MOD0 | RW | ローパリティモード | 0 |
3 | bLCR_PAR_EN | RW | パリティ許可ビット。 0: パリティビットはありません。 1: 送信時にパリティチェックビットを生成し、受信時にパリティチェックビットを受信することができます。 | 0 |
2 | bLCR_STOP_BIT | RW | ストップビットフォーマット設定ビット。 0: ストップビットが1つあります。 1: ストップビットが2つあります。 | 0 |
1 | bLCR_WORD_SZ1 | RW | データワード長セット上位 | 0 |
0 | bLCR_WORD_SZ0 | RW | データワード長セット下位 | 0 |
bLCR_PAR_MOD1とbLCR_PAR_MOD0の組み合わせにより、bLCR_PAR_ENが1の時のパリティビットのフォーマットを設定する。
00: 奇数パリティ。
01: 偶数パリティ。
10: フラグビット(MARKを1に設定)。
11: ブランクビット(SPACEを0にクリア)。
bLCR_WORD_SZ1とbLCR_WORD_SZ0の組み合わせで、パリティなしの1つのデータのワード長を設定します。
00: 5データビット。
01: 6データビット。
10: 7データビット。
11: 8データビット。
MODEM制御レジスタ(SER1_MCR):
ビット | 名前 | アクセス | 備考 | リセット値 |
---|---|---|---|---|
7 | bMCR_HALF | RW | 半二重送受信モード許可ビット。 0: 半二重送受信モードが無効となり、全二重をサポートします。 1: 自動半二重送受信モードになります。送信が優先されます。送信中は受信が中断されます。 | 0 |
6 | bMCR_TNOW | RW | RTSピン機能選択ビット。 0: 標準的なRTS出力となります。 1: TNOW出力となります。出力の状態は、送信中です。 このビットは、RS485の半二重モードの制御に使用できます。 | 0 |
5 | bMCR_AUTO_FLOW | RW | CTSとRTSのハードウェア自動フロー制御許可ビット。 0: ハードウェア自動フロー制御が無効になります。 1: ハードウェア自動フロー制御が有効になります。 ハードウェアフロー制御が有効になった後、シリアルポートは、CTSピン入力がアクティブLOWの場合のみ次のデータの送信を継続し、それ以外の場合はシリアルポートの送信を中断します。ハードウェアフロー制御が有効になった後、bMCR_RTSが1の場合、受信FIFOが空になると、シリアルポートは自動的に低レベルのRTSピンを作動させます。受信したバイト数がFIFOのトリガーポイントに達すると、シリアルポートは自動的にRTSピンを無効にし、受信FIFOが空になると再びRTSピンを有効にすることができるようになります。ハードウェアフロー制御を有効にすると、CTSAの入力状態の変化はMODEMの状態割り込みを生成しません。自身のCTSピンを相手のRTSピンに接続し、自身のRTSピンを相手のCTSピンに送ることで、ハードウェアによる自動レートコントロールを実現することができます。 | 0 |
4 | bMCR_LOOP | RW | 内部ループのテストモード許可ビットです。 0: 内部ループテストは無効となります。 1: 内部ループテストが有効になります。 内部ループテストモードでは、シリアルポートのすべての外部出力ピンが非アクティブになります。TXD1は内部的にRXD1に、RTSは内部的にCTSに、DTRは内部的にDSRに、OUT1は内部的にRIに、OUT2は内部的にDCDに戻ります。 | 0 |
3 | bMCR_OUT2 | RW | シリアルポート割り込み要求出力許可ビット。 0: シリアルポート割り込み要求出力は無効になります。 1: シリアルポート割り込み要求出力が有効になります。 | 0 |
2 | bMCR_OUT1 | RW | ユーザー定義のMODEM制御ビット。実際の出力端子は接続されていません。内部ループテスト、または汎用データビットとして使用します。 | 0 |
1 | bMCR_RTS | RW | RTSピン出力制御ビット。 0: RTSピン出力は無効(ハイレベル)となります。 1: RTSピン出力は有効(ローレベル)になります。 | 0 |
0 | bMCR_DTR | RW | DTRピン出力制御ビット。 0: DTRピン出力が無効(ハイレベル)となります。 1: DTRピン出力は有効(ローレベル)となります。 | 0 |
ラインステータスレジスタ(SER1_LSR):
ビット | 名前 | アクセス | 備考 | リセット値 |
---|---|---|---|---|
7 | bLSR_ERR_R_FIFO | R0 | 受信FIFOのエラーフラグ。 1: 受信FIFOにbLSR_PAR_ERR、bLSR_FRAME_ERR、bLSR_BREAK_ERRのいずれかのエラーが少なくとも1つのあることを示します。 | 0 |
6 | bLSR_T_ALL_EMP | R0 | 送信関連レジスタフルエンプティフラグビット。 1: 送信ホールディングレジスタSER1_THR、FIFO、送信シフトレジスタが空であることを意味します。 | 1 |
5 | bLSR_T_FIFO_EMP | R0 | 1: 送信ホールディングレジスタSER1_THRおよびFIFOが空であることを示します。 | 1 |
4 | bLSR_BREAK_ERR | R0 | 1: BREAKラインのインターバル状態が検出されたことを示します。 | 0 |
3 | bLSR_FRAME_ERR | R0 | 1: 受信FIFOの現在のデータがフレーミングされており、有効なストップビットがないことを示します。 | 0 |
2 | bLSR_PAR_ERR | R0 | 1: 受信FIFO内の現在のデータのパリティエラーを示します。 | 0 |
1 | bLSR_OVER_ERR | R0 | 1: 受信FIFOバッファのオーバーフローを示します。 | 0 |
0 | bLSR_DATA_RDY | R0 | 1: 受信FIFOに受信データがあることを示します。 FIFO内のすべてのデータを読み出した後、このビットは自動的に0にクリアされます。 | 0 |
MODEMステータスレジスタ(SER1_MSR):
ビット | 名前 | アクセス | 備考 | リセット値 |
---|---|---|---|---|
7 | bMSR_DCD | R0 | DCD端子のビット反転。 1: DCD端子が有効(アクティブLOW)であることを示します。 | 1 |
6 | bMSR_RI | R0 | RI端子のビット反転。 1: RIピンが有効(アクティブLOW)であることを示す。 | 1 |
5 | bMSR_DSR | R0 | DSR端子のビット反転。 1: DSR端子が有効(アクティLOW)であることを示します。 | 1 |
4 | bMSR_CTS | R0 | CTSピンのビット反転。 1: CTSピンが有効(アクティブLOW)であることを示します。 | 1 |
3 | bMSR_DCD_CHG | R0 | 1: DCDピンの入力状態が変化したことを示します。 | 0 |
2 | bMSR_RI_CHG | R0 | 1: RIピンの入力状態が変化したことを示します。 | 0 |
1 | bMSR_DSR_CHG | R0 | 1: DSRピンの入力状態が変化したことを示します。 | 0 |
0 | bMSR_CTS_CHG | R0 | 1: CTSピンの入力状態が変化したことを示します。 | 0 |
UART1バスアドレスプリセットレジスタ(SER1_ADDR), bLCR_DLAB = 0の時:
ビット | 名前 | アクセス | 備考 | リセット値 |
---|---|---|---|---|
[7:0] | SER1_ADDR | RW | 複数のマシンの通信における自動比較のためのプリセットバスアドレス | FFh |
SER1_ADDRは、本機がスレーブとして使用される際のアドレスをプリセットする。複数台通信時に受信アドレスを自動的に比較し、アドレスが一致した場合やブロードキャストアドレス0FFHを受信した場合に割り込みを発生させ、同時に後続のデータパケットの受信を許可するために使用する。アドレスが一致しないうちは、データを受信しないでください。データの送信を開始した後、またはSER1_ADDRレジスタを書き換えた後は、次にアドレスが再び一致するかブロードキャストアドレスを受信するまでデータの受信を停止する。
SER1_ADDRが0FFHまたはbLCR_PAR_EN=0の場合、バスアドレスの自動比較は無効となる。
SER1_ADDRが0FFHではなく、bLCR_PAR_EN = 1の場合、バスアドレスの自動比較が有効となり、以下のパラメータを設定する必要がある。bLCR_WORD_SZ1とbLCR_WORD_SZ0は共に1で、8データビットを選択する。BLCR_PAR_MOD1は常に1です。アドレスバイトがMARKの場合 データバイトのビット9が0の場合は、bLCR_PAR_MOD0を1に設定してください。アドレスバイトがSPACEの場合(データバイトのビット9が1の場合)は、bLCR_PAR_MOD0を0にして、データバイトに応じて選択します。
UART1ボーレートディバイザラッチ(SER1_DLM, SER1_DLL), bLCR_DLAB = 1の時:
ビット | 名前 | アクセス | 備考 | リセット値 |
---|---|---|---|---|
[7:0] | SER1_DLL | RW | SER1_DLLは下位バイト、SER1_DLMは上位バイトである。この2つは16ビットの除算器を形成し、16ビットカウンタで構成されるシリアルボーレートジェネレータに使用される。これらのレジスタはbLCR_DLABが1の時のみ読み書き可能である。 除算器 = Fsys * 2 / SER1_DIV / 16 / ボーレート | xxh |
[7:0] | SER1_DLM | RW | 80h |
UART1プリスケーラディバイザレジスタ(SER1_DIV), bLCR_DLAB = 1の時:
ビット | 名前 | アクセス | 備考 | リセット値 |
---|---|---|---|---|
[7:0] | SER1_DIV | RW | システムのメインクロックFsysを乗算した後、シリアルポートのボーレートジェネレータの内部基準クロックを生成するために前置分周するのに使用されます。このレジスタは、bLCR_DLABが1のときのみ読み書きできる。 | xxh |
13.3 UARTアプリケーション
UART0アプリケーション:
- UART0のボーレートジェネレータを選択します。タイマーT1またはT2から選択し、対応するカウンタを設定します。
- タイマをスタート
- SCONのSM0、SM1、SM2を設定して、シリアルポート0の動作モードを選択します。RENを1に設定して、UART0の受信を有効にします。
- シリアルポートの割り込みを設定したり、RI、TIの割り込み状態を問い合わせたりすることができます。
- 読み書き可能なSBUFは、シリアルデータの送受信を実装しており、シリアルポートの受信信号の許容ボーレート誤差は2%以下です。
UART1アプリケーション:
- SER1_LCRのbLCR_DLABビットを1に設定する。UART1 プリスケーラレジスタSER1_DIVを書き込む。ボーレートに応じてボーレート除算器を計算し、除算器の上位バイトと下位バイトをそれぞれSER1_DLMとSER1_DLLに書き込む。
除算器 = Fsys/8/STER1_DIV/ボーレート - SER1_LCRを設定し、適切なシリアルデータフォーマット、データバイト、パリティモードを選択します。
- オプション設定SER1_IER、UART1割り込みステータストリガを選択。
- 割り込みモードを使用する場合、割り込み出力を有効にするにはSER1_MCRのbMCR_OUT2ビットを1に設定する必要があります。そうでない場合は、割り込みステータスビットをアクティブにクエリーする必要があります。
- SER1_FIFOを読み書きすることでシリアルデータの送受信を実現し、シリアルポート受信信号の許容ボーレート誤差は2%以下です。