home *** CD-ROM | disk | FTP | other *** search
/ ST-Computer Leser-CD 2000 January / LCD_01_2000.iso / pd / 308 / uart_040 / pc16550.h < prev    next >
Encoding:
C/C++ Source or Header  |  1999-07-28  |  11.0 KB  |  313 lines

  1. /*
  2.   UART-Register.
  3.  */
  4.  
  5. /* The structure of the NS16550 register file. Note that in case of a collision
  6.    between two registers, the first register is defined here and the second
  7.    register  is defined to be the same.
  8.  */
  9. typedef struct
  10. {
  11.   volatile uchar iop;    /* 0 Receive/Transmit register (RBR, THR) */
  12.   volatile uchar ier;    /* 1 Interrupt enable register      (IER) */
  13.   volatile uchar fcr;    /* 2 Fifo  control register     (IIR/FCR) */
  14.   volatile uchar lcr;    /* 3 Line  control register         (LCR) */
  15.   volatile uchar mcr;    /* 4 Modem control register         (MCR) */
  16.   volatile uchar lsr;    /* 5 Line  status register          (LSR) */
  17.   volatile uchar msr;    /* 6 Modem status register          (MSR) */
  18.   volatile uchar scr;    /* 7 Scratch register               (SCR) */
  19. } UART;
  20.  
  21. /* iop Lesen/Schreiben    */
  22. #define    thr    iop
  23. #define    rbr    iop
  24. /* iir Interrupt Identification Register (lesen).    */
  25. #define    iir        fcr
  26. /* Bank1 fⁿr Baud Rate.    */
  27. #define    dll    iop
  28. #define    dlm    ier
  29. /* Bank 3 lcr shadow.    */
  30. #define    sh_lcr    ier
  31.  
  32. /*
  33.   ier Interrupt Enable Register. Bank 0, Offset 01h    
  34.   in the UART, IrDA SIR and Sharp-IR Modes
  35.   Bank 0, Offset 01h.
  36.   */
  37.  
  38. /* Receiver High-Data-Level Interrupt Enable.    */
  39. /* 0 - Disable Receiver Data Ready Interrupt.*/
  40. /* 1 - Enable Receiver Data Ready Interrupt. */
  41. #define RXHDL_IE    0x01
  42.  
  43. /* Transmitter Low-Data-Level Interrupt Enable.    */
  44. /* 0 - Interrupt Disabled.    */
  45. /* 1 - Interrupt Enabled.    */
  46. #define    TXLDL_IE    0x02
  47.  
  48. /* Line Status Interrupt Enable.    */
  49. /* 0 - Disable Line Status Interrupts.    */
  50. /* 1 - Enable Line Status Interrupts.    */
  51. #define    LS_IE        0x04
  52.  
  53. /* Modem Status Interrupt Enable.    */
  54. #define MS_IE        0x08
  55. /* 0 - Disable Modem Status Interrupts.    */
  56. /* 1 - Enable Modem Status Interrupts.    */
  57.  
  58. /* DMA Interrupt Enable.    */
  59. #define    DMA_IE        0x10
  60. /* 0 - Disable DMA terminal count Interrupt.    */
  61. /* 1 - Enable DMA terminal count Interrupt.    */
  62.  
  63. /* Transmitter Empty Interrupt Enable and Pipline Load Interrupt Enable. */
  64. /* 0 - Disable Interrupts.    */
  65. /* 1 - Enable Interrupts.    */
  66. #define    PLD_IE        0x20
  67. #define    TXEMP_IE    0x20
  68.  
  69. /* Timer Interrupt Enable.    */
  70. /* 0 - Disable Timer Interrupt.    */
  71. /* 1 - Enable Timer Interrupt.    */
  72. #define    TMR_IE        0x80
  73.  
  74. /* in Fast IR (MIR and FIR) Modes.    */
  75. /* Line Status Interrupt Enable or Transmission    */
  76. /* FIFO Underrun Interrupt Enable.    */
  77. /* 0 - Interrupt Disabled.    */
  78. /* 1 - Interrupt Enabled.    */
  79. #define    TXUR_IE        0x04
  80.  
  81. /* Status FIFO Threshold Interrupt Enable.    */
  82. /* 0 - Interrupt disabled.    */
  83. /* 1 - Interrupt enabled.    */
  84. #define    SFIF_IE        0x40
  85.  
  86. /*
  87.   iir Interrupt Identification Register. Read Cycles. Bank 0, Offset 02h
  88.   Non-Extended Modes.
  89.   */
  90.  
  91. /* Interrupt Pending Flag.    */
  92. /* 0 - There is an interrupt pending.    */
  93. /* 1 - No Interrupt pending.    */
  94. #define    IPND        0x01
  95.  
  96. #define IPR0        0x02    /* Interrupt Priority 1,0.    */
  97. #define    IPR1        0x04
  98. #define    RXFT        0x08    /* Reception FIFO Time-Out.    */
  99.  
  100. /* FIFOs Enabled.    */
  101. #define    FEN0        0x40    /* 0 - No FIFO enabled.    */
  102. #define    FEN1        0x80    /* 1 - FIFOs are enabled (bit 0 of FCR is set to 1).    */
  103.  
  104.  
  105. /* Non-Extended Mode Interrupt Priorities.
  106. *_______________________________________________________________________________________________________________*
  107. |IIR Bits|Priority|Interrupt Type|           Interrupt Source               |     Interrupt Reset Control       |
  108. |  3210  | Level  |              |                                          |                                   |
  109. ----------------------------------------------------------------------------------------------------------------|
  110. |  0001  |   -    |     None     |               None                       |                                   |
  111. ----------------------------------------------------------------------------------------------------------------|
  112. |  0110  | Highest| Line Status  | Parity error, framing error, data overrun| Read Line Status Register (LSR).  |
  113. |        |        |              | or break event.                          |                                   |
  114. ----------------------------------------------------------------------------------------------------------------|
  115. |  0100  | Second | Receiver High| Receiver Buffer Register (RBR) full, or  | Reading the RBR or, reception     |
  116. |        |        |   Data Level | reception FIFO level equal to or above   | FIFO level drops below threhold.  |
  117. |        |        |              | treshold.                                |                                   |
  118. ----------------------------------------------------------------------------------------------------------------|
  119. |  1100  | Second |Reception FIFO|At least one character is in the reception| Reading the RBR.                  |
  120. |        |        |   Time-Out   |FIFO, and no character has been input     |                                   |
  121. |        |        |              |to or read from the reception FIFO for    |                                   |
  122. |        |        |              |four character times.                     |                                   |
  123. ----------------------------------------------------------------------------------------------------------------|
  124. |  0010  | Third  | Transmitter  | Transmitter Data Register Empty.         |Reading the IIR Register (if source|
  125. |        |        |    Ready     |                                          |of interrupt) or writing into the  |
  126. |        |        |              |                                          |Transmitter Data Register.         |
  127. ----------------------------------------------------------------------------------------------------------------|
  128. |  0000  | Fourth | Modem Status | Any transition on /CTS, /DSR or /DCD or  | Reading the Modem Status Register |
  129. |        |        |              | a low to high transition on /RI.         | (MSR).                            |
  130. *---------------------------------------------------------------------------------------------------------------*/
  131. /* Extended Mode.    */
  132. /* Receive High-Data-Level Event.    */
  133. /* 0 - Receiver data level is not high.    */
  134. /* 1 - Receiver data level is high.    */
  135. #define    RXHDL_EV    0x01
  136.  
  137. /* Transmitter Low-Data-Event.    */
  138. /* 0 - Transmitter data level is not low.    */
  139. /* 1 - ransmitter data level is low.    */
  140. #define    TXLDL_EV    0x02
  141.  
  142. #define LS_EV        0x04    /* Line Status Event or    */
  143. #define    TXUR_EV        0x04    /* Transmitter Underrun Event.    */
  144.  
  145. /* Modem Status Event.    */
  146. /* 0 - Modem Status Interrupt event.    */
  147. /* 1 - Disabled. MS_EV forced to 0.    */
  148. #define    MS_EV        0x08
  149.  
  150. #define    DMA_EV        0x10    /* DMA Event Occured.    */
  151.  
  152. #define    TXEMP_EV    0x20    /* Transmitter Empty or    */
  153. #define    PLD_EV        0x20    /* Pipeline Load Event.    */
  154.  
  155. #define    SFIF_EV        0x40    /* Status FIFO Event.    */
  156.  
  157. #define    TMR_EV        0x80    /* Timer Event.    */
  158.  
  159. /*
  160.   iir Event Identification Register. Write Cycles.
  161.    Bank 0 Offset 02h
  162.    */
  163. #define    FIFO_EN        0x01    /* FIFO Enable.    */
  164. #define    RXFR        0x02    /* Clear Receive FIFO.    */
  165. #define    TXFR        0x04    /* Clear Transmit FIFO.    */
  166.  
  167.  
  168. /* Receiver FIFO Threshold Level Select. */
  169. #define RXFTH_1  0x00
  170. #define RXFTH_4  0x40
  171. #define RXFTH_8  0x80
  172. #define RXFTH_14 0xC0
  173. /*
  174.   lcr Line Control Register or bsr Bank Select Register.
  175.   Bank 0, Offset 03h.
  176.   */
  177. #define    bsr    lcr
  178.  
  179. /* Word Length Select.    */
  180. /* WLS1 | WLS0 | character length    */
  181. /*   0  |   0  | 5    */
  182. /*   0  |   1  | 6    */
  183. /*   1  |   0  | 7    */
  184. /*   1  |   1  | 8    */
  185. #define    WLS0        0x01
  186. #define    WLS1        0x02
  187. #define    WLS        0x03    /* Bitmaske */
  188.  
  189. /* Number of Stop Bits.    */
  190. #define    STB        0x04
  191. /* 0 - One stop bit is generated. */
  192. /* 1 - if data length 5: 1 1/2    */
  193. /*     else            : 2        */
  194.  
  195. /* Parity Enable.    */
  196. /* 0 - No parity bit is used.    */
  197. /* 1 - A parity bit is generated.    */
  198. #define    PEN        0x08
  199.  
  200. /* Even Parity Enable.    */
  201. /* 0 - odd.    */
  202. /* 1 - even.    */
  203. #define    EPS        0x10
  204.  
  205. /* Stick Parity Select.    */
  206. /* PEN | EPS | STKPS | Selected Parity Bit */
  207. /*  0  |  x  |   x   |  None               */
  208. /*  1  |  0  |   0   |  Odd                */
  209. /*  1  |  1  |   0   |  Even               */
  210. /*  1  |  0  |   1   |  Locic 1            */
  211. /*  1  |  1  |   1   |  Locic 0            */
  212. #define STKPS        0x20
  213.  
  214. /* Set Break.    */
  215. /* 0 - the break is disabled.    */
  216. /* 1 - Break enabled. see doc.    */
  217. #define    SBRK        0x40
  218.  
  219. /* Bank Select Enable.    */
  220. #define    BNKSE        0x80
  221.  
  222. /*
  223.   mcr Modem Control Register.
  224.   Bank 0, Offset 04h
  225.   Non Extended UART mode.
  226.   */
  227. #define    DTRO        0x01    /* Data Terminal Ready.    */
  228. #define    RTSO        0x02    /* Request To Send.    */
  229. #define    RILP        0x04    /* Loopback Interrupt Request.    */
  230.                 /* Global Interrupt Enable or    */
  231. #define    GI_EN        0x08    /* 0 - Interrupt disabled.    */
  232.                 /* 1 - Interrupt enabled.    */
  233.  
  234. /* Local Loopback Enable.    */
  235. #define LOOP        0x10    /* 0 - Local loopback disabled.    */
  236.                 /* 1 - Local loopback enabled.    */
  237.  
  238. #define    DTRO_BIT    0    /* Data Terminal Ready.    */
  239. #define    RTSO_BIT    1    /* Request To Send.    */
  240. #define    RILP_BIT    2    /* Loopback Interrupt Request.    */
  241. #define    GI_EN_BIT    3    /* Loopback DCD.    */
  242.  
  243.  
  244. /* Extended Mode.    */
  245.  
  246. /* DMA Enable.    */
  247. #define    DMA_EN        0x04    /* 0 - DMA not enabled.    */
  248.                 /* 1 - Enable DMA.    */
  249.                 /* Transmission Defferral.    */
  250. #define    TX_DFR        0x08    /* 0 - No Transmission defferral enabled.    */
  251.                 /* 1 - Transmission defferral enabled.    */
  252.                 /* Send Interaction Pulse.    */
  253. #define    IR_PLS        0x10    /* 0 - No action.    */
  254.                 /* 1 - An infrared pulse is transmitted.    */
  255. /* Operation Mode.    */
  256. /* MDSL2 | MDSL1 | MDSL0 | Oeration Mode    */
  257. /*   0   |   0   |   0   | UART Modes    */
  258. /*   0   |   0   |   1   | Reserved        */
  259. /*   0   |   1   |   0   | Sharp-IR        */
  260. /*   0   |   1   |   1   | IrDA SIR        */
  261. /*   1   |   0   |   0   | Extended IrDA MIR (1.152 Mbps)    */
  262. /*   1   |   0   |   1   | Extended IrDA FIR (4.0 Mbps)    */
  263. /*   1   |   1   |   0   | Consumer Remote Control    */
  264. /*   1   |   1   |   1   | Reserved        */
  265. #define    MDSL0        0x20
  266. #define    MDSL1        0x40
  267. #define    MDSL2        0x80
  268.  
  269. /*
  270.  lsr Line Status Register.
  271.  Bank 0 Offset 05h
  272.  */
  273.  
  274. /* Receive Data Aviable.    */
  275. #define    RXDA        0x01
  276. /* 0 - The Receive Data Register or the FIFO has been read.    
  277.    1 - A complete incomming character has been received and
  278.    transferred into the Receiver Data Register or FIFO.    */
  279.  
  280. /* Overrun Error.    */
  281. #define OE        0x02    /* 1 - Overrun has occurred.    */
  282. #define    PE        0x04    /* Parity Error or    */
  283. #define    BAD_CRC        0x04    /* CRC Error.    */
  284. #define    FE        0x08    /* Framing Error or    */
  285. #define    PHY_ERR        0x08    /* Physical Layer Error.    */
  286. #define    BRK        0x10    /* Break Character Received or    */
  287. #define    MAX_LEN        0x10    /* Maximum Length Exceeded.    */
  288. #define    TXDE        0x20    /* Transmitter Data Register Empty.    */
  289. #define    TEMT        0x40    /* Transmitter Empty.    */
  290. #define    ERR_INF        0x80    /* Error in Receiver FIFO or    */
  291. #define    FR_END        0x80    /* Frame End.    */
  292. /*
  293.   msr Modem Status Register.
  294.   Bank 0, Offset 06h.
  295.   */
  296.  
  297. /* Delta Clear to Send.    */
  298. #define    DCTS        0x01    /* 1 - /CTS state changed.    */
  299.  
  300. /* Delta Data Set Ready.    */
  301. #define    DDSR        0x02    /* 1 - DSR state changed.    */
  302.  
  303. /* Trailing Edge Ring Indicate.    */
  304. #define    TERRI        0x04    /* 1 - Low to high transition of /RI.    */
  305.  
  306. /* Delta Data Carrier Detect.    */
  307. #define    DDCD        0x08    /* 1 - /DCD signal state changed.    */
  308. #define    CTSI        0x10    /* This bit returns the inverse of the /CTS input signal.    */
  309. #define    DSRI        0x20    /* This bit returns the inverse of the /DSR input signal.    */
  310. #define    RII        0x40    /* This bit returns the inverse of the /RI input signal.    */
  311. #define    DCDI        0x80    /* This bit returns the inverse of the /DCD input signal.    */
  312.  
  313.