at91_mci.h 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276
  1. #ifndef _ARCH_ARM_AT91_MCI_H_
  2. #define _ARCH_ARM_AT91_MCI_H_
  3. /*
  4. * Copyright (C) 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_mci.h
  36. * \brief AT91 peripherals.
  37. *
  38. * \verbatim
  39. *
  40. * $Log: at91_mci.h,v $
  41. * Revision 1.2 2006/09/05 12:32:13 haraldkipp
  42. * Timeout multiplier settings renamed to follow Atmel's convention.
  43. * 4-bit bus SDC setting corrected.
  44. * Several comments added or corrected.
  45. *
  46. * Revision 1.1 2006/08/31 19:10:37 haraldkipp
  47. * New peripheral register definitions for the AT91SAM9260.
  48. *
  49. *
  50. * \endverbatim
  51. */
  52. /*!
  53. * \addtogroup xgNutArchArmAt91Mci
  54. */
  55. /*@{*/
  56. /*! \name MMC Control Register */
  57. /*@{*/
  58. #define MCI_CR_OFF 0x00000000 /*!< \brief Control register offset. */
  59. #define MCI_CR (MCI_BASE + MCI_CR_OFF) /*!< \brief Control register address. */
  60. #define MCI_MCIEN 0x00000001 /*!< \brief Interface enable. */
  61. #define MCI_MCIDIS 0x00000002 /*!< \brief Interface disable. */
  62. #define MCI_PWSEN 0x00000004 /*!< \brief Power save mode enable. */
  63. #define MCI_PWSDIS 0x00000008 /*!< \brief Power save mode disable. */
  64. #define MCI_SWRST 0x00000080 /*!< \brief Software reset. */
  65. /*@}*/
  66. /*! \name MMC Mode Register */
  67. /*@{*/
  68. #define MCI_MR_OFF 0x00000004 /*!< \brief Mode register offset. */
  69. #define MCI_MR (MCI_BASE + MCI_MR_OFF) /*!< \brief Mode register address. */
  70. #define MCI_CLKDIV 0x000000FF /*!< \brief Clock divider mask. */
  71. #define MCI_CLKDIV_LSB 0 /*!< \brief Clock divider LSB. */
  72. #define MCI_PWSDIV 0x00000700 /*!< \brief Power saving divider mask. */
  73. #define MCI_PWSDIV_LSB 8 /*!< \brief Power saving divider LSB. */
  74. #define MCI_RDPROOF 0x00000800 /*!< \brief Enable read proof. */
  75. #define MCI_WRPROOF 0x00001000 /*!< \brief Enable write proof. */
  76. #define MCI_PDCFBYTE 0x00002000 /*!< \brief Force PDC byte transfer. */
  77. #define MCI_PDCPADV 0x00004000 /*!< \brief PDC padding value. */
  78. #define MCI_PDCMODE 0x00008000 /*!< \brief PDC-oriented mode. */
  79. #define MCI_BLKLEN 0xFFFF0000 /*!< \brief Data block length mask. */
  80. #define MCI_BLKLEN_LSB 16 /*!< \brief Data block length LSB. */
  81. /*@}*/
  82. /*! \name MMC Data Timeout Register */
  83. /*@{*/
  84. #define MCI_DTOR_OFF 0x00000008 /*!< \brief Data timeout register offset. */
  85. #define MCI_DTOR (MCI_BASE + MCI_DTOR_OFF) /*!< \brief Data timeout register address. */
  86. #define MCI_DTOCYC 0x0000000F /*!< \brief Data timeout cycle number mask. */
  87. #define MCI_DTOCYC_LSB 0 /*!< \brief Data timeout cycle number LSB. */
  88. #define MCI_DTOMUL 0x00000070 /*!< \brief Data timeout multiplier mask. */
  89. #define MCI_DTOMUL_1 0x00000000 /*!< \brief Data timeout multiplier 1. */
  90. #define MCI_DTOMUL_16 0x00000010 /*!< \brief Data timeout multiplier 16. */
  91. #define MCI_DTOMUL_128 0x00000020 /*!< \brief Data timeout multiplier 128. */
  92. #define MCI_DTOMUL_256 0x00000030 /*!< \brief Data timeout multiplier 256. */
  93. #define MCI_DTOMUL_1K 0x00000040 /*!< \brief Data timeout multiplier 1024. */
  94. #define MCI_DTOMUL_4K 0x00000050 /*!< \brief Data timeout multiplier 4096. */
  95. #define MCI_DTOMUL_64K 0x00000060 /*!< \brief Data timeout multiplier 65536. */
  96. #define MCI_DTOMUL_1M 0x00000070 /*!< \brief Data timeout multiplier 1048576. */
  97. /*@}*/
  98. /*! \name MMC SDCard/SDIO Register */
  99. /*@{*/
  100. #define MCI_SDCR_OFF 0x0000000C /*!< \brief SDC/SDIO register offset. */
  101. #define MCI_SDCR (MCI_BASE + MCI_SDCR_OFF) /*!< \brief SDC/SDIO register address. */
  102. #define MCI_SDCSEL 0x00000003 /*!< \brief SDC/SDIO slot mask. */
  103. #define MCI_SDCSEL_SLOTA 0x00000000 /*!< \brief Slot A selected. */
  104. #define MCI_SDCSEL_SLOTB 0x00000001 /*!< \brief Slot B selected. */
  105. #define MCI_SDCBUS 0x00000080 /*!< \brief SDC/SDIO 4-bit bus. */
  106. /*@}*/
  107. /*! \name MMC Argument Register */
  108. /*@{*/
  109. #define MCI_ARGR_OFF 0x00000010 /*!< \brief Argument register offset. */
  110. #define MCI_ARGR (MCI_BASE + MCI_ARGR_OFF) /*!< \brief Argument register address. */
  111. /*@}*/
  112. /*! \name MMC Command Register */
  113. /*@{*/
  114. #define MCI_CMDR_OFF 0x00000014 /*!< \brief Command register offset. */
  115. #define MCI_CMDR (MCI_BASE + MCI_CMDR_OFF) /*!< \brief Command register address. */
  116. #define MCI_CMDNB 0x0000003F /*!< \brief Command number mask. */
  117. #define MCI_CMDNB_LSB 0 /*!< \brief Command number LSB. */
  118. #define MCI_RSPTYP 0x000000C0 /*!< \brief Response type mask. */
  119. #define MCI_RSPTYP_NONE 0x00000000 /*!< \brief No response. */
  120. #define MCI_RSPTYP_48 0x00000040 /*!< \brief 48-bit response. */
  121. #define MCI_RSPTYP_136 0x00000080 /*!< \brief 136-bit response. */
  122. #define MCI_SPCMD 0x00000700 /*!< \brief Special command mask. */
  123. #define MCI_SPCMD_NONE 0x00000000 /*!< \brief Not a special command. */
  124. #define MCI_SPCMD_INIT 0x00000100 /*!< \brief Initialization command. */
  125. #define MCI_SPCMD_SYNC 0x00000200 /*!< \brief Synchronized command. */
  126. #define MCI_SPCMD_ICMD 0x00000400 /*!< \brief Interrupt command. */
  127. #define MCI_SPCMD_IRSP 0x00000500 /*!< \brief Interrupt response. */
  128. #define MCI_OPCMD 0x00000800 /*!< \brief Open drain command. */
  129. #define MCI_MAXLAT 0x00001000 /*!< \brief Maximum latency for command to response. */
  130. #define MCI_TRCMD 0x00030000 /*!< \brief Transfer command mask. */
  131. #define MCI_TRCMD_NONE 0x00000000 /*!< \brief No data transfer. */
  132. #define MCI_TRCMD_START 0x00010000 /*!< \brief Start data transfer. */
  133. #define MCI_TRCMD_STOP 0x00020000 /*!< \brief Stop data transfer. */
  134. #define MCI_TRDIR 0x00040000 /*!< \brief Read transfer. */
  135. #define MCI_TRTYP 0x00380000 /*!< \brief Transfer type mask. */
  136. #define MCI_TRTYP_MMC_SBLK 0x00000000 /*!< \brief MMC/SDC single block transfer. */
  137. #define MCI_TRTYP_MMC_MBLK 0x00080000 /*!< \brief MMC/SDC multiple block transfer. */
  138. #define MCI_TRTYP_MMC_STREAM 0x00100000 /*!< \brief MMC stream transfer. */
  139. #define MCI_TRTYP_SDIO_BYTE 0x00200000 /*!< \brief SDIO byte transfer. */
  140. #define MCI_TRTYP_SDIO_BLK 0x00280000 /*!< \brief SDIO block transfer. */
  141. #define MCI_IOSPCMD 0x03000000 /*!< \brief Specila SDIO command mask. */
  142. #define MCI_IOSPCMD_NONE 0x00000000 /*!< \brief Not a special SDIO command. */
  143. #define MCI_IOSPCMD_SUSPEND 0x01000000 /*!< \brief SDIO suspend command. */
  144. #define MCI_IOSPCMD_RESUME 0x02000000 /*!< \brief SDIO resume command. */
  145. /*@}*/
  146. /*! \name MMC Block Register */
  147. /*@{*/
  148. #define MCI_BLKR_OFF 0x00000018 /*!< \brief Block register offset. */
  149. #define MCI_BLKR (MCI_BASE + MCI_BLKR_OFF) /*!< \brief Block register address. */
  150. #define MCI_BCNT 0x0000FFFF /*!< \brief MMC/SDIO block count or SDIO byte count mask. */
  151. #define MCI_BCNT_LSB 0 /*!< \brief MMC/SDIO block count or SDIO byte count LSB. */
  152. /*@}*/
  153. /*! \name MMC Response Register */
  154. /*@{*/
  155. #define MCI_RSPR_OFF 0x00000020 /*!< \brief Response register offset. */
  156. #define MCI_RSPR (MCI_BASE + MCI_RSPR_OFF) /*!< \brief Response register address. */
  157. /*@}*/
  158. /*! \name MMC Receive Data Register */
  159. /*@{*/
  160. #define MCI_RDR_OFF 0x00000030 /*!< \brief Receive data register offset. */
  161. #define MCI_RDR (MCI_BASE + MCI_RDR_OFF) /*!< \brief Receive data register address. */
  162. /*@}*/
  163. /*! \name MMC Transmit Data Register */
  164. /*@{*/
  165. #define MCI_TDR_OFF 0x00000034 /*!< \brief Transmit data register offset. */
  166. #define MCI_TDR (MCI_BASE + MCI_TDR_OFF) /*!< \brief Transmit data register address. */
  167. /*@}*/
  168. /*! \name MMC Interrupt and Status Registers */
  169. /*@{*/
  170. #define MCI_SR_OFF 0x00000040 /*!< \brief Status register offset. */
  171. #define MCI_SR (MCI_BASE + MCI_SR_OFF) /*!< \brief Status register address. */
  172. #define MCI_IER_OFF 0x00000044 /*!< \brief Enable register offset. */
  173. #define MCI_IER (MCI_BASE + MCI_IER_OFF) /*!< \brief Enable register address. */
  174. #define MCI_IDR_OFF 0x00000048 /*!< \brief Disable register offset. */
  175. #define MCI_IDR (MCI_BASE + MCI_IDR_OFF) /*!< \brief Disable register address. */
  176. #define MCI_IMR_OFF 0x0000004C /*!< \brief Mask register offset. */
  177. #define MCI_IMR (MCI_BASE + MCI_IMR_OFF) /*!< \brief Mask register address. */
  178. #define MCI_CMDRDY 0x00000001 /*!< \brief Command ready. */
  179. #define MCI_RXRDY 0x00000002 /*!< \brief Receiver ready. */
  180. #define MCI_TXRDY 0x00000004 /*!< \brief Transmit ready. */
  181. #define MCI_BLKE 0x00000008 /*!< \brief Data block ended. */
  182. #define MCI_DTIP 0x00000010 /*!< \brief Data transfer in progress. */
  183. #define MCI_NOTBUSY 0x00000020 /*!< \brief MCI not busy. */
  184. #define MCI_ENDRX 0x00000040 /*!< \brief End of receive buffer. */
  185. #define MCI_ENDTX 0x00000080 /*!< \brief End of transmit buffer. */
  186. #define MCI_SDIOIRQA 0x00000100 /*!< \brief Undocumented. */
  187. #define MCI_SDIOIRQB 0x00000200 /*!< \brief Undocumented. */
  188. #define MCI_RXBUFF 0x00004000 /*!< \brief Receive buffer full. */
  189. #define MCI_TXBUFE 0x00008000 /*!< \brief Transmit buffer empty. */
  190. #define MCI_RINDE 0x00010000 /*!< \brief Response index error. */
  191. #define MCI_RDIRE 0x00020000 /*!< \brief Response direction error. */
  192. #define MCI_RCRCE 0x00040000 /*!< \brief Response CRC error. */
  193. #define MCI_RENDE 0x00080000 /*!< \brief Response end bit error. */
  194. #define MCI_RTOE 0x00100000 /*!< \brief Response timeout error. */
  195. #define MCI_DCRCE 0x00200000 /*!< \brief Data CRC error. */
  196. #define MCI_DTOE 0x00400000 /*!< \brief Date timeout error. */
  197. #define MCI_OVRE 0x40000000 /*!< \brief Overrun error. */
  198. #define MCI_UNRE 0x80000000 /*!< \brief Underrun error. */
  199. /*@}*/
  200. #if defined(MCI_HAS_PDC)
  201. /*! \name SSC Receive Pointer Register */
  202. /*@{*/
  203. #define MCI_RPR (MCI_BASE + PERIPH_RPR_OFF) /*!< \brief PDC receive pointer register address. */
  204. /*@}*/
  205. /*! \name SSC Receive Counter Register */
  206. /*@{*/
  207. #define MCI_RCR (MCI_BASE + PERIPH_RCR_OFF) /*!< \brief PDC receive counter register address. */
  208. /*@}*/
  209. /*! \name SSC Transmit Pointer Register */
  210. /*@{*/
  211. #define MCI_TPR (MCI_BASE + PERIPH_TPR_OFF) /*!< \brief PDC transmit pointer register address. */
  212. /*@}*/
  213. /*! \name SSC Transmit Counter Register */
  214. /*@{*/
  215. #define MCI_TCR (MCI_BASE + PERIPH_TCR_OFF) /*!< \brief PDC transmit counter register address. */
  216. /*@}*/
  217. /*! \name SSC Receive Next Pointer Register */
  218. /*@{*/
  219. #define MCI_RNPR (MCI_BASE + PERIPH_RNPR_OFF) /*!< \brief PDC receive next pointer register address. */
  220. /*@}*/
  221. /*! \name SSC Receive Next Counter Register */
  222. /*@{*/
  223. #define MCI_RNCR (MCI_BASE + PERIPH_RNCR_OFF) /*!< \brief PDC receive next counter register address. */
  224. /*@}*/
  225. /*! \name SSC Transmit Next Pointer Register */
  226. /*@{*/
  227. #define MCI_TNPR (MCI_BASE + PERIPH_TNPR_OFF) /*!< \brief PDC transmit next pointer register address. */
  228. /*@}*/
  229. /*! \name SSC Transmit Next Counter Register */
  230. /*@{*/
  231. #define MCI_TNCR (MCI_BASE + PERIPH_TNCR_OFF) /*!< \brief PDC transmit next counter register address. */
  232. /*@}*/
  233. /*! \name SSC Transfer Control Register */
  234. /*@{*/
  235. #define MCI_PTCR (MCI_BASE + PERIPH_PTCR_OFF) /*!< \brief PDC transfer control register address. */
  236. /*@}*/
  237. /*! \name SSC Transfer Status Register */
  238. /*@{*/
  239. #define MCI_PTSR (MCI_BASE + PERIPH_PTSR_OFF) /*!< \brief PDC transfer status register address. */
  240. /*@}*/
  241. #endif
  242. /*@} xgNutArchArmAt91Mci */
  243. #endif /* _ARCH_ARM_AT91_MCI_H_ */