16550 Compatible UART の 受信 FIFO トリガ・レベルは、以下のような意味を持ちます。
bit7 bit6 Trigger Level
------------ --------------------------------------------------------------
① 0 0 FIFO に 1 文字 (1 byte)
② 0 1 FIFO の 1/4 以上 (128/4 = 32 byte 以上)
③ 1 0 FIFO の 1/2 以上 (128/2 = 64 byte 以上)
④ 1 1 FIFO Full より 2 少ない (128-2 = 126 byte 以上)
Quartus® Prime v15.1を使用して、Nios® II から 16550 Compatible UART の受信を行うと、
上記 ① と ② が同様に、FIFO に 1 文字(1byte)受信で割り込みが発生し、
上記 ③ と ④ が同様に、FIFO の 1/2 以上(128/2 = 64byte 以上)受信で割り込みが発生し、
上記 ② と ④ の受信 FIFO トリガ・レベルが正しく動作しません。
これは、v15.1 の altera_16550_uart_regs.h ファイル(altera\15.1\ip\altera\altera_16550_uart\inc に存在)の ALTERA_16550_UART_FCR_TET_MSK の値が 0x00000060 であり、正しくない値(0x00000030 が正しい値)であることが原因です。
FCR (FIFO Control Register) の設定で、ALTERA_16550_UART_FCR_TET_MSK のビット反転値(0x00000060 であれば 0xFFFFFF9F)を FCR の値に AND して設定しているため、bit7 と bit6 の RCVR FIFO Trigger Level の設定のうち、bit6 が常に 0 にされてしまい、① と ②、③ と ④ が同様の結果になっていました。
bit7 bit6 ⇒ bit7 bit6
------------ ------------
0 0 ⇒ 0 0 ①
0 1 ⇒ 0 0 ②
1 0 ⇒ 1 0 ③
1 1 ⇒ 1 0 ④
なお、v16.0 では ALTERA_16550_UART_FCR_TET_MSK の値が 0x00000030 に修正されており、受信 FIFO トリガ・レベルは正しく機能します。
--------------------
カテゴリ:トランシーバ
ツール:-
デバイス:-