ns16550.h
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:4k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*  NS16550 UART registers  */
  2. #ifndef NS16550H
  3. #define NS16550H
  4. #define UART_BASE 0xbd000000
  5. #define NS16550_CHANA   PHYS_TO_K1(UART_BASE + 0x20)
  6. #define NS16550_CHANB   PHYS_TO_K1(UART_BASE)
  7. #ifndef NS16550_HZ
  8. #define NS16550_HZ      3686400
  9. #endif
  10. #ifdef __ASSEMBLY__
  11. #ifndef NSREG
  12. #define NSREG(x) ((x)*4)
  13. #endif
  14. #define DATA NSREG(0) /* data register (R/W) */
  15. #define IER     NSREG(1) /* interrupt enable (W) */
  16. #define IIR     NSREG(2) /* interrupt identification (R) */
  17. #define FIFO IIR /* 16550 fifo control (W) */
  18. #define CFCR NSREG(3) /* line control register (R/W) */
  19. #define MCR     NSREG(4) /* modem control register (R/W) */
  20. #define LSR     NSREG(5) /* line status register (R/W) */
  21. #define MSR     NSREG(6) /* modem status register (R/W) */
  22. #define SCR     NSREG(7) /* scratch register (R/W) */
  23. #else
  24. #ifndef nsreg
  25. #if #endian(little)
  26. #define nsreg(x) unsigned :24; unsigned char x;
  27. #else
  28. /*#define nsreg(x) unsigned char x; unsigned :24;*/
  29. #define nsreg(x) unsigned int x:8;unsigned int :24;
  30. #endif
  31. #endif
  32. typedef struct {
  33. nsreg(data); /* data register (R/W) */
  34. nsreg(ier); /* interrupt enable (W) */
  35. nsreg(iir); /* interrupt identification (R) */
  36. #define fifo iir /* 16550 fifo control (W) */
  37. nsreg(cfcr); /* line control register (R/W) */
  38. nsreg(mcr); /* modem control register (R/W) */
  39. nsreg(lsr); /* line status register (R/W) */
  40. nsreg(msr); /* modem status register (R/W) */
  41. nsreg(scr); /* scratch register (R/W) */
  42. } ns16550dev;
  43. #endif
  44. /* 16 bit baud rate divisor (lower byte in dca_data, upper in dca_ier) */
  45. #define BRTC(x)         (NS16550_HZ / (16*(x)))
  46. /* interrupt enable register */
  47. #define IER_ERXRDY      0x1 /* int on rx ready */
  48. #define IER_ETXRDY      0x2 /* int on tx ready */
  49. #define IER_ERLS        0x4 /* int on line status change */
  50. #define IER_EMSC        0x8 /* int on modem status change */
  51. /* interrupt identification register */
  52. #define IIR_IMASK       0xf /* mask */
  53. #define IIR_RXTOUT      0xc /* receive timeout */
  54. #define IIR_RLS         0x6 /* receive line status */
  55. #define IIR_RXRDY       0x4 /* receive ready */
  56. #define IIR_TXRDY       0x2 /* transmit ready */
  57. #define IIR_NOPEND      0x1 /* nothing */
  58. #define IIR_MLSC        0x0 /* modem status */
  59. #define IIR_FIFO_MASK   0xc0 /* set if FIFOs are enabled */
  60. /* fifo control register */
  61. #define FIFO_ENABLE     0x01 /* enable fifo */
  62. #define FIFO_RCV_RST    0x02 /* reset receive fifo */
  63. #define FIFO_XMT_RST    0x04 /* reset transmit fifo */
  64. #define FIFO_DMA_MODE   0x08 /* enable dma mode */
  65. #define FIFO_TRIGGER_1  0x00 /* trigger at 1 char */
  66. #define FIFO_TRIGGER_4  0x40 /* trigger at 4 chars */
  67. #define FIFO_TRIGGER_8  0x80 /* trigger at 8 chars */
  68. #define FIFO_TRIGGER_14 0xc0 /* trigger at 14 chars */
  69. /* character format control register */
  70. #define CFCR_DLAB       0x80 /* divisor latch */
  71. #define CFCR_SBREAK     0x40 /* send break */
  72. #define CFCR_PZERO      0x30 /* zero parity */
  73. #define CFCR_PONE       0x20 /* one parity */
  74. #define CFCR_PEVEN      0x10 /* even parity */
  75. #define CFCR_PODD       0x00 /* odd parity */
  76. #define CFCR_PENAB      0x08 /* parity enable */
  77. #define CFCR_STOPB      0x04 /* 2 stop bits */
  78. #define CFCR_8BITS      0x03 /* 8 data bits */
  79. #define CFCR_7BITS      0x02 /* 7 data bits */
  80. #define CFCR_6BITS      0x01 /* 6 data bits */
  81. #define CFCR_5BITS      0x00 /* 5 data bits */
  82. /* modem control register */
  83. #define MCR_LOOPBACK    0x10 /* loopback */
  84. #define MCR_IENABLE     0x08 /* output 2 = int enable */
  85. #define MCR_DRS         0x04 /* output 1 = xxx */
  86. #define MCR_RTS         0x02 /* enable RTS */
  87. #define MCR_DTR         0x01 /* enable DTR */
  88. /* line status register */
  89. #define LSR_RCV_FIFO    0x80 /* error in receive fifo */
  90. #define LSR_TSRE        0x40 /* transmitter empty */
  91. #define LSR_TXRDY       0x20 /* transmitter ready */
  92. #define LSR_BI          0x10 /* break detected */
  93. #define LSR_FE          0x08 /* framing error */
  94. #define LSR_PE          0x04 /* parity error */
  95. #define LSR_OE          0x02 /* overrun error */
  96. #define LSR_RXRDY       0x01 /* receiver ready */
  97. #define LSR_RCV_MASK    0x1f
  98. /* modem status register */
  99. #define MSR_DCD         0x80 /* DCD active */
  100. #define MSR_RI          0x40 /* RI  active */
  101. #define MSR_DSR         0x20 /* DSR active */
  102. #define MSR_CTS         0x10 /* CTS active */
  103. #define MSR_DDCD        0x08 /* DCD changed */
  104. #define MSR_TERI        0x04 /* RI  changed */
  105. #define MSR_DDSR        0x02 /* DSR changed */
  106. #define MSR_DCTS        0x01 /* CTS changed */
  107. #endif