nu_fmi.h 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315
  1. /**************************************************************************//**
  2. * @file fmi.h
  3. * @brief N9H30 FMI eMMC driver header file
  4. *
  5. * @note
  6. * SPDX-License-Identifier: Apache-2.0
  7. * Copyright (C) 2018 Nuvoton Technology Corp. All rights reserved.
  8. *****************************************************************************/
  9. #include <stdio.h>
  10. #ifndef __NU_FMI_H__
  11. #define __NU_FMI_H__
  12. /** @addtogroup N9H30_Device_Driver N9H30 Device Driver
  13. @{
  14. */
  15. /** @addtogroup N9H30_FMI_Driver FMI Driver
  16. @{
  17. */
  18. /** @addtogroup N9H30_FMI_EXPORTED_CONSTANTS FMI Exported Constants
  19. @{
  20. */
  21. /**
  22. @addtogroup FMI_CONST FMI Bit Field Definition
  23. Constant Definitions for FMI Controller
  24. @{ */
  25. #define FMI_DMACTL_DMAEN_Pos (0) /*!< FMI DMACTL: DMAEN Position */
  26. #define FMI_DMACTL_DMAEN_Msk (0x1ul << FMI_DMACTL_DMAEN_Pos) /*!< FMI DMACTL: DMAEN Mask */
  27. #define FMI_DMACTL_DMARST_Pos (1) /*!< FMI DMACTL: DMARST Position */
  28. #define FMI_DMACTL_DMARST_Msk (0x1ul << FMI_DMACTL_DMARST_Pos) /*!< FMI DMACTL: DMARST Mask */
  29. #define FMI_DMACTL_SGEN_Pos (3) /*!< FMI DMACTL: SGEN Position */
  30. #define FMI_DMACTL_SGEN_Msk (0x1ul << FMI_DMACTL_SGEN_Pos) /*!< FMI DMACTL: SGEN Mask */
  31. #define FMI_DMACTL_DMABUSY_Pos (9) /*!< FMI DMACTL: DMABUSY Position */
  32. #define FMI_DMACTL_DMABUSY_Msk (0x1ul << FMI_DMACTL_DMABUSY_Pos) /*!< FMI DMACTL: DMABUSY Mask */
  33. #define FMI_DMASA_ORDER_Pos (0) /*!< FMI DMASA: ORDER Position */
  34. #define FMI_DMASA_ORDER_Msk (0x1ul << FMI_DMASA_ORDER_Pos) /*!< FMI DMASA: ORDER Mask */
  35. #define FMI_DMASA_DMASA_Pos (1) /*!< FMI DMASA: DMASA Position */
  36. #define FMI_DMASA_DMASA_Msk (0x7ffffffful << FMI_DMASA_DMASA_Pos) /*!< FMI DMASA: DMASA Mask */
  37. #define FMI_DMABCNT_BCNT_Pos (0) /*!< FMI DMABCNT: BCNT Position */
  38. #define FMI_DMABCNT_BCNT_Msk (0x3fffffful << FMI_DMABCNT_BCNT_Pos) /*!< FMI DMABCNT: BCNT Mask */
  39. #define FMI_DMAINTEN_ABORTIEN_Pos (0) /*!< FMI DMAINTEN: ABORTIEN Position */
  40. #define FMI_DMAINTEN_ABORTIEN_Msk (0x1ul << FMI_DMAINTEN_ABORTIEN_Pos) /*!< FMI DMAINTEN: ABORTIEN Mask */
  41. #define FMI_DMAINTEN_WEOTIEN_Pos (1) /*!< FMI DMAINTEN: WEOTIEN Position */
  42. #define FMI_DMAINTEN_WEOTIEN_Msk (0x1ul << FMI_DMAINTEN_WEOTIEN_Pos) /*!< FMI DMAINTEN: WEOTIEN Mask */
  43. #define FMI_DMAINTSTS_ABORTIF_Pos (0) /*!< FMI DMAINTSTS: ABORTIF Position */
  44. #define FMI_DMAINTSTS_ABORTIF_Msk (0x1ul << FMI_DMAINTSTS_ABORTIF_Pos) /*!< FMI DMAINTSTS: ABORTIF Mask */
  45. #define FMI_DMAINTSTS_WEOTIF_Pos (1) /*!< FMI DMAINTSTS: WEOTIF Position */
  46. #define FMI_DMAINTSTS_WEOTIF_Msk (0x1ul << FMI_DMAINTSTS_WEOTIF_Pos) /*!< FMI DMAINTSTS: WEOTIF Mask */
  47. #define FMI_CTL_CTLRST_Pos (0) /*!< FMI CTL: CTLRST Position */
  48. #define FMI_CTL_CTLRST_Msk (0x1ul << FMI_CTL_CTLRST_Pos) /*!< FMI CTL: CTLRST Mask */
  49. #define FMI_CTL_EMMCEN_Pos (1) /*!< FMI CTL: EMMCEN Position */
  50. #define FMI_CTL_EMMCEN_Msk (0x1ul << FMI_CTL_EMMCEN_Pos) /*!< FMI CTL: EMMCEN Mask */
  51. #define FMI_CTL_NANDEN_Pos (1) /*!< FMI CTL: NANDEN Position */
  52. #define FMI_CTL_NANDEN_Msk (0x1ul << FMI_CTL_NANDEN_Pos) /*!< FMI CTL: NANDEN Mask */
  53. #define FMI_INTEN_DTAIEN_Pos (0) /*!< FMI INTEN: DTAIEN Position */
  54. #define FMI_INTEN_DTAIEN_Msk (0x1ul << FMI_INTEN_DTAIEN_Pos) /*!< FMI INTEN: DTAIEN Mask */
  55. #define FMI_INTSTS_DTAIF_Pos (0) /*!< FMI INTSTS: DTAIF Position */
  56. #define FMI_INTSTS_DTAIF_Msk (0x1ul << FMI_INTSTS_DTAIF_Pos) /*!< FMI INTSTS: DTAIF Mask */
  57. #define FMI_EMMCCTL_COEN_Pos (0) /*!< FMI EMMCCTL: COEN Position */
  58. #define FMI_EMMCCTL_COEN_Msk (0x1ul << FMI_EMMCCTL_COEN_Pos) /*!< FMI EMMCCTL: COEN Mask */
  59. #define FMI_EMMCCTL_RIEN_Pos (1) /*!< FMI EMMCCTL: RIEN Position */
  60. #define FMI_EMMCCTL_RIEN_Msk (0x1ul << FMI_EMMCCTL_RIEN_Pos) /*!< FMI EMMCCTL: RIEN Mask */
  61. #define FMI_EMMCCTL_DIEN_Pos (2) /*!< FMI EMMCCTL: DIEN Position */
  62. #define FMI_EMMCCTL_DIEN_Msk (0x1ul << FMI_EMMCCTL_DIEN_Pos) /*!< FMI EMMCCTL: DIEN Mask */
  63. #define FMI_EMMCCTL_DOEN_Pos (3) /*!< FMI EMMCCTL: DOEN Position */
  64. #define FMI_EMMCCTL_DOEN_Msk (0x1ul << FMI_EMMCCTL_DOEN_Pos) /*!< FMI EMMCCTL: DOEN Mask */
  65. #define FMI_EMMCCTL_R2EN_Pos (4) /*!< FMI EMMCCTL: R2EN Position */
  66. #define FMI_EMMCCTL_R2EN_Msk (0x1ul << FMI_EMMCCTL_R2EN_Pos) /*!< FMI EMMCCTL: R2EN Mask */
  67. #define FMI_EMMCCTL_CLK74OEN_Pos (5) /*!< FMI EMMCCTL: CLK74OEN Position */
  68. #define FMI_EMMCCTL_CLK74OEN_Msk (0x1ul << FMI_EMMCCTL_CLK74OEN_Pos) /*!< FMI EMMCCTL: CLK74OEN Mask */
  69. #define FMI_EMMCCTL_CLK8OEN_Pos (6) /*!< FMI EMMCCTL: CLK8OEN Position */
  70. #define FMI_EMMCCTL_CLK8OEN_Msk (0x1ul << FMI_EMMCCTL_CLK8OEN_Pos) /*!< FMI EMMCCTL: CLK8OEN Mask */
  71. #define FMI_EMMCCTL_CLKKEEP0_Pos (7) /*!< FMI EMMCCTL: CLKKEEP0 Position */
  72. #define FMI_EMMCCTL_CLKKEEP0_Msk (0x1ul << FMI_EMMCCTL_CLKKEEP0_Pos) /*!< FMI EMMCCTL: CLKKEEP0 Mask */
  73. #define FMI_EMMCCTL_CMDCODE_Pos (8) /*!< FMI EMMCCTL: CMDCODE Position */
  74. #define FMI_EMMCCTL_CMDCODE_Msk (0x3ful << FMI_EMMCCTL_CMDCODE_Pos) /*!< FMI EMMCCTL: CMDCODE Mask */
  75. #define FMI_EMMCCTL_CTLRST_Pos (14) /*!< FMI EMMCCTL: CTLRST Position */
  76. #define FMI_EMMCCTL_CTLRST_Msk (0x1ul << FMI_EMMCCTL_CTLRST_Pos) /*!< FMI EMMCCTL: CTLRST Mask */
  77. #define FMI_EMMCCTL_DBW_Pos (15) /*!< FMI EMMCCTL: DBW Position */
  78. #define FMI_EMMCCTL_DBW_Msk (0x1ul << FMI_EMMCCTL_DBW_Pos) /*!< FMI EMMCCTL: DBW Mask */
  79. #define FMI_EMMCCTL_BLKCNT_Pos (16) /*!< FMI EMMCCTL: BLKCNT Position */
  80. #define FMI_EMMCCTL_BLKCNT_Msk (0xfful << FMI_EMMCCTL_BLKCNT_Pos) /*!< FMI EMMCCTL: BLKCNT Mask */
  81. #define FMI_EMMCCTL_SDNWR_Pos (24) /*!< FMI EMMCCTL: SDNWR Position */
  82. #define FMI_EMMCCTL_SDNWR_Msk (0xful << FMI_EMMCCTL_SDNWR_Pos) /*!< FMI EMMCCTL: SDNWR Mask */
  83. #define FMI_EMMCCMD_ARGUMENT_Pos (0) /*!< FMI EMMCCMD: ARGUMENT Position */
  84. #define FMI_EMMCCMD_ARGUMENT_Msk (0xfffffffful << FMI_EMMCCMD_ARGUMENT_Pos) /*!< FMI EMMCCMD: ARGUMENT Mask */
  85. #define FMI_EMMCINTEN_BLKDIEN_Pos (0) /*!< FMI EMMCINTEN: BLKDIEN Position */
  86. #define FMI_EMMCINTEN_BLKDIEN_Msk (0x1ul << FMI_EMMCINTEN_BLKDIEN_Pos) /*!< FMI EMMCINTEN: BLKDIEN Mask */
  87. #define FMI_EMMCINTEN_CRCIEN_Pos (1) /*!< FMI EMMCINTEN: CRCIEN Position */
  88. #define FMI_EMMCINTEN_CRCIEN_Msk (0x1ul << FMI_EMMCINTEN_CRCIEN_Pos) /*!< FMI EMMCINTEN: CRCIEN Mask */
  89. #define FMI_EMMCINTEN_RTOIEN_Pos (12) /*!< FMI EMMCINTEN: RTOIEN Position */
  90. #define FMI_EMMCINTEN_RTOIEN_Msk (0x1ul << FMI_EMMCINTEN_RTOIEN_Pos) /*!< FMI EMMCINTEN: RTOIEN Mask */
  91. #define FMI_EMMCINTEN_DITOIEN_Pos (13) /*!< FMI EMMCINTEN: DITOIEN Position */
  92. #define FMI_EMMCINTEN_DITOIEN_Msk (0x1ul << FMI_EMMCINTEN_DITOIEN_Pos) /*!< FMI EMMCINTEN: DITOIEN Mask */
  93. #define FMI_EMMCINTSTS_BLKDIF_Pos (0) /*!< FMI EMMCINTSTS: BLKDIF Position */
  94. #define FMI_EMMCINTSTS_BLKDIF_Msk (0x1ul << FMI_EMMCINTSTS_BLKDIF_Pos) /*!< FMI EMMCINTSTS: BLKDIF Mask */
  95. #define FMI_EMMCINTSTS_CRCIF_Pos (1) /*!< FMI EMMCINTSTS: CRCIF Position */
  96. #define FMI_EMMCINTSTS_CRCIF_Msk (0x1ul << FMI_EMMCINTSTS_CRCIF_Pos) /*!< FMI EMMCINTSTS: CRCIF Mask */
  97. #define FMI_EMMCINTSTS_CRC7_Pos (2) /*!< FMI EMMCINTSTS: CRC7 Position */
  98. #define FMI_EMMCINTSTS_CRC7_Msk (0x1ul << FMI_EMMCINTSTS_CRC7_Pos) /*!< FMI EMMCINTSTS: CRC7 Mask */
  99. #define FMI_EMMCINTSTS_CRC16_Pos (3) /*!< FMI EMMCINTSTS: CRC16 Position */
  100. #define FMI_EMMCINTSTS_CRC16_Msk (0x1ul << FMI_EMMCINTSTS_CRC16_Pos) /*!< FMI EMMCINTSTS: CRC16 Mask */
  101. #define FMI_EMMCINTSTS_CRCSTS_Pos (4) /*!< FMI EMMCINTSTS: CRCSTS Position */
  102. #define FMI_EMMCINTSTS_CRCSTS_Msk (0x7ul << FMI_EMMCINTSTS_CRCSTS_Pos) /*!< FMI EMMCINTSTS: CRCSTS Mask */
  103. #define FMI_EMMCINTSTS_DAT0STS_Pos (7) /*!< FMI EMMCINTSTS: DAT0STS Position */
  104. #define FMI_EMMCINTSTS_DAT0STS_Msk (0x1ul << FMI_EMMCINTSTS_DAT0STS_Pos) /*!< FMI EMMCINTSTS: DAT0STS Mask */
  105. #define FMI_EMMCINTSTS_RTOIF_Pos (12) /*!< FMI EMMCINTSTS: RTOIF Position */
  106. #define FMI_EMMCINTSTS_RTOIF_Msk (0x1ul << FMI_EMMCINTSTS_RTOIF_Pos) /*!< FMI EMMCINTSTS: RTOIF Mask */
  107. #define FMI_EMMCINTSTS_DINTOIF_Pos (13) /*!< FMI EMMCINTSTS: DINTOIF Position */
  108. #define FMI_EMMCINTSTS_DINTOIF_Msk (0x1ul << FMI_EMMCINTSTS_DINTOIF_Pos) /*!< FMI EMMCINTSTS: DINTOIF Mask */
  109. #define FMI_EMMCRESP0_RESPTK0_Pos (0) /*!< FMI EMMCRESP0: RESPTK0 Position */
  110. #define FMI_EMMCRESP0_RESPTK0_Msk (0xfffffffful << FMI_EMMCRESP0_RESPTK0_Pos) /*!< FMI EMMCRESP0: RESPTK0 Mask */
  111. #define FMI_EMMCRESP1_RESPTK1_Pos (0) /*!< FMI EMMCRESP1: RESPTK1 Position */
  112. #define FMI_EMMCRESP1_RESPTK1_Msk (0xfful << FMI_EMMCRESP1_RESPTK1_Pos) /*!< FMI EMMCRESP1: RESPTK1 Mask */
  113. #define FMI_EMMCBLEN_BLKLEN_Pos (0) /*!< FMI EMMCBLEN: BLKLEN Position */
  114. #define FMI_EMMCBLEN_BLKLEN_Msk (0x7fful << FMI_EMMCBLEN_BLKLEN_Pos) /*!< FMI EMMCBLEN: BLKLEN Mask */
  115. #define FMI_EMMCTOUT_TOUT_Pos (0) /*!< FMI EMMCTOUT: TOUT Position */
  116. #define FMI_EMMCTOUT_TOUT_Msk (0xfffffful << FMI_EMMCTOUT_TOUT_Pos) /*!< FMI EMMCTOUT: TOUT Mask */
  117. /**@}*/ /* FMI_CONST */
  118. //--- define type of SD card or MMC
  119. #define EMMC_TYPE_UNKNOWN 0 /*!< Card Type - Unknoen \hideinitializer */
  120. #define EMMC_TYPE_SD_HIGH 1 /*!< Card Type - SDH \hideinitializer */
  121. #define EMMC_TYPE_SD_LOW 2 /*!< Card Type - SD \hideinitializer */
  122. #define EMMC_TYPE_MMC 3 /*!< Card Type - MMC \hideinitializer */
  123. #define EMMC_TYPE_EMMC 4 /*!< Card Type - eMMC \hideinitializer */
  124. #define EMMC_ERR_ID 0xFFFF0180 /*!< FMI Error ID \hideinitializer */
  125. #define EMMC_TIMEOUT (EMMC_ERR_ID|0x01) /*!< FMI Error - Timeout \hideinitializer */
  126. #define EMMC_NO_MEMORY (EMMC_ERR_ID|0x02) /*!< FMI Error - No Memory \hideinitializer */
  127. /* EMMC error */
  128. #define EMMC_NO_CARD (EMMC_ERR_ID|0x10) /*!< FMI Error - No card \hideinitializer */
  129. #define EMMC_ERR_DEVICE (EMMC_ERR_ID|0x11) /*!< FMI Error - device err \hideinitializer */
  130. #define EMMC_INIT_TIMEOUT (EMMC_ERR_ID|0x12) /*!< FMI Error - init timeout \hideinitializer */
  131. #define EMMC_SELECT_ERROR (EMMC_ERR_ID|0x13) /*!< FMI Error - select err \hideinitializer */
  132. #define EMMC_WRITE_PROTECT (EMMC_ERR_ID|0x14) /*!< FMI Error - write protect \hideinitializer */
  133. #define EMMC_INIT_ERROR (EMMC_ERR_ID|0x15) /*!< FMI Error - init err \hideinitializer */
  134. #define EMMC_CRC7_ERROR (EMMC_ERR_ID|0x16) /*!< FMI Error - crc7 err \hideinitializer */
  135. #define EMMC_CRC16_ERROR (EMMC_ERR_ID|0x17) /*!< FMI Error - crc16 err \hideinitializer */
  136. #define EMMC_CRC_ERROR (EMMC_ERR_ID|0x18) /*!< FMI Error - crc err \hideinitializer */
  137. #define EMMC_CMD8_ERROR (EMMC_ERR_ID|0x19) /*!< FMI Error - CMD8 err \hideinitializer */
  138. #define SD_FREQ 25000 /*!< Unit: kHz. Output 25MHz to SD \hideinitializer */
  139. #define SDHC_FREQ 50000 /*!< Unit: kHz. Output 50MHz to SDH \hideinitializer */
  140. #define MMC_FREQ 20000 /*!< Unit: kHz. Output 20MHz to MMC \hideinitializer */
  141. #define EMMC_FREQ 26000 /*!< Unit: kHz. Output 26MHz to eMMC \hideinitializer */
  142. /*@}*/ /* end of group N9H30_FMI_EXPORTED_CONSTANTS */
  143. /** @addtogroup N9H30_FMI_EXPORTED_TYPEDEF FMI Exported Type Defines
  144. @{
  145. */
  146. /** \brief Structure type of Card information.
  147. */
  148. typedef struct eMMC_info_t
  149. {
  150. unsigned int CardType; /*!< SDHC, SD, or MMC */
  151. unsigned int RCA; /*!< relative card address */
  152. unsigned char IsCardInsert; /*!< card insert state */
  153. unsigned int totalSectorN; /*!< total sector number */
  154. unsigned int diskSize; /*!< disk size in Kbytes */
  155. int sectorSize; /*!< sector size in bytes */
  156. } EMMC_INFO_T;
  157. /*@}*/ /* end of group N9H30_FMI_EXPORTED_TYPEDEF */
  158. /// @cond HIDDEN_SYMBOLS
  159. extern EMMC_INFO_T eMMC;
  160. extern unsigned char volatile _fmi_eMMCDataReady;
  161. /// @endcond HIDDEN_SYMBOLS
  162. /** @addtogroup N9H30_FMI_EXPORTED_FUNCTIONS FMI Exported Functions
  163. @{
  164. */
  165. /**
  166. * @brief Enable specified interrupt.
  167. *
  168. * @param[in] u32IntMask Interrupt type mask:
  169. * \ref FMI_EMMCINTEN_BLKDIEN_Msk / \ref FMI_EMMCINTEN_CRCIEN_Msk /
  170. * \ref FMI_EMMCINTEN_RTOIEN_Msk / \ref FMI_EMMCINTEN_DITOIEN_Msk /
  171. *
  172. * @return None.
  173. * \hideinitializer
  174. */
  175. #define FMI_EMMC_ENABLE_INT(u32IntMask) (outpw(REG_FMI_EMMCINTEN, inpw(REG_FMI_EMMCINTEN)|(u32IntMask)))
  176. /**
  177. * @brief Disable specified interrupt.
  178. *
  179. * @param[in] u32IntMask Interrupt type mask:
  180. * \ref FMI_EMMCINTEN_BLKDIEN_Msk / \ref FMI_EMMCINTEN_CRCIEN_Msk /
  181. * \ref FMI_EMMCINTEN_RTOIEN_Msk / \ref FMI_EMMCINTEN_DITOIEN_Msk /
  182. *
  183. * @return None.
  184. * \hideinitializer
  185. */
  186. #define FMI_EMMC_DISABLE_INT(u32IntMask) (outpw(REG_FMI_EMMCINTEN, inpw(REG_FMI_EMMCINTEN) & ~(u32IntMask)))
  187. /**
  188. * @brief Get specified interrupt flag/status.
  189. *
  190. * @param[in] u32IntMask Interrupt type mask:
  191. * \ref FMI_EMMCINTSTS_BLKDIF_Msk / \ref FMI_EMMCINTSTS_CRCIF_Msk / \ref FMI_EMMCINTSTS_CRC7_Msk /
  192. * \ref FMI_EMMCINTSTS_CRC16_Msk / \ref FMI_EMMCINTSTS_CRCSTS_Msk / \ref FMI_EMMCINTSTS_DAT0STS_Msk /
  193. * \ref FMI_EMMCINTSTS_RTOIF_Msk / \ref FMI_EMMCINTSTS_DINTOIF_Msk /
  194. *
  195. * @return 0 = The specified interrupt is not happened.
  196. * 1 = The specified interrupt is happened.
  197. * \hideinitializer
  198. */
  199. #define FMI_EMMC_GET_INT_FLAG(u32IntMask) ((inpw(REG_FMI_EMMCINTSTS)&(u32IntMask))?1:0)
  200. /**
  201. * @brief Clear specified interrupt flag/status.
  202. *
  203. * @param[in] u32IntMask Interrupt type mask:
  204. * \ref FMI_EMMCINTSTS_BLKDIF_Msk / \ref FMI_EMMCINTSTS_CRCIF_Msk /
  205. * \ref FMI_EMMCINTSTS_RTOIF_Msk / \ref FMI_EMMCINTSTS_DINTOIF_Msk
  206. *
  207. * @return None.
  208. * \hideinitializer
  209. */
  210. #define FMI_EMMC_CLR_INT_FLAG(u32IntMask) (outpw(REG_FMI_EMMCINTSTS, u32IntMask))
  211. /**
  212. * @brief Check eMMC Card inserted or removed.
  213. *
  214. * @return 1: Card inserted.
  215. * 0: Card removed.
  216. * \hideinitializer
  217. */
  218. #define FMI_EMMC_IS_CARD_PRESENT() (eMMC.IsCardInsert)
  219. /**
  220. * @brief Get eMMC Card capacity.
  221. *
  222. * @return eMMC Card capacity. (unit: KByte)
  223. * \hideinitializer
  224. */
  225. #define FMI_EMMC_GET_CARD_CAPACITY() (eMMC.diskSize)
  226. void eMMC_Open(void);
  227. void eMMC_Probe(void);
  228. unsigned int eMMC_Read(unsigned char *pu8BufAddr, unsigned int u32StartSec, unsigned int u32SecCount);
  229. unsigned int eMMC_Write(unsigned char *pu8BufAddr, unsigned int u32StartSec, unsigned int u32SecCount);
  230. void FMI_SetReferenceClock(unsigned int u32Clock);
  231. void eMMC_Open_Disk(void);
  232. void eMMC_Close_Disk(void);
  233. /*@}*/ /* end of group N9H30_FMI_EXPORTED_FUNCTIONS */
  234. /*@}*/ /* end of group N9H30_FMI_Driver */
  235. /*@}*/ /* end of group N9H30_Device_Driver */
  236. #endif //end of __NU_FMI_H__
  237. /*** (C) COPYRIGHT 2018 Nuvoton Technology Corp. ***/