at91_spi.h 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  1. #ifndef _ARCH_ARM_AT91_SPI_H_
  2. #define _ARCH_ARM_AT91_SPI_H_
  3. /*
  4. * Copyright (C)
  5. */
  6. /*!
  7. * \file arch/arm/at91_spi.h
  8. * \brief AT91 peripherals.
  9. *
  10. * \verbatim
  11. *
  12. * $Log: at91_spi.h,v $
  13. * Revision 1.5 2006/09/29 12:30:31 haraldkipp
  14. * Register offsets added.
  15. *
  16. * Revision 1.4 2006/08/31 19:11:46 haraldkipp
  17. * Bits per transfer definitions added.
  18. *
  19. * Revision 1.3 2006/08/05 11:54:45 haraldkipp
  20. * PDC registers added.
  21. *
  22. * Revision 1.2 2006/07/26 11:22:31 haraldkipp
  23. * Added missing bit definitions.
  24. *
  25. * Revision 1.1 2006/07/21 09:03:56 haraldkipp
  26. * Added SPI support, kindly contributed by Andras Albert.
  27. *
  28. * Revision 1.1
  29. *
  30. *
  31. * \endverbatim
  32. */
  33. /*!
  34. * \addtogroup xgNutArchArmAt91Spi
  35. */
  36. /*@{*/
  37. /*! \name SPI Control Register */
  38. /*@{*/
  39. #define SPI_CR_OFF 0x00000000 /*!< \brief Control register offset. */
  40. #define SPI_SPIEN 0x00000001 /*!< \brief SPI enable. */
  41. #define SPI_SPIDIS 0x00000002 /*!< \brief SPI disable. */
  42. #define SPI_SWRST 0x00000080 /*!< \brief Software reset. */
  43. #define SPI_LASTXFER 0x01000000 /*!< \brief Last transfer. */
  44. /*@}*/
  45. /*! \name SPI Mode Register */
  46. /*@{*/
  47. #define SPI_MR_OFF 0x00000004 /*!< \brief Mode register offset. */
  48. #define SPI_MSTR 0x00000001 /*!< \brief Master mode. */
  49. #define SPI_PS 0x00000002 /*!< \brief Peripheral select. */
  50. #define SPI_PCSDEC 0x00000004 /*!< \brief Chip select decode. */
  51. #define SPI_FDIV 0x00000008 /*!< \brief Clock selection. */
  52. #define SPI_MODFDIS 0x00000010 /*!< \brief Mode fault detection. */
  53. #define SPI_LLB 0x00000080 /*!< \brief Local loopback enable. */
  54. #define SPI_PCS 0x000F0000 /*!< \brief Peripheral chip select mask. */
  55. #define SPI_PCS_0 0x000E0000 /*!< \brief Peripheral chip select 0. */
  56. #define SPI_PCS_1 0x000D0000 /*!< \brief Peripheral chip select 1. */
  57. #define SPI_PCS_2 0x000B0000 /*!< \brief Peripheral chip select 2. */
  58. #define SPI_PCS_3 0x00070000 /*!< \brief Peripheral chip select 3. */
  59. #define SPI_PCS_LSB 16 /*!< \brief Least significant bit of peripheral chip select. */
  60. #define SPI_DLYBCS 0xFF000000 /*!< \brief Mask for delay between chip selects. */
  61. #define SPI_DLYBCS_LSB 24 /*!< \brief Least significant bit of delay between chip selects. */
  62. /*@}*/
  63. /*! \name SPI Receive Data Register */
  64. /*@{*/
  65. #define SPI_RDR_OFF 0x00000008 /*!< \brief Receive data register offset. */
  66. #define SPI_RD 0x0000FFFF /*!< \brief Receive data mask. */
  67. #define SPI_RD_LSB 0 /*!< \brief Least significant bit of receive data. */
  68. /*@}*/
  69. /*! \name SPI Transmit Data Register */
  70. /*@{*/
  71. #define SPI_TDR_OFF 0x0000000C /*!< \brief Transmit data register offset. */
  72. #define SPI_TD 0x0000FFFF /*!< \brief Transmit data mask. */
  73. #define SPI_TD_LSB 0 /*!< \brief Least significant bit of transmit data. */
  74. /*@}*/
  75. /*! \name SPI Status and Interrupt Register */
  76. /*@{*/
  77. #define SPI_SR_OFF 0x00000010 /*!< \brief Status register offset. */
  78. #define SPI_IER_OFF 0x00000014 /*!< \brief Interrupt enable register offset. */
  79. #define SPI_IDR_OFF 0x00000018 /*!< \brief Interrupt disable register offset. */
  80. #define SPI_IMR_OFF 0x0000001C /*!< \brief Interrupt mask register offset. */
  81. #define SPI_RDRF 0x00000001 /*!< \brief Receive data register full. */
  82. #define SPI_TDRE 0x00000002 /*!< \brief Transmit data register empty. */
  83. #define SPI_MODF 0x00000004 /*!< \brief Mode fault error. */
  84. #define SPI_OVRES 0x00000008 /*!< \brief Overrun error status. */
  85. #define SPI_ENDRX 0x00000010 /*!< \brief End of RX buffer. */
  86. #define SPI_ENDTX 0x00000020 /*!< \brief End of TX buffer. */
  87. #define SPI_RXBUFF 0x00000040 /*!< \brief RX buffer full. */
  88. #define SPI_TXBUFE 0x00000080 /*!< \brief TX buffer empty. */
  89. #define SPI_NSSR 0x00000100 /*!< \brief NSS rising. */
  90. #define SPI_TXEMPTY 0x00000200 /*!< \brief Transmission register empty. */
  91. #define SPI_SPIENS 0x00010000 /*!< \brief SPI enable status. */
  92. /*@}*/
  93. /*! \name SPI Chip Select Registers */
  94. /*@{*/
  95. #define SPI_CSR0_OFF 0x00000030 /*!< \brief Chip select register 0 offset. */
  96. #define SPI_CSR1_OFF 0x00000034 /*!< \brief Chip select register 1 offset. */
  97. #define SPI_CSR2_OFF 0x00000038 /*!< \brief Chip select register 2 offset. */
  98. #define SPI_CSR3_OFF 0x0000003C /*!< \brief Chip select register 3 offset. */
  99. #define SPI_CPOL 0x00000001 /*!< \brief Clock polarity. */
  100. #define SPI_NCPHA 0x00000002 /*!< \brief Clock phase. */
  101. #define SPI_CSAAT 0x00000008 /*!< \brief Chip select active after transfer. */
  102. #define SPI_BITS 0x000000F0 /*!< \brief Bits per transfer mask. */
  103. #define SPI_BITS_8 0x00000000 /*!< \brief 8 bits per transfer. */
  104. #define SPI_BITS_9 0x00000010 /*!< \brief 9 bits per transfer. */
  105. #define SPI_BITS_10 0x00000020 /*!< \brief 10 bits per transfer. */
  106. #define SPI_BITS_11 0x00000030 /*!< \brief 11 bits per transfer. */
  107. #define SPI_BITS_12 0x00000040 /*!< \brief 12 bits per transfer. */
  108. #define SPI_BITS_13 0x00000050 /*!< \brief 13 bits per transfer. */
  109. #define SPI_BITS_14 0x00000060 /*!< \brief 14 bits per transfer. */
  110. #define SPI_BITS_15 0x00000070 /*!< \brief 15 bits per transfer. */
  111. #define SPI_BITS_16 0x00000080 /*!< \brief 16 bits per transfer. */
  112. #define SPI_BITS_LSB 4 /*!< \brief Least significant bit of bits per transfer. */
  113. #define SPI_SCBR 0x0000FF00 /*!< \brief Serial clock baud rate mask. */
  114. #define SPI_SCBR_LSB 8 /*!< \brief Least significant bit of serial clock baud rate. */
  115. #define SPI_DLYBS 0x00FF0000 /*!< \brief Delay before SPCK mask. */
  116. #define SPI_DLYBS_LSB 16 /*!< \brief Least significant bit of delay before SPCK. */
  117. #define SPI_DLYBCT 0xFF000000 /*!< \brief Delay between consecutive transfers mask. */
  118. #define SPI_DLYBCT_LSB 24 /*!< \brief Least significant bit of delay between consecutive transfers. */
  119. /*@}*/
  120. /*! \name Single SPI Register Addresses */
  121. /*@{*/
  122. #if defined(SPI_BASE)
  123. #define SPI0_BASE SPI_BASE
  124. #define SPI_CR SPI0_CR /*!< \brief SPI Control Register Write-only. */
  125. #define SPI_MR SPI0_MR /*!< \brief SPI Mode Register Read/Write Reset=0x0. */
  126. #define SPI_RDR SPI0_RDR /*!< \brief SPI Receive Data Register Read-only Reset=0x0. */
  127. #define SPI_TDR SPI0_TDR /*!< \brief SPI Transmit Data Register Write-only . */
  128. #define SPI_SR SPI0_SR /*!< \brief SPI Status Register Read-only Reset=0x000000F0. */
  129. #define SPI_IER SPI0_IER /*!< \brief SPI Interrupt Enable Register Write-only. */
  130. #define SPI_IDR SPI0_IDR /*!< \brief SPI Interrupt Disable Register Write-only. */
  131. #define SPI_IMR SPI0_IMR /*!< \brief SPI Interrupt Mask Register Read-only Reset=0x0. */
  132. #define SPI_CSR0 SPI0_CSR0 /*!< \brief SPI Chip Select Register 0 Read/Write Reset=0x0. */
  133. #define SPI_CSR1 SPI0_CSR1 /*!< \brief SPI Chip Select Register 1 Read/Write Reset=0x0. */
  134. #define SPI_CSR2 SPI0_CSR2 /*!< \brief SPI Chip Select Register 2 Read/Write Reset=0x0. */
  135. #define SPI_CSR3 SPI0_CSR3 /*!< \brief SPI Chip Select Register 3 Read/Write Reset=0x0. */
  136. #if defined(SPI_HAS_PDC)
  137. #define SPI_RPR SPI0_RPR /*!< \brief PDC channel 0 receive pointer register. */
  138. #define SPI_RCR SPI0_RCR /*!< \brief PDC channel 0 receive counter register. */
  139. #define SPI_TPR SPI0_TPR /*!< \brief PDC channel 0 transmit pointer register. */
  140. #define SPI_TCR SPI0_TCR /*!< \brief PDC channel 0 transmit counter register. */
  141. #define SPI_RNPR SPI0_RNPR /*!< \brief PDC channel 0 receive next pointer register. */
  142. #define SPI_RNCR SPI0_RNCR /*!< \brief PDC channel 0 receive next counter register. */
  143. #define SPI_TNPR SPI0_TNPR /*!< \brief PDC channel 0 transmit next pointer register. */
  144. #define SPI_TNCR SPI0_TNCR /*!< \brief PDC channel 0 transmit next counter register. */
  145. #define SPI_PTCR SPI0_PTCR /*!< \brief PDC channel 0 transfer control register. */
  146. #define SPI_PTSR SPI0_PTSR /*!< \brief PDC channel 0 transfer status register. */
  147. #endif /* SPI_HAS_PDC */
  148. #endif /* SPI_BASE */
  149. /*@}*/
  150. /*! \name SPI 0 Register Addresses */
  151. /*@{*/
  152. #if defined(SPI0_BASE)
  153. #define SPI0_CR (SPI0_BASE + SPI_CR_OFF) /*!< \brief SPI Control Register Write-only. */
  154. #define SPI0_MR (SPI0_BASE + SPI_MR_OFF) /*!< \brief SPI Mode Register Read/Write Reset=0x0. */
  155. #define SPI0_RDR (SPI0_BASE + SPI_RDR_OFF) /*!< \brief SPI Receive Data Register Read-only Reset=0x0. */
  156. #define SPI0_TDR (SPI0_BASE + SPI_TDR_OFF) /*!< \brief SPI Transmit Data Register Write-only . */
  157. #define SPI0_SR (SPI0_BASE + SPI_SR_OFF) /*!< \brief SPI Status Register Read-only Reset=0x000000F0. */
  158. #define SPI0_IER (SPI0_BASE + SPI_IER_OFF) /*!< \brief SPI Interrupt Enable Register Write-only. */
  159. #define SPI0_IDR (SPI0_BASE + SPI_IDR_OFF) /*!< \brief SPI Interrupt Disable Register Write-only. */
  160. #define SPI0_IMR (SPI0_BASE + SPI_IMR_OFF) /*!< \brief SPI Interrupt Mask Register Read-only Reset=0x0. */
  161. #define SPI0_CSR0 (SPI0_BASE + SPI_CSR0_OFF) /*!< \brief SPI Chip Select Register 0 Read/Write Reset=0x0. */
  162. #define SPI0_CSR1 (SPI0_BASE + SPI_CSR1_OFF) /*!< \brief SPI Chip Select Register 1 Read/Write Reset=0x0. */
  163. #define SPI0_CSR2 (SPI0_BASE + SPI_CSR2_OFF) /*!< \brief SPI Chip Select Register 2 Read/Write Reset=0x0. */
  164. #define SPI0_CSR3 (SPI0_BASE + SPI_CSR3_OFF) /*!< \brief SPI Chip Select Register 3 Read/Write Reset=0x0. */
  165. #if defined(SPI_HAS_PDC)
  166. #define SPI0_RPR (SPI0_BASE + PERIPH_RPR_OFF) /*!< \brief PDC channel 0 receive pointer register. */
  167. #define SPI0_RCR (SPI0_BASE + PERIPH_RCR_OFF) /*!< \brief PDC channel 0 receive counter register. */
  168. #define SPI0_TPR (SPI0_BASE + PERIPH_TPR_OFF) /*!< \brief PDC channel 0 transmit pointer register. */
  169. #define SPI0_TCR (SPI0_BASE + PERIPH_TCR_OFF) /*!< \brief PDC channel 0 transmit counter register. */
  170. #define SPI0_RNPR (SPI0_BASE + PERIPH_RNPR_OFF) /*!< \brief PDC channel 0 receive next pointer register. */
  171. #define SPI0_RNCR (SPI0_BASE + PERIPH_RNCR_OFF) /*!< \brief PDC channel 0 receive next counter register. */
  172. #define SPI0_TNPR (SPI0_BASE + PERIPH_TNPR_OFF) /*!< \brief PDC channel 0 transmit next pointer register. */
  173. #define SPI0_TNCR (SPI0_BASE + PERIPH_TNCR_OFF) /*!< \brief PDC channel 0 transmit next counter register. */
  174. #define SPI0_PTCR (SPI0_BASE + PERIPH_PTCR_OFF) /*!< \brief PDC channel 0 transfer control register. */
  175. #define SPI0_PTSR (SPI0_BASE + PERIPH_PTSR_OFF) /*!< \brief PDC channel 0 transfer status register. */
  176. #endif /* SPI_HAS_PDC */
  177. #endif /* SPI0_BASE */
  178. /*@}*/
  179. /*! \name SPI 1 Register Addresses */
  180. /*@{*/
  181. #if defined(SPI1_BASE)
  182. #define SPI1_CR (SPI1_BASE + SPI_CR_OFF) /*!< \brief SPI Control Register Write-only. */
  183. #define SPI1_MR (SPI1_BASE + SPI_MR_OFF) /*!< \brief SPI Mode Register Read/Write Reset=0x0. */
  184. #define SPI1_RDR (SPI1_BASE + SPI_RDR_OFF) /*!< \brief SPI Receive Data Register Read-only Reset=0x0. */
  185. #define SPI1_TDR (SPI1_BASE + SPI_TDR_OFF) /*!< \brief SPI Transmit Data Register Write-only . */
  186. #define SPI1_SR (SPI1_BASE + SPI_SR_OFF) /*!< \brief SPI Status Register Read-only Reset=0x000000F0. */
  187. #define SPI1_IER (SPI1_BASE + SPI_IER_OFF) /*!< \brief SPI Interrupt Enable Register Write-only. */
  188. #define SPI1_IDR (SPI1_BASE + SPI_IDR_OFF) /*!< \brief SPI Interrupt Disable Register Write-only. */
  189. #define SPI1_IMR (SPI1_BASE + SPI_IMR_OFF) /*!< \brief SPI Interrupt Mask Register Read-only Reset=0x0. */
  190. #define SPI1_CSR0 (SPI1_BASE + SPI_CSR0_OFF) /*!< \brief SPI Chip Select Register 0 Read/Write Reset=0x0. */
  191. #define SPI1_CSR1 (SPI1_BASE + SPI_CSR1_OFF) /*!< \brief SPI Chip Select Register 1 Read/Write Reset=0x0. */
  192. #define SPI1_CSR2 (SPI1_BASE + SPI_CSR2_OFF) /*!< \brief SPI Chip Select Register 2 Read/Write Reset=0x0. */
  193. #define SPI1_CSR3 (SPI1_BASE + SPI_CSR3_OFF) /*!< \brief SPI Chip Select Register 3 Read/Write Reset=0x0. */
  194. #if defined(SPI_HAS_PDC)
  195. #define SPI1_RPR (SPI1_BASE + PERIPH_RPR_OFF) /*!< \brief PDC channel 1 receive pointer register. */
  196. #define SPI1_RCR (SPI1_BASE + PERIPH_RCR_OFF) /*!< \brief PDC channel 1 receive counter register. */
  197. #define SPI1_TPR (SPI1_BASE + PERIPH_TPR_OFF) /*!< \brief PDC channel 1 transmit pointer register. */
  198. #define SPI1_TCR (SPI1_BASE + PERIPH_TCR_OFF) /*!< \brief PDC channel 1 transmit counter register. */
  199. #define SPI1_RNPR (SPI1_BASE + PERIPH_RNPR_OFF) /*!< \brief PDC channel 1 receive next pointer register. */
  200. #define SPI1_RNCR (SPI1_BASE + PERIPH_RNCR_OFF) /*!< \brief PDC channel 1 receive next counter register. */
  201. #define SPI1_TNPR (SPI1_BASE + PERIPH_TNPR_OFF) /*!< \brief PDC channel 1 transmit next pointer register. */
  202. #define SPI1_TNCR (SPI1_BASE + PERIPH_TNCR_OFF) /*!< \brief PDC channel 1 transmit next counter register. */
  203. #define SPI1_PTCR (SPI1_BASE + PERIPH_PTCR_OFF) /*!< \brief PDC channel 1 transfer control register. */
  204. #define SPI1_PTSR (SPI1_BASE + PERIPH_PTSR_OFF) /*!< \brief PDC channel 1 transfer status register. */
  205. #endif /* SPI_HAS_PDC */
  206. #endif /* SPI1_BASE */
  207. /*@}*/
  208. /*@} xgNutArchArmAt91Spi */
  209. #endif /* _ARCH_ARM_AT91_SPI_H_ */