at91_us.h 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270
  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 EGNITE SOFTWARE GMBH 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 EGNITE
  23. * SOFTWARE GMBH 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: at91_us.h,v $
  41. * Revision 1.3 2006/08/31 19:12:43 haraldkipp
  42. * Added additional registers found on the AT91SAM9260.
  43. *
  44. * Revision 1.2 2006/08/05 11:55:30 haraldkipp
  45. * PDC registers are now configurable in the parent header file.
  46. *
  47. * Revision 1.1 2006/07/05 07:45:28 haraldkipp
  48. * Split on-chip interface definitions.
  49. *
  50. *
  51. * \endverbatim
  52. */
  53. /*!
  54. * \addtogroup xgNutArchArmAt91Us
  55. */
  56. /*@{*/
  57. /*! \name USART Control Register */
  58. /*@{*/
  59. #define US_CR_OFF 0x00000000 /*!< \brief USART control register offset. */
  60. #define US0_CR (USART0_BASE + US_CR_OFF) /*!< \brief Channel 0 control register address. */
  61. #define US1_CR (USART1_BASE + US_CR_OFF) /*!< \brief Channel 1 control register address. */
  62. #define US_RSTRX 0x00000004 /*!< \brief Reset receiver */
  63. #define US_RSTTX 0x00000008 /*!< \brief Reset transmitter */
  64. #define US_RXEN 0x00000010 /*!< \brief Receiver enable */
  65. #define US_RXDIS 0x00000020 /*!< \brief Receiver disable */
  66. #define US_TXEN 0x00000040 /*!< \brief Transmitter enable */
  67. #define US_TXDIS 0x00000080 /*!< \brief Transmitter disable */
  68. #define US_RSTSTA 0x00000100 /*!< \brief Reset status bits */
  69. #define US_STTBRK 0x00000200 /*!< \brief Start break */
  70. #define US_STPBRK 0x00000400 /*!< \brief Stop break */
  71. #define US_STTTO 0x00000800 /*!< \brief Start timeout */
  72. #define US_SENDA 0x00001000 /*!< \brief Send next byte with address bit set. */
  73. /*@}*/
  74. /*! \name Mode Register */
  75. /*@{*/
  76. #define US_MR_OFF 0x00000004 /*!< \brief USART mode register offset. */
  77. #define US0_MR (USART0_BASE + US_MR_OFF) /*!< \brief Channel 0 mode register address. */
  78. #define US1_MR (USART1_BASE + US_MR_OFF) /*!< \brief Channel 1 mode register address. */
  79. #define US_CLKS 0x00000030 /*!< \brief Clock selection mask. */
  80. #define US_CLKS_MCK 0x00000000 /*!< \brief Master clock. */
  81. #define US_CLKS_MCK8 0x00000010 /*!< \brief Master clock divided by 8. */
  82. #define US_CLKS_SCK 0x00000020 /*!< \brief External clock. */
  83. #define US_CLKS_SLCK 0x00000030 /*!< \brief Slow clock. */
  84. #define US_CHRL 0x000000C0 /*!< \brief Masks data length. */
  85. #define US_CHRL_5 0x00000000 /*!< \brief 5 data bits. */
  86. #define US_CHRL_6 0x00000040 /*!< \brief 6 data bits. */
  87. #define US_CHRL_7 0x00000080 /*!< \brief 7 data bits. */
  88. #define US_CHRL_8 0x000000C0 /*!< \brief 8 data bits. */
  89. #define US_SYNC 0x00000100 /*!< \brief Synchronous mode enable. */
  90. #define US_PAR 0x00000E00 /*!< \brief Parity mode mask. */
  91. #define US_PAR_EVEN 0x00000000 /*!< \brief Even parity */
  92. #define US_PAR_ODD 0x00000200 /*!< \brief Odd parity */
  93. #define US_PAR_SPACE 0x00000400 /*!< \brief Space parity. */
  94. #define US_PAR_MARK 0x00000600 /*!< \brief Marked parity. */
  95. #define US_PAR_NO 0x00000800 /*!< \brief No parity. */
  96. #define US_PAR_MULTIDROP 0x00000C00 /*!< \brief Multi-drop mode. */
  97. #define US_NBSTOP 0x00003000 /*!< \brief Masks stop bit length. */
  98. #define US_NBSTOP_1 0x00000000 /*!< \brief 1 stop bit. */
  99. #define US_NBSTOP_1_5 0x00001000 /*!< \brief 1.5 stop bits. */
  100. #define US_NBSTOP_2 0x00002000 /*!< \brief 2 stop bits. */
  101. #define US_CHMODE 0x0000C000 /*!< \brief Channel mode mask. */
  102. #define US_CHMODE_NORMAL 0x00000000 /*!< \brief Normal mode. */
  103. #define US_CHMODE_AUTOMATIC_ECHO 0x00004000 /*!< \brief Automatic echo. */
  104. #define US_CHMODE_LOCAL_LOOPBACK 0x00008000 /*!< \brief Local loopback. */
  105. #define US_CHMODE_REMOTE_LOOPBACK 0x0000C000 /*!< \brief Remote loopback. */
  106. #define US_MODE9 0x00020000 /*!< \brief 9 bit mode. */
  107. #define US_CLKO 0x00040000 /*!< \brief Baud rate output enable */
  108. /*@}*/
  109. /*! \name Status and Interrupt Register */
  110. /*@{*/
  111. #define US_CSR_OFF 0x00000014 /*!< \brief USART status register offset. */
  112. #define US0_CSR (USART0_BASE + US_CSR_OFF) /*!< \brief Channel 0 status register address. */
  113. #define US1_CSR (USART1_BASE + US_CSR_OFF) /*!< \brief Channel 1 status register address. */
  114. #define US_IER_OFF 0x00000008 /*!< \brief USART interrupt enable register offset. */
  115. #define US0_IER (USART0_BASE + US_IER_OFF) /*!< \brief Channel 0 interrupt enable register address. */
  116. #define US1_IER (USART1_BASE + US_IER_OFF) /*!< \brief Channel 1 interrupt enable register address. */
  117. #define US_IDR_OFF 0x0000000C /*!< \brief USART interrupt disable register offset. */
  118. #define US0_IDR (USART0_BASE + US_IDR_OFF) /*!< \brief Channel 0 interrupt disable register address. */
  119. #define US1_IDR (USART1_BASE + US_IDR_OFF) /*!< \brief Channel 1 interrupt disable register address. */
  120. #define US_IMR_OFF 0x00000010 /*!< \brief USART interrupt mask register offset. */
  121. #define US0_IMR (USART0_BASE + US_IMR_OFF) /*!< \brief Channel 0 interrupt mask register address. */
  122. #define US1_IMR (USART1_BASE + US_IMR_OFF) /*!< \brief Channel 1 interrupt mask register address. */
  123. #define US_RXRDY 0x00000001 /*!< \brief Receiver ready */
  124. #define US_TXRDY 0x00000002 /*!< \brief Transmitter ready */
  125. #define US_RXBRK 0x00000004 /*!< \brief Receiver break */
  126. #define US_ENDRX 0x00000008 /*!< \brief End of receiver PDC transfer */
  127. #define US_ENDTX 0x00000010 /*!< \brief End of transmitter PDC transfer */
  128. #define US_OVRE 0x00000020 /*!< \brief Overrun error */
  129. #define US_FRAME 0x00000040 /*!< \brief Framing error */
  130. #define US_PARE 0x00000080 /*!< \brief Parity error */
  131. #define US_TIMEOUT 0x00000100 /*!< \brief Receiver timeout */
  132. #define US_TXEMPTY 0x00000200 /*!< \brief Transmitter empty */
  133. /*! \brief Baud rate calculation helper macro.
  134. *
  135. * \deprecated Use NutGetCpuClock() and calculate the divider value locally.
  136. */
  137. #define AT91_US_BAUD(baud) ((NUT_CPU_FREQ / (8 * (baud)) + 1) / 2)
  138. /*@}*/
  139. /*! \name Receiver Holding Register */
  140. /*@{*/
  141. #define US_RHR_OFF 0x00000018 /*!< \brief USART receiver holding register offset. */
  142. #define US0_RHR (USART0_BASE + US_RHR_OFF) /*!< \brief Channel 0 receiver holding register address. */
  143. #define US1_RHR (USART1_BASE + US_RHR_OFF) /*!< \brief Channel 1 receiver holding register address. */
  144. /*@}*/
  145. /*! \name Transmitter Holding Register */
  146. /*@{*/
  147. #define US_THR_OFF 0x0000001C /*!< \brief USART transmitter holding register offset. */
  148. #define US0_THR (USART0_BASE + US_THR_OFF) /*!< \brief Channel 0 transmitter holding register address. */
  149. #define US1_THR (USART1_BASE + US_THR_OFF) /*!< \brief Channel 1 transmitter holding register address. */
  150. /*@}*/
  151. /*! \name Baud Rate Generator Register */
  152. /*@{*/
  153. #define US_BRGR_OFF 0x00000020 /*!< \brief USART baud rate register offset. */
  154. #define US0_BRGR (USART0_BASE + US_BRGR_OFF) /*!< \brief Channel 0 baud rate register address. */
  155. #define US1_BRGR (USART1_BASE + US_BRGR_OFF) /*!< \brief Channel 1 baud rate register address. */
  156. /*@}*/
  157. /*! \name Receiver Timeout Register */
  158. /*@{*/
  159. #define US_RTOR_OFF 0x00000024 /*!< \brief USART receiver timeout register offset. */
  160. #define US0_RTOR (USART0_BASE + US_RTOR_OFF) /*!< \brief Channel 0 receiver timeout register address. */
  161. #define US1_RTOR (USART1_BASE + US_RTOR_OFF) /*!< \brief Channel 1 receiver timeout register address. */
  162. /*@}*/
  163. /*! \name Transmitter Time Guard Register */
  164. /*@{*/
  165. #define US_TTGR_OFF 0x00000028 /*!< \brief USART transmitter time guard register offset. */
  166. #define US0_TTGR (USART0_BASE + US_TTGR_OFF) /*!< \brief Channel 0 transmitter time guard register address. */
  167. #define US1_TTGR (USART1_BASE + US_TTGR_OFF) /*!< \brief Channel 1 transmitter time guard register address. */
  168. /*@}*/
  169. /*! \name FI DI Ratio Register */
  170. /*@{*/
  171. #define US_FIDI_OFF 0x00000040 /*!< \brief USART FI DI ratio register offset. */
  172. #define US0_FIDI (USART0_BASE + US_FIDI_OFF) /*!< \brief Channel 0 FI DI ratio register address. */
  173. #define US1_FIDI (USART1_BASE + US_FIDI_OFF) /*!< \brief Channel 1 FI DI ratio register address. */
  174. /*@}*/
  175. /*! \name Error Counter Register */
  176. /*@{*/
  177. #define US_NER_OFF 0x00000044 /*!< \brief USART error counter register offset. */
  178. #define US0_NER (USART0_BASE + US_NER_OFF) /*!< \brief Channel 0 error counter register address. */
  179. #define US1_NER (USART1_BASE + US_NER_OFF) /*!< \brief Channel 1 error counter register address. */
  180. /*@}*/
  181. /*! \name IrDA Filter Register */
  182. /*@{*/
  183. #define US_IF_OFF 0x0000004C /*!< \brief USART IrDA filter register offset. */
  184. #define US0_IF (USART0_BASE + US_IF_OFF) /*!< \brief Channel 0 IrDA filter register address. */
  185. #define US1_IF (USART1_BASE + US_IF_OFF) /*!< \brief Channel 1 IrDA filter register address. */
  186. /*@}*/
  187. #if defined(USART_HAS_PDC)
  188. /*! \name Receive Pointer Register */
  189. /*@{*/
  190. #define US0_RPR (USART0_BASE + PERIPH_RPR_OFF) /*!< \brief Channel 0 receive pointer register address. */
  191. #define US1_RPR (USART1_BASE + PERIPH_RPR_OFF) /*!< \brief Channel 1 receive pointer register address. */
  192. /*@}*/
  193. /*! \name Receive Counter Register */
  194. /*@{*/
  195. #define US0_RCR (USART0_BASE + PERIPH_RCR_OFF) /*!< \brief Channel 0 receive counter register address. */
  196. #define US1_RCR (USART1_BASE + PERIPH_RCR_OFF) /*!< \brief Channel 1 receive counter register address. */
  197. /*@}*/
  198. /*! \name Transmit Pointer Register */
  199. /*@{*/
  200. #define US0_TPR (USART0_BASE + PERIPH_TPR_OFF) /*!< \brief Channel 0 transmit pointer register address. */
  201. #define US1_TPR (USART1_BASE + PERIPH_TPR_OFF) /*!< \brief Channel 1 transmit pointer register address. */
  202. /*@}*/
  203. /*! \name Transmit Counter Register */
  204. /*@{*/
  205. #define US0_TCR (USART0_BASE + PERIPH_TCR_OFF) /*!< \brief Channel 0 transmit counter register address. */
  206. #define US1_TCR (USART1_BASE + PERIPH_TCR_OFF) /*!< \brief Channel 1 transmit counter register address. */
  207. /*@}*/
  208. #if defined(PERIPH_RNPR_OFF) && defined(PERIPH_RNCR_OFF)
  209. #define US0_RNPR (USART0_BASE + PERIPH_RNPR_OFF) /*!< \brief PDC channel 0 receive next pointer register. */
  210. #define US1_RNPR (USART1_BASE + PERIPH_RNPR_OFF) /*!< \brief PDC channel 1 receive next pointer register. */
  211. #define US0_RNCR (USART0_BASE + PERIPH_RNCR_OFF) /*!< \brief PDC channel 0 receive next counter register. */
  212. #define US1_RNCR (USART1_BASE + PERIPH_RNCR_OFF) /*!< \brief PDC channel 1 receive next counter register. */
  213. #endif
  214. #if defined(PERIPH_TNPR_OFF) && defined(PERIPH_TNCR_OFF)
  215. #define US0_TNPR (USART0_BASE + PERIPH_TNPR_OFF) /*!< \brief PDC channel 0 transmit next pointer register. */
  216. #define US1_TNPR (USART1_BASE + PERIPH_TNPR_OFF) /*!< \brief PDC channel 1 transmit next pointer register. */
  217. #define US0_TNCR (USART0_BASE + PERIPH_TNCR_OFF) /*!< \brief PDC channel 0 transmit next counter register. */
  218. #define US1_TNCR (USART1_BASE + PERIPH_TNCR_OFF) /*!< \brief PDC channel 1 transmit next counter register. */
  219. #endif
  220. #if defined(PERIPH_PTCR_OFF)
  221. #define US0_PTCR (USART0_BASE + PERIPH_PTCR_OFF) /*!< \brief PDC channel 0 transfer control register. */
  222. #define US1_PTCR (USART1_BASE + PERIPH_PTCR_OFF) /*!< \brief PDC channel 1 transfer control register. */
  223. #endif
  224. #if defined(PERIPH_PTSR_OFF)
  225. #define US0_PTSR (USART0_BASE + PERIPH_PTSR_OFF) /*!< \brief PDC channel 0 transfer status register. */
  226. #define US1_PTSR (USART1_BASE + PERIPH_PTSR_OFF) /*!< \brief PDC channel 1 transfer status register. */
  227. #endif
  228. #endif /* USART_HAS_PDC */
  229. /*@} xgNutArchArmAt91Us */
  230. #endif /* _ARCH_ARM_AT91_US_H_ */