--- /dev/null
+/**************************************************************************//**\r
+ * @file sdh.h\r
+ * @version V1.00\r
+ * @brief M2351 SDH driver header file\r
+ *\r
+ * @copyright (C) 2017 Nuvoton Technology Corp. All rights reserved.\r
+*****************************************************************************/\r
+#ifndef __SDH_H__\r
+#define __SDH_H__\r
+\r
+#ifdef __cplusplus\r
+extern "C"\r
+{\r
+#endif\r
+\r
+#include <stdio.h>\r
+\r
+/** @addtogroup Standard_Driver Standard Driver\r
+ @{\r
+*/\r
+\r
+/** @addtogroup SDH_Driver SDH Driver\r
+ @{\r
+*/\r
+\r
+\r
+/** @addtogroup SDH_EXPORTED_CONSTANTS SDH Exported Constants\r
+ @{\r
+*/\r
+\r
+#define SDH_ERR_ID 0xFFFF0100UL /*!< SDH error ID \hideinitializer */\r
+\r
+#define SDH_TIMEOUT (SDH_ERR_ID|0x01UL) /*!< Timeout \hideinitializer */\r
+#define SDH_NO_MEMORY (SDH_ERR_ID|0x02UL) /*!< OOM \hideinitializer */\r
+\r
+/* -- function return value */\r
+#define Successful 0U /*!< Success \hideinitializer */\r
+#define Fail 1U /*!< Failed \hideinitializer */\r
+\r
+/* --- define type of SD card or MMC */\r
+#define SDH_TYPE_UNKNOWN 0UL /*!< Unknown card type \hideinitializer */\r
+#define SDH_TYPE_SD_HIGH 1UL /*!< SDHC card \hideinitializer */\r
+#define SDH_TYPE_SD_LOW 2UL /*!< SD card \hideinitializer */\r
+#define SDH_TYPE_MMC 3UL /*!< MMC card \hideinitializer */\r
+#define SDH_TYPE_EMMC 4UL /*!< eMMC card \hideinitializer */\r
+\r
+/* SD error */\r
+#define SDH_NO_SD_CARD (SDH_ERR_ID|0x10UL) /*!< Card removed \hideinitializer */\r
+#define SDH_ERR_DEVICE (SDH_ERR_ID|0x11UL) /*!< Device error \hideinitializer */\r
+#define SDH_INIT_TIMEOUT (SDH_ERR_ID|0x12UL) /*!< Card init timeout \hideinitializer */\r
+#define SDH_SELECT_ERROR (SDH_ERR_ID|0x13UL) /*!< Card select error \hideinitializer */\r
+#define SDH_WRITE_PROTECT (SDH_ERR_ID|0x14UL) /*!< Card write protect \hideinitializer */\r
+#define SDH_INIT_ERROR (SDH_ERR_ID|0x15UL) /*!< Card init error \hideinitializer */\r
+#define SDH_CRC7_ERROR (SDH_ERR_ID|0x16UL) /*!< CRC 7 error \hideinitializer */\r
+#define SDH_CRC16_ERROR (SDH_ERR_ID|0x17UL) /*!< CRC 16 error \hideinitializer */\r
+#define SDH_CRC_ERROR (SDH_ERR_ID|0x18UL) /*!< CRC error \hideinitializer */\r
+#define SDH_CMD8_ERROR (SDH_ERR_ID|0x19UL) /*!< Command 8 error \hideinitializer */\r
+\r
+#define MMC_FREQ 20000UL /*!< output 20MHz to MMC \hideinitializer */\r
+#define SD_FREQ 25000UL /*!< output 25MHz to SD \hideinitializer */\r
+#define SDHC_FREQ 50000UL /*!< output 50MHz to SDH \hideinitializer */\r
+\r
+#define CardDetect_From_GPIO (1UL << 8) /*!< Card detection pin is GPIO \hideinitializer */\r
+#define CardDetect_From_DAT3 (1UL << 9) /*!< Card detection pin is DAT3 \hideinitializer */\r
+\r
+/*@}*/ /* end of group SDH_EXPORTED_CONSTANTS */\r
+\r
+/** @addtogroup SDH_EXPORTED_TYPEDEF SDH Exported Type Defines\r
+ @{\r
+*/\r
+typedef struct SDH_info_t\r
+{\r
+ unsigned int CardType; /*!< SDHC, SD, or MMC */\r
+ unsigned int RCA; /*!< Relative card address */\r
+ unsigned char IsCardInsert; /*!< Card insert state */\r
+ unsigned int totalSectorN; /*!< Total sector number */\r
+ unsigned int diskSize; /*!< Disk size in K bytes */\r
+ int sectorSize; /*!< Sector size in bytes */\r
+} SDH_INFO_T; /*!< Structure holds SD card info */\r
+\r
+/*@}*/ /* end of group SDH_EXPORTED_TYPEDEF */\r
+\r
+/** @cond HIDDEN_SYMBOLS */\r
+extern SDH_INFO_T SD0;\r
+/** @endcond HIDDEN_SYMBOLS */\r
+\r
+/** @addtogroup SDH_EXPORTED_FUNCTIONS SDH Exported Functions\r
+ @{\r
+*/\r
+\r
+/**\r
+ * @brief Enable specified interrupt.\r
+ *\r
+ * @param[in] sdh The pointer of the specified SDH module.\r
+ * @param[in] u32IntMask Interrupt type mask:\r
+ * \ref SDH_INTEN_BLKDIEN_Msk / \ref SDH_INTEN_CRCIEN_Msk / \ref SDH_INTEN_CDIEN_Msk /\r
+ * \ref SDH_INTEN_CDSRC_Msk / \ref SDH_INTEN_RTOIEN_Msk / \ref SDH_INTEN_DITOIEN_Msk /\r
+ * \ref SDH_INTEN_WKIEN_Msk\r
+ *\r
+ * @return None.\r
+ * \hideinitializer\r
+ */\r
+#define SDH_ENABLE_INT(sdh, u32IntMask) ((sdh)->INTEN |= (u32IntMask))\r
+\r
+/**\r
+ * @brief Disable specified interrupt.\r
+ *\r
+ * @param[in] sdh The pointer of the specified SDH module.\r
+ * @param[in] u32IntMask Interrupt type mask:\r
+ * \ref SDH_INTEN_BLKDIEN_Msk / \ref SDH_INTEN_CRCIEN_Msk / \ref SDH_INTEN_CDIEN_Msk /\r
+ * \ref SDH_INTEN_RTOIEN_Msk / \ref SDH_INTEN_DITOIEN_Msk / \ref SDH_INTEN_WKIEN_Msk / \ref SDH_INTEN_CDSRC_Msk /\r
+ *\r
+ * @return None.\r
+ * \hideinitializer\r
+ */\r
+#define SDH_DISABLE_INT(sdh, u32IntMask) ((sdh)->INTEN &= ~(u32IntMask))\r
+\r
+/**\r
+ * @brief Get specified interrupt flag/status.\r
+ *\r
+ * @param[in] sdh The pointer of the specified SDH module.\r
+ * @param[in] u32IntMask Interrupt type mask:\r
+ * \ref SDH_INTSTS_BLKDIF_Msk / \ref SDH_INTSTS_CRCIF_Msk / \ref SDH_INTSTS_CRC7_Msk /\r
+ * \ref SDH_INTSTS_CRC16_Msk / \ref SDH_INTSTS_CRCSTS_Msk / \ref SDH_INTSTS_DAT0STS_Msk /\r
+ * \ref SDH_INTSTS_CDIF_Msk / \ref SDH_INTSTS_RTOIF_Msk /\r
+ * \ref SDH_INTSTS_DITOIF_Msk / \ref SDH_INTSTS_CDSTS_Msk /\r
+ * \ref SDH_INTSTS_DAT1STS_Msk\r
+ *\r
+ *\r
+ * @return 0 = The specified interrupt is not happened.\r
+ * 1 = The specified interrupt is happened.\r
+ * \hideinitializer\r
+ */\r
+#define SDH_GET_INT_FLAG(sdh, u32IntMask) (((sdh)->INTSTS & (u32IntMask))?1:0)\r
+\r
+\r
+/**\r
+ * @brief Clear specified interrupt flag/status.\r
+ *\r
+ * @param[in] sdh The pointer of the specified SDH module.\r
+ * @param[in] u32IntMask Interrupt type mask:\r
+ * \ref SDH_INTSTS_BLKDIF_Msk / \ref SDH_INTSTS_CRCIF_Msk / \ref SDH_INTSTS_CDIF_Msk /\r
+ * \ref SDH_INTSTS_RTOIF_Msk / \ref SDH_INTSTS_DITOIF_Msk\r
+ *\r
+ *\r
+ * @return None.\r
+ * \hideinitializer\r
+ */\r
+#define SDH_CLR_INT_FLAG(sdh, u32IntMask) ((sdh)->INTSTS = (u32IntMask))\r
+\r
+\r
+/**\r
+ * @brief Check SD Card inserted or removed.\r
+ *\r
+ * @param[in] sdh The pointer of the specified SDH module.\r
+ *\r
+ * @return 1: Card inserted.\r
+ * 0: Card removed.\r
+ * \hideinitializer\r
+ */\r
+#define SDH_IS_CARD_PRESENT(sdh) ((((sdh) == SDH0)||((sdh) == SDH0_NS))? SD0.IsCardInsert : 0)\r
+\r
+/**\r
+ * @brief Get SD Card capacity.\r
+ *\r
+ * @param[in] sdh The pointer of the specified SDH module.\r
+ *\r
+ * @return SD Card capacity. (unit: KByte)\r
+ * \hideinitializer\r
+ */\r
+#define SDH_GET_CARD_CAPACITY(sdh) ((((sdh) == SDH0)||((sdh) == SDH0_NS))? SD0.diskSize : 0)\r
+\r
+\r
+void SDH_Open(SDH_T *sdh, uint32_t u32CardDetSrc);\r
+uint32_t SDH_Probe(SDH_T *sdh);\r
+uint32_t SDH_Read(SDH_T *sdh, uint8_t *pu8BufAddr, uint32_t u32StartSec, uint32_t u32SecCount);\r
+uint32_t SDH_Write(SDH_T *sdh, uint8_t *pu8BufAddr, uint32_t u32StartSec, uint32_t u32SecCount);\r
+\r
+uint32_t SDH_CardDetection(SDH_T *sdh);\r
+void SDH_Open_Disk(SDH_T *sdh, uint32_t u32CardDetSrc);\r
+void SDH_Close_Disk(SDH_T *sdh);\r
+\r
+/*@}*/ /* end of group SDH_EXPORTED_FUNCTIONS */\r
+\r
+/*@}*/ /* end of group SDH_Driver */\r
+\r
+/*@}*/ /* end of group Standard_Driver */\r
+\r
+#ifdef __cplusplus\r
+}\r
+#endif\r
+\r
+#endif /* end of __SDH_H__ */\r
+/*** (C) COPYRIGHT 2017 Nuvoton Technology Corp. ***/\r