at91_us.h 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310
  1. #ifndef _ARCH_ARM_AT91_US_H_
  2. #define _ARCH_ARM_AT91_US_H_
  3. /*
  4. * Copyright (C) 2005-2006 by egnite Software GmbH. All rights reserved.
  5. *
  6. * Redistribution and use in source and binary forms, with or without
  7. * modification, are permitted provided that the following conditions
  8. * are met:
  9. *
  10. * 1. Redistributions of source code must retain the above copyright
  11. * notice, this list of conditions and the following disclaimer.
  12. * 2. Redistributions in binary form must reproduce the above copyright
  13. * notice, this list of conditions and the following disclaimer in the
  14. * documentation and/or other materials provided with the distribution.
  15. * 3. Neither the name of the copyright holders nor the names of
  16. * contributors may be used to endorse or promote products derived
  17. * from this software without specific prior written permission.
  18. *
  19. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  20. * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  21. * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
  22. * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
  23. * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
  24. * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
  25. * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
  26. * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
  27. * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  28. * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
  29. * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  30. * SUCH DAMAGE.
  31. *
  32. * For additional information see http://www.ethernut.de/
  33. */
  34. /*!
  35. * \file arch/arm/at91_us.h
  36. * \brief AT91 peripherals.
  37. *
  38. * \verbatim
  39. *
  40. * $Log$
  41. * Revision 1.5 2008/10/23 08:50:43 haraldkipp
  42. * Prepared AT91 UART hardware handshake.
  43. *
  44. * Revision 1.4 2008/04/18 13:24:57 haraldkipp
  45. * Added Szemzo Andras' RS485 patch.
  46. *
  47. * Revision 1.3 2006/08/31 19:12:43 haraldkipp
  48. * Added additional registers found on the AT91SAM9260.
  49. *
  50. * Revision 1.2 2006/08/05 11:55:30 haraldkipp
  51. * PDC registers are now configurable in the parent header file.
  52. *
  53. * Revision 1.1 2006/07/05 07:45:28 haraldkipp
  54. * Split on-chip interface definitions.
  55. *
  56. *
  57. * \endverbatim
  58. */
  59. /*!
  60. * \addtogroup xgNutArchArmAt91Us
  61. */
  62. /*@{*/
  63. /*! \name USART Control Register */
  64. /*@{*/
  65. #define US_CR_OFF 0x00000000 /*!< \brief USART control register offset. */
  66. #define US0_CR (USART0_BASE + US_CR_OFF) /*!< \brief Channel 0 control register address. */
  67. #define US1_CR (USART1_BASE + US_CR_OFF) /*!< \brief Channel 1 control register address. */
  68. #define US_RSTRX 0x00000004 /*!< \brief Reset receiver */
  69. #define US_RSTTX 0x00000008 /*!< \brief Reset transmitter */
  70. #define US_RXEN 0x00000010 /*!< \brief Receiver enable */
  71. #define US_RXDIS 0x00000020 /*!< \brief Receiver disable */
  72. #define US_TXEN 0x00000040 /*!< \brief Transmitter enable */
  73. #define US_TXDIS 0x00000080 /*!< \brief Transmitter disable */
  74. #define US_RSTSTA 0x00000100 /*!< \brief Reset status bits */
  75. #define US_STTBRK 0x00000200 /*!< \brief Start break */
  76. #define US_STPBRK 0x00000400 /*!< \brief Stop break */
  77. #define US_STTTO 0x00000800 /*!< \brief Start timeout */
  78. #define US_SENDA 0x00001000 /*!< \brief Send next byte with address bit set. */
  79. #if defined(USART_HAS_MODE)
  80. #define US_RSTIT 0x00002000 /*!< \brief Reset iterations. */
  81. #define US_RSTNACK 0x00004000 /*!< \brief Reset non acknowledge. */
  82. #define US_RETTO 0x00008000 /*!< \brief Re-arm time out. */
  83. #define US_DTREN 0x00010000 /*!< \brief Enable data terminal ready. */
  84. #define US_DTRDIS 0x00020000 /*!< \brief Disable data terminal ready. */
  85. #define US_RTSEN 0x00040000 /*!< \brief Enable request to send. */
  86. #define US_RTSDIS 0x00080000 /*!< \brief Disable request to send. */
  87. #endif /* USART_HAS_MODE */
  88. /*@}*/
  89. /*! \name Mode Register */
  90. /*@{*/
  91. #define US_MR_OFF 0x00000004 /*!< \brief USART mode register offset. */
  92. #define US0_MR (USART0_BASE + US_MR_OFF) /*!< \brief Channel 0 mode register address. */
  93. #define US1_MR (USART1_BASE + US_MR_OFF) /*!< \brief Channel 1 mode register address. */
  94. #if defined(USART_HAS_MODE)
  95. #define US_MODE 0x0000000F /*!< \brief USART mode. */
  96. #define US_MODE_RS485 0x00000001 /*!< \brief Hardware RS485 mode. */
  97. #define US_MODE_HWHANDSHAKE 0x00000002 /*!< \brief Hardware handshake mode. */
  98. #define US_MODE_MODEM 0x00000003 /*!< \brief Full modem mode. */
  99. #define US_MODE_ISO7816_T0 0x00000004 /*!< \brief ISO 7816 protocol mode (T = 0). */
  100. #define US_MODE_ISO7816_T1 0x00000006 /*!< \brief ISO 7816 protocol mode (T = 1). */
  101. #define US_MODE_IRDA 0x00000008 /*!< \brief IrDA mode */
  102. #endif /* USART_HAS_MODE */
  103. #define US_CLKS 0x00000030 /*!< \brief Clock selection mask. */
  104. #define US_CLKS_MCK 0x00000000 /*!< \brief Master clock. */
  105. #define US_CLKS_MCK8 0x00000010 /*!< \brief Master clock divided by 8. */
  106. #define US_CLKS_SCK 0x00000020 /*!< \brief External clock. */
  107. #define US_CLKS_SLCK 0x00000030 /*!< \brief Slow clock. */
  108. #define US_CHRL 0x000000C0 /*!< \brief Masks data length. */
  109. #define US_CHRL_5 0x00000000 /*!< \brief 5 data bits. */
  110. #define US_CHRL_6 0x00000040 /*!< \brief 6 data bits. */
  111. #define US_CHRL_7 0x00000080 /*!< \brief 7 data bits. */
  112. #define US_CHRL_8 0x000000C0 /*!< \brief 8 data bits. */
  113. #define US_SYNC 0x00000100 /*!< \brief Synchronous mode enable. */
  114. #define US_PAR 0x00000E00 /*!< \brief Parity mode mask. */
  115. #define US_PAR_EVEN 0x00000000 /*!< \brief Even parity */
  116. #define US_PAR_ODD 0x00000200 /*!< \brief Odd parity */
  117. #define US_PAR_SPACE 0x00000400 /*!< \brief Space parity. */
  118. #define US_PAR_MARK 0x00000600 /*!< \brief Marked parity. */
  119. #define US_PAR_NO 0x00000800 /*!< \brief No parity. */
  120. #define US_PAR_MULTIDROP 0x00000C00 /*!< \brief Multi-drop mode. */
  121. #define US_NBSTOP 0x00003000 /*!< \brief Masks stop bit length. */
  122. #define US_NBSTOP_1 0x00000000 /*!< \brief 1 stop bit. */
  123. #define US_NBSTOP_1_5 0x00001000 /*!< \brief 1.5 stop bits. */
  124. #define US_NBSTOP_2 0x00002000 /*!< \brief 2 stop bits. */
  125. #define US_CHMODE 0x0000C000 /*!< \brief Channel mode mask. */
  126. #define US_CHMODE_NORMAL 0x00000000 /*!< \brief Normal mode. */
  127. #define US_CHMODE_AUTOMATIC_ECHO 0x00004000 /*!< \brief Automatic echo. */
  128. #define US_CHMODE_LOCAL_LOOPBACK 0x00008000 /*!< \brief Local loopback. */
  129. #define US_CHMODE_REMOTE_LOOPBACK 0x0000C000 /*!< \brief Remote loopback. */
  130. #define US_MODE9 0x00020000 /*!< \brief 9 bit mode. */
  131. #define US_CLKO 0x00040000 /*!< \brief Baud rate output enable */
  132. /*@}*/
  133. /*! \name Status and Interrupt Register */
  134. /*@{*/
  135. #define US_CSR_OFF 0x00000014 /*!< \brief USART status register offset. */
  136. #define US0_CSR (USART0_BASE + US_CSR_OFF) /*!< \brief Channel 0 status register address. */
  137. #define US1_CSR (USART1_BASE + US_CSR_OFF) /*!< \brief Channel 1 status register address. */
  138. #define US_IER_OFF 0x00000008 /*!< \brief USART interrupt enable register offset. */
  139. #define US0_IER (USART0_BASE + US_IER_OFF) /*!< \brief Channel 0 interrupt enable register address. */
  140. #define US1_IER (USART1_BASE + US_IER_OFF) /*!< \brief Channel 1 interrupt enable register address. */
  141. #define US_IDR_OFF 0x0000000C /*!< \brief USART interrupt disable register offset. */
  142. #define US0_IDR (USART0_BASE + US_IDR_OFF) /*!< \brief Channel 0 interrupt disable register address. */
  143. #define US1_IDR (USART1_BASE + US_IDR_OFF) /*!< \brief Channel 1 interrupt disable register address. */
  144. #define US_IMR_OFF 0x00000010 /*!< \brief USART interrupt mask register offset. */
  145. #define US0_IMR (USART0_BASE + US_IMR_OFF) /*!< \brief Channel 0 interrupt mask register address. */
  146. #define US1_IMR (USART1_BASE + US_IMR_OFF) /*!< \brief Channel 1 interrupt mask register address. */
  147. #define US_RXRDY 0x00000001 /*!< \brief Receiver ready */
  148. #define US_TXRDY 0x00000002 /*!< \brief Transmitter ready */
  149. #define US_RXBRK 0x00000004 /*!< \brief Receiver break */
  150. #define US_ENDRX 0x00000008 /*!< \brief End of receiver PDC transfer */
  151. #define US_ENDTX 0x00000010 /*!< \brief End of transmitter PDC transfer */
  152. #define US_OVRE 0x00000020 /*!< \brief Overrun error */
  153. #define US_FRAME 0x00000040 /*!< \brief Framing error */
  154. #define US_PARE 0x00000080 /*!< \brief Parity error */
  155. #define US_TIMEOUT 0x00000100 /*!< \brief Receiver timeout */
  156. #define US_TXEMPTY 0x00000200 /*!< \brief Transmitter empty */
  157. #define US_RXBUFF 0x00001000 /*!< \brief Receive buffer full */
  158. #if defined(USART_HAS_MODE)
  159. #define US_ITERATION 0x00000400 /*!< \brief Maximum number of iterations reached. */
  160. #define US_NACK 0x00002000 /*!< \brief At least one non acknowledge detected. */
  161. #define US_RIIC 0x00010000 /*!< \brief Ring indicator input change. */
  162. #define US_DSRIC 0x00020000 /*!< \brief Data set ready input change. */
  163. #define US_DCDIC 0x00040000 /*!< \brief Data carrier detect input change. */
  164. #define US_CTSIC 0x00080000 /*!< \brief Clear to send input change. */
  165. #define US_RI 0x00100000 /*!< \brief Ring indicator sense status. */
  166. #define US_DSR 0x00200000 /*!< \brief Data set ready sense status. */
  167. #define US_DCD 0x00400000 /*!< \brief Data carrier detect sense status. */
  168. #define US_CTS 0x00800000 /*!< \brief Clear to send sense status. */
  169. #endif /* USART_HAS_MODE */
  170. /*! \brief Baud rate calculation helper macro.
  171. *
  172. * \deprecated Use NutGetCpuClock() and calculate the divider value locally.
  173. */
  174. #define AT91_US_BAUD(baud) ((NUT_CPU_FREQ / (8 * (baud)) + 1) / 2)
  175. /*@}*/
  176. /*! \name Receiver Holding Register */
  177. /*@{*/
  178. #define US_RHR_OFF 0x00000018 /*!< \brief USART receiver holding register offset. */
  179. #define US0_RHR (USART0_BASE + US_RHR_OFF) /*!< \brief Channel 0 receiver holding register address. */
  180. #define US1_RHR (USART1_BASE + US_RHR_OFF) /*!< \brief Channel 1 receiver holding register address. */
  181. /*@}*/
  182. /*! \name Transmitter Holding Register */
  183. /*@{*/
  184. #define US_THR_OFF 0x0000001C /*!< \brief USART transmitter holding register offset. */
  185. #define US0_THR (USART0_BASE + US_THR_OFF) /*!< \brief Channel 0 transmitter holding register address. */
  186. #define US1_THR (USART1_BASE + US_THR_OFF) /*!< \brief Channel 1 transmitter holding register address. */
  187. /*@}*/
  188. /*! \name Baud Rate Generator Register */
  189. /*@{*/
  190. #define US_BRGR_OFF 0x00000020 /*!< \brief USART baud rate register offset. */
  191. #define US0_BRGR (USART0_BASE + US_BRGR_OFF) /*!< \brief Channel 0 baud rate register address. */
  192. #define US1_BRGR (USART1_BASE + US_BRGR_OFF) /*!< \brief Channel 1 baud rate register address. */
  193. /*@}*/
  194. /*! \name Receiver Timeout Register */
  195. /*@{*/
  196. #define US_RTOR_OFF 0x00000024 /*!< \brief USART receiver timeout register offset. */
  197. #define US0_RTOR (USART0_BASE + US_RTOR_OFF) /*!< \brief Channel 0 receiver timeout register address. */
  198. #define US1_RTOR (USART1_BASE + US_RTOR_OFF) /*!< \brief Channel 1 receiver timeout register address. */
  199. /*@}*/
  200. /*! \name Transmitter Time Guard Register */
  201. /*@{*/
  202. #define US_TTGR_OFF 0x00000028 /*!< \brief USART transmitter time guard register offset. */
  203. #define US0_TTGR (USART0_BASE + US_TTGR_OFF) /*!< \brief Channel 0 transmitter time guard register address. */
  204. #define US1_TTGR (USART1_BASE + US_TTGR_OFF) /*!< \brief Channel 1 transmitter time guard register address. */
  205. /*@}*/
  206. /*! \name FI DI Ratio Register */
  207. /*@{*/
  208. #define US_FIDI_OFF 0x00000040 /*!< \brief USART FI DI ratio register offset. */
  209. #define US0_FIDI (USART0_BASE + US_FIDI_OFF) /*!< \brief Channel 0 FI DI ratio register address. */
  210. #define US1_FIDI (USART1_BASE + US_FIDI_OFF) /*!< \brief Channel 1 FI DI ratio register address. */
  211. /*@}*/
  212. /*! \name Error Counter Register */
  213. /*@{*/
  214. #define US_NER_OFF 0x00000044 /*!< \brief USART error counter register offset. */
  215. #define US0_NER (USART0_BASE + US_NER_OFF) /*!< \brief Channel 0 error counter register address. */
  216. #define US1_NER (USART1_BASE + US_NER_OFF) /*!< \brief Channel 1 error counter register address. */
  217. /*@}*/
  218. /*! \name IrDA Filter Register */
  219. /*@{*/
  220. #define US_IF_OFF 0x0000004C /*!< \brief USART IrDA filter register offset. */
  221. #define US0_IF (USART0_BASE + US_IF_OFF) /*!< \brief Channel 0 IrDA filter register address. */
  222. #define US1_IF (USART1_BASE + US_IF_OFF) /*!< \brief Channel 1 IrDA filter register address. */
  223. /*@}*/
  224. #if defined(USART_HAS_PDC)
  225. /*! \name Receive Pointer Register */
  226. /*@{*/
  227. #define US0_RPR (USART0_BASE + PERIPH_RPR_OFF) /*!< \brief Channel 0 receive pointer register address. */
  228. #define US1_RPR (USART1_BASE + PERIPH_RPR_OFF) /*!< \brief Channel 1 receive pointer register address. */
  229. /*@}*/
  230. /*! \name Receive Counter Register */
  231. /*@{*/
  232. #define US0_RCR (USART0_BASE + PERIPH_RCR_OFF) /*!< \brief Channel 0 receive counter register address. */
  233. #define US1_RCR (USART1_BASE + PERIPH_RCR_OFF) /*!< \brief Channel 1 receive counter register address. */
  234. /*@}*/
  235. /*! \name Transmit Pointer Register */
  236. /*@{*/
  237. #define US0_TPR (USART0_BASE + PERIPH_TPR_OFF) /*!< \brief Channel 0 transmit pointer register address. */
  238. #define US1_TPR (USART1_BASE + PERIPH_TPR_OFF) /*!< \brief Channel 1 transmit pointer register address. */
  239. /*@}*/
  240. /*! \name Transmit Counter Register */
  241. /*@{*/
  242. #define US0_TCR (USART0_BASE + PERIPH_TCR_OFF) /*!< \brief Channel 0 transmit counter register address. */
  243. #define US1_TCR (USART1_BASE + PERIPH_TCR_OFF) /*!< \brief Channel 1 transmit counter register address. */
  244. /*@}*/
  245. #if defined(PERIPH_RNPR_OFF) && defined(PERIPH_RNCR_OFF)
  246. #define US0_RNPR (USART0_BASE + PERIPH_RNPR_OFF) /*!< \brief PDC channel 0 receive next pointer register. */
  247. #define US1_RNPR (USART1_BASE + PERIPH_RNPR_OFF) /*!< \brief PDC channel 1 receive next pointer register. */
  248. #define US0_RNCR (USART0_BASE + PERIPH_RNCR_OFF) /*!< \brief PDC channel 0 receive next counter register. */
  249. #define US1_RNCR (USART1_BASE + PERIPH_RNCR_OFF) /*!< \brief PDC channel 1 receive next counter register. */
  250. #endif
  251. #if defined(PERIPH_TNPR_OFF) && defined(PERIPH_TNCR_OFF)
  252. #define US0_TNPR (USART0_BASE + PERIPH_TNPR_OFF) /*!< \brief PDC channel 0 transmit next pointer register. */
  253. #define US1_TNPR (USART1_BASE + PERIPH_TNPR_OFF) /*!< \brief PDC channel 1 transmit next pointer register. */
  254. #define US0_TNCR (USART0_BASE + PERIPH_TNCR_OFF) /*!< \brief PDC channel 0 transmit next counter register. */
  255. #define US1_TNCR (USART1_BASE + PERIPH_TNCR_OFF) /*!< \brief PDC channel 1 transmit next counter register. */
  256. #endif
  257. #if defined(PERIPH_PTCR_OFF)
  258. #define US0_PTCR (USART0_BASE + PERIPH_PTCR_OFF) /*!< \brief PDC channel 0 transfer control register. */
  259. #define US1_PTCR (USART1_BASE + PERIPH_PTCR_OFF) /*!< \brief PDC channel 1 transfer control register. */
  260. #endif
  261. #if defined(PERIPH_PTSR_OFF)
  262. #define US0_PTSR (USART0_BASE + PERIPH_PTSR_OFF) /*!< \brief PDC channel 0 transfer status register. */
  263. #define US1_PTSR (USART1_BASE + PERIPH_PTSR_OFF) /*!< \brief PDC channel 1 transfer status register. */
  264. #endif
  265. #endif /* USART_HAS_PDC */
  266. /*@} xgNutArchArmAt91Us */
  267. #endif /* _ARCH_ARM_AT91_US_H_ */