uart.h 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. //
  2. // uart.h
  3. //
  4. // UART Defines
  5. //
  6. // Description:
  7. //
  8. #ifndef _UART_H
  9. #define _UART_H
  10. #define UART_REG_ADDR_INTERVAL 4
  11. #define REG_THR 0x00 /* Transmitter holding reg. */
  12. #define REG_RDR 0x00 /* Receiver data reg. */
  13. #define REG_BRDL 0x00 /* Baud rate divisor (LSB) */
  14. #define REG_BRDH 0x01 /* Baud rate divisor (MSB) */
  15. #define REG_IER 0x01 /* Interrupt enable reg. */
  16. #define REG_IIR 0x02 /* Interrupt ID reg. */
  17. #define REG_FCR 0x02 /* FIFO control reg. */
  18. #define REG_LCR 0x03 /* Line control reg. */
  19. #define REG_MDC 0x04 /* Modem control reg. */
  20. #define REG_LSR 0x05 /* Line status reg. */
  21. #define REG_MSR 0x06 /* Modem status reg. */
  22. #define REG_DLF 0xC0 /* Divisor Latch Fraction */
  23. #define UART_USR 31
  24. #define UART_USR_BUSY (1 << 0) /* UART is busy (1) */
  25. #define UART_USR_Tx_FIFO_NFUL (1 << 1) /* Tx FIFO is not full (1) */
  26. #define UART_USR_Tx_FIFO_NEMP (1 << 2) /* Tx FIFO is empty (1) */
  27. #define UART_USR_Rx_FIFO_NHFL (1 << 3) /* Rx FIFO is not empty (1) */
  28. #define UART_USR_Rx_FIFO_NFUL (1 << 4) /* Rx FIFO is full (1) */
  29. /* equates for interrupt enable register */
  30. #define IER_RXRDY 0x01 /* receiver data ready */
  31. #define IER_TBE 0x02 /* transmit bit enable */
  32. #define IER_LSR 0x04 /* line status interrupts */
  33. #define IER_MSI 0x08 /* modem status interrupts */
  34. /* constants for line control register */
  35. #define LCR_CS5 0x00 /* 5 bits data size */
  36. #define LCR_CS6 0x01 /* 6 bits data size */
  37. #define LCR_CS7 0x02 /* 7 bits data size */
  38. #define LCR_CS8 0x03 /* 8 bits data size */
  39. #define LCR_2_STB 0x04 /* 2 stop bits */
  40. #define LCR_1_STB 0x00 /* 1 stop bit */
  41. #define LCR_PEN 0x08 /* parity enable */
  42. #define LCR_PDIS 0x00 /* parity disable */
  43. #define LCR_EPS 0x10 /* even parity select */
  44. #define LCR_SP 0x20 /* stick parity select */
  45. #define LCR_SBRK 0x40 /* break control bit */
  46. #define LCR_DLAB 0x80 /* divisor latch access enable */
  47. /* constants for line status register */
  48. #define LSR_RXRDY 0x01 /* receiver data available */
  49. #define LSR_OE 0x02 /* overrun error */
  50. #define LSR_PE 0x04 /* parity error */
  51. #define LSR_FE 0x08 /* framing error */
  52. #define LSR_BI 0x10 /* break interrupt */
  53. #define LSR_EOB_MASK 0x1E /* Error or Break mask */
  54. #define LSR_THRE 0x20 /* transmit holding register empty */
  55. #define LSR_TEMT 0x40 /* transmitter empty */
  56. /* equates for FIFO control register */
  57. #define FCR_FIFO 0x01 /* enable XMIT and RCVR FIFO */
  58. #define FCR_RCVRCLR 0x02 /* clear RCVR FIFO */
  59. #define FCR_XMITCLR 0x04 /* clear XMIT FIFO */
  60. /*
  61. * Per PC16550D (Literature Number: SNLS378B):
  62. *
  63. * RXRDY, Mode 0: When in the 16450 Mode (FCR0 = 0) or in
  64. * the FIFO Mode (FCR0 = 1, FCR3 = 0) and there is at least 1
  65. * character in the RCVR FIFO or RCVR holding register, the
  66. * RXRDY pin (29) will be low active. Once it is activated the
  67. * RXRDY pin will go inactive when there are no more charac-
  68. * ters in the FIFO or holding register.
  69. *
  70. * RXRDY, Mode 1: In the FIFO Mode (FCR0 = 1) when the
  71. * FCR3 = 1 and the trigger level or the timeout has been
  72. * reached, the RXRDY pin will go low active. Once it is acti-
  73. * vated it will go inactive when there are no more characters
  74. * in the FIFO or holding register.
  75. *
  76. * TXRDY, Mode 0: In the 16450 Mode (FCR0 = 0) or in the
  77. * FIFO Mode (FCR0 = 1, FCR3 = 0) and there are no charac-
  78. * ters in the XMIT FIFO or XMIT holding register, the TXRDY
  79. * pin (24) will be low active. Once it is activated the TXRDY
  80. * pin will go inactive after the first character is loaded into the
  81. * XMIT FIFO or holding register.
  82. *
  83. * TXRDY, Mode 1: In the FIFO Mode (FCR0 = 1) when
  84. * FCR3 = 1 and there are no characters in the XMIT FIFO, the
  85. * TXRDY pin will go low active. This pin will become inactive
  86. * when the XMIT FIFO is completely full.
  87. */
  88. #define FCR_MODE0 0x00 /* set receiver in mode 0 */
  89. #define FCR_MODE1 0x08 /* set receiver in mode 1 */
  90. /* RCVR FIFO interrupt levels: trigger interrupt with this bytes in FIFO */
  91. #define FCR_FIFO_1 0x00 /* 1 byte in RCVR FIFO */
  92. #define FCR_FIFO_4 0x40 /* 4 bytes in RCVR FIFO */
  93. #define FCR_FIFO_8 0x80 /* 8 bytes in RCVR FIFO */
  94. #define FCR_FIFO_14 0xC0 /* 14 bytes in RCVR FIFO */
  95. /*
  96. * UART NS16750 supports 64 bytes FIFO, which can be enabled
  97. * via the FCR register
  98. */
  99. #define FCR_FIFO_64 0x20 /* Enable 64 bytes FIFO */
  100. /* constants for line control register */
  101. #define LCR_CS5 0x00 /* 5 bits data size */
  102. #define LCR_CS6 0x01 /* 6 bits data size */
  103. #define LCR_CS7 0x02 /* 7 bits data size */
  104. #define LCR_CS8 0x03 /* 8 bits data size */
  105. #define LCR_2_STB 0x04 /* 2 stop bits */
  106. #define LCR_1_STB 0x00 /* 1 stop bit */
  107. #define LCR_PEN 0x08 /* parity enable */
  108. #define LCR_PDIS 0x00 /* parity disable */
  109. #define LCR_EPS 0x10 /* even parity select */
  110. #define LCR_SP 0x20 /* stick parity select */
  111. #define LCR_SBRK 0x40 /* break control bit */
  112. #define LCR_DLAB 0x80 /* divisor latch access enable */
  113. /* constants for the modem control register */
  114. #define MCR_DTR 0x01 /* dtr output */
  115. #define MCR_RTS 0x02 /* rts output */
  116. #define MCR_OUT1 0x04 /* output #1 */
  117. #define MCR_OUT2 0x08 /* output #2 */
  118. #define MCR_LOOP 0x10 /* loop back */
  119. #define MCR_AFCE 0x20 /* auto flow control enable */
  120. /* constants for line status register */
  121. #define LSR_RXRDY 0x01 /* receiver data available */
  122. #define LSR_OE 0x02 /* overrun error */
  123. #define LSR_PE 0x04 /* parity error */
  124. #define LSR_FE 0x08 /* framing error */
  125. #define LSR_BI 0x10 /* break interrupt */
  126. #define LSR_EOB_MASK 0x1E /* Error or Break mask */
  127. #define LSR_THRE 0x20 /* transmit holding register empty */
  128. #define LSR_TEMT 0x40 /* transmitter empty */
  129. /* constants for modem status register */
  130. #define MSR_DCTS 0x01 /* cts change */
  131. #define MSR_DDSR 0x02 /* dsr change */
  132. #define MSR_DRI 0x04 /* ring change */
  133. #define MSR_DDCD 0x08 /* data carrier change */
  134. #define MSR_CTS 0x10 /* complement of cts */
  135. #define MSR_DSR 0x20 /* complement of dsr */
  136. #define MSR_RI 0x40 /* complement of ring signal */
  137. #define MSR_DCD 0x80 /* complement of dcd */
  138. extern void uart_init();
  139. extern int _putc(char c);
  140. extern void rlSendString(char *s);
  141. extern int serial_getc();
  142. extern int CtrlBreak( void );
  143. extern int serial_nowait_getc();
  144. extern void print_ubyte_hex(unsigned char bval);
  145. extern void printk(const char* s, ...);
  146. extern int _inbyte(unsigned short timeout);
  147. extern void _outbyte(int c);
  148. #endif // _UART_H