otg.h 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260
  1. /**************************************************************************//**
  2. * @file otg.h
  3. * @version V0.10
  4. * $Revision: 3 $
  5. * $Date: 15/08/11 10:26a $
  6. * @brief M451 Series OTG Driver Header File
  7. *
  8. * @note
  9. * Copyright (C) 2014~2015 Nuvoton Technology Corp. All rights reserved.
  10. *
  11. ******************************************************************************/
  12. #ifndef __OTG_H__
  13. #define __OTG_H__
  14. /*---------------------------------------------------------------------------------------------------------*/
  15. /* Include related headers */
  16. /*---------------------------------------------------------------------------------------------------------*/
  17. #include "M451Series.h"
  18. #ifdef __cplusplus
  19. extern "C"
  20. {
  21. #endif
  22. /** @addtogroup Standard_Driver Standard Driver
  23. @{
  24. */
  25. /** @addtogroup OTG_Driver OTG Driver
  26. @{
  27. */
  28. /** @addtogroup OTG_EXPORTED_CONSTANTS OTG Exported Constants
  29. @{
  30. */
  31. /*---------------------------------------------------------------------------------------------------------*/
  32. /* OTG constant definitions */
  33. /*---------------------------------------------------------------------------------------------------------*/
  34. #define OTG_VBUS_EN_ACTIVE_HIGH (0UL) /*!< USB VBUS power switch enable signal is active high. */
  35. #define OTG_VBUS_EN_ACTIVE_LOW (1UL) /*!< USB VBUS power switch enable signal is active low. */
  36. #define OTG_VBUS_ST_VALID_HIGH (0UL) /*!< USB VBUS power switch valid status is high. */
  37. #define OTG_VBUS_ST_VALID_LOW (1UL) /*!< USB VBUS power switch valid status is low. */
  38. /*@}*/ /* end of group OTG_EXPORTED_CONSTANTS */
  39. /** @addtogroup OTG_EXPORTED_FUNCTIONS OTG Exported Functions
  40. @{
  41. */
  42. /*---------------------------------------------------------------------------------------------------------*/
  43. /* Define Macros and functions */
  44. /*---------------------------------------------------------------------------------------------------------*/
  45. /**
  46. * @brief This macro is used to enable OTG function
  47. * @param None
  48. * @return None
  49. * @details This macro will set OTGEN bit of OTG_CTL register to enable OTG function.
  50. */
  51. #define OTG_ENABLE() (OTG->CTL |= OTG_CTL_OTGEN_Msk)
  52. /**
  53. * @brief This macro is used to disable OTG function
  54. * @param None
  55. * @return None
  56. * @details This macro will clear OTGEN bit of OTG_CTL register to disable OTG function.
  57. */
  58. #define OTG_DISABLE() (OTG->CTL &= ~OTG_CTL_OTGEN_Msk)
  59. /**
  60. * @brief This macro is used to enable USB PHY
  61. * @param None
  62. * @return None
  63. * @details When the USB role is selected as OTG device, use this macro to enable USB PHY.
  64. * This macro will set OTGPHYEN bit of OTG_PHYCTL register to enable USB PHY.
  65. */
  66. #define OTG_ENABLE_PHY() (OTG->PHYCTL |= OTG_PHYCTL_OTGPHYEN_Msk)
  67. /**
  68. * @brief This macro is used to disable USB PHY
  69. * @param None
  70. * @return None
  71. * @details This macro will clear OTGPHYEN bit of OTG_PHYCTL register to disable USB PHY.
  72. */
  73. #define OTG_DISABLE_PHY() (OTG->PHYCTL &= ~OTG_PHYCTL_OTGPHYEN_Msk)
  74. /**
  75. * @brief This macro is used to enable ID detection function
  76. * @param None
  77. * @return None
  78. * @details This macro will set IDDETEN bit of OTG_PHYCTL register to enable ID detection function.
  79. */
  80. #define OTG_ENABLE_ID_DETECT() (OTG->PHYCTL |= OTG_PHYCTL_IDDETEN_Msk)
  81. /**
  82. * @brief This macro is used to disable ID detection function
  83. * @param None
  84. * @return None
  85. * @details This macro will clear IDDETEN bit of OTG_PHYCTL register to disable ID detection function.
  86. */
  87. #define OTG_DISABLE_ID_DETECT() (OTG->PHYCTL &= ~OTG_PHYCTL_IDDETEN_Msk)
  88. /**
  89. * @brief This macro is used to enable OTG wake-up function
  90. * @param None
  91. * @return None
  92. * @details This macro will set WKEN bit of OTG_CTL register to enable OTG wake-up function.
  93. */
  94. #define OTG_ENABLE_WAKEUP() (OTG->CTL |= OTG_CTL_WKEN_Msk)
  95. /**
  96. * @brief This macro is used to disable OTG wake-up function
  97. * @param None
  98. * @return None
  99. * @details This macro will clear WKEN bit of OTG_CTL register to disable OTG wake-up function.
  100. */
  101. #define OTG_DISABLE_WAKEUP() (OTG->CTL &= ~OTG_CTL_WKEN_Msk)
  102. /**
  103. * @brief This macro is used to set the polarity of USB_VBUS_EN pin
  104. * @param[in] u32Pol The polarity selection. Valid values are listed below.
  105. * - \ref OTG_VBUS_EN_ACTIVE_HIGH
  106. * - \ref OTG_VBUS_EN_ACTIVE_LOW
  107. * @return None
  108. * @details This macro is used to set the polarity of external USB VBUS power switch enable signal.
  109. */
  110. #define OTG_SET_VBUS_EN_POL(u32Pol) (OTG->PHYCTL = (OTG->PHYCTL & (~OTG_PHYCTL_VBENPOL_Msk)) | ((u32Pol)<<OTG_PHYCTL_VBENPOL_Pos))
  111. /**
  112. * @brief This macro is used to set the polarity of USB_VBUS_ST pin
  113. * @param[in] u32Pol The polarity selection. Valid values are listed below.
  114. * - \ref OTG_VBUS_ST_VALID_HIGH
  115. * - \ref OTG_VBUS_ST_VALID_LOW
  116. * @return None
  117. * @details This macro is used to set the polarity of external USB VBUS power switch status signal.
  118. */
  119. #define OTG_SET_VBUS_STS_POL(u32Pol) (OTG->PHYCTL = (OTG->PHYCTL & (~OTG_PHYCTL_VBSTSPOL_Msk)) | ((u32Pol)<<OTG_PHYCTL_VBSTSPOL_Pos))
  120. /**
  121. * @brief This macro is used to enable OTG related interrupts
  122. * @param[in] u32Mask The combination of interrupt source. Each bit corresponds to a interrupt source. Valid values are listed below.
  123. * - \ref OTG_INTEN_ROLECHGIEN_Msk
  124. * - \ref OTG_INTEN_VBEIEN_Msk
  125. * - \ref OTG_INTEN_SRPFIEN_Msk
  126. * - \ref OTG_INTEN_HNPFIEN_Msk
  127. * - \ref OTG_INTEN_GOIDLEIEN_Msk
  128. * - \ref OTG_INTEN_IDCHGIEN_Msk
  129. * - \ref OTG_INTEN_PDEVIEN_Msk
  130. * - \ref OTG_INTEN_HOSTIEN_Msk
  131. * - \ref OTG_INTEN_BVLDCHGIEN_Msk
  132. * - \ref OTG_INTEN_AVLDCHGIEN_Msk
  133. * - \ref OTG_INTEN_VBCHGIEN_Msk
  134. * - \ref OTG_INTEN_SECHGIEN_Msk
  135. * - \ref OTG_INTEN_SRPDETIEN_Msk
  136. * @return None
  137. * @details This macro will enable OTG related interrupts specified by u32Mask parameter.
  138. */
  139. #define OTG_ENABLE_INT(u32Mask) (OTG->INTEN |= (u32Mask))
  140. /**
  141. * @brief This macro is used to disable OTG related interrupts
  142. * @param[in] u32Mask The combination of interrupt source. Each bit corresponds to a interrupt source. Valid values are listed below.
  143. * - \ref OTG_INTEN_ROLECHGIEN_Msk
  144. * - \ref OTG_INTEN_VBEIEN_Msk
  145. * - \ref OTG_INTEN_SRPFIEN_Msk
  146. * - \ref OTG_INTEN_HNPFIEN_Msk
  147. * - \ref OTG_INTEN_GOIDLEIEN_Msk
  148. * - \ref OTG_INTEN_IDCHGIEN_Msk
  149. * - \ref OTG_INTEN_PDEVIEN_Msk
  150. * - \ref OTG_INTEN_HOSTIEN_Msk
  151. * - \ref OTG_INTEN_BVLDCHGIEN_Msk
  152. * - \ref OTG_INTEN_AVLDCHGIEN_Msk
  153. * - \ref OTG_INTEN_VBCHGIEN_Msk
  154. * - \ref OTG_INTEN_SECHGIEN_Msk
  155. * - \ref OTG_INTEN_SRPDETIEN_Msk
  156. * @return None
  157. * @details This macro will disable OTG related interrupts specified by u32Mask parameter.
  158. */
  159. #define OTG_DISABLE_INT(u32Mask) (OTG->INTEN &= ~(u32Mask))
  160. /**
  161. * @brief This macro is used to get OTG related interrupt flags
  162. * @param[in] u32Mask The combination of interrupt source. Each bit corresponds to a interrupt source. Valid values are listed below.
  163. * - \ref OTG_INTSTS_ROLECHGIF_Msk
  164. * - \ref OTG_INTSTS_VBEIF_Msk
  165. * - \ref OTG_INTSTS_SRPFIF_Msk
  166. * - \ref OTG_INTSTS_HNPFIF_Msk
  167. * - \ref OTG_INTSTS_GOIDLEIF_Msk
  168. * - \ref OTG_INTSTS_IDCHGIF_Msk
  169. * - \ref OTG_INTSTS_PDEVIF_Msk
  170. * - \ref OTG_INTSTS_HOSTIF_Msk
  171. * - \ref OTG_INTSTS_BVLDCHGIF_Msk
  172. * - \ref OTG_INTSTS_AVLDCHGIF_Msk
  173. * - \ref OTG_INTSTS_VBCHGIF_Msk
  174. * - \ref OTG_INTSTS_SECHGIF_Msk
  175. * - \ref OTG_INTSTS_SRPDETIF_Msk
  176. * @return Interrupt flags of selected sources.
  177. * @details This macro will return OTG related interrupt flags specified by u32Mask parameter.
  178. */
  179. #define OTG_GET_INT_FLAG(u32Mask) (OTG->INTSTS & (u32Mask))
  180. /**
  181. * @brief This macro is used to clear OTG related interrupt flags
  182. * @param[in] u32Mask The combination of interrupt source. Each bit corresponds to a interrupt source. Valid values are listed below.
  183. * - \ref OTG_INTSTS_ROLECHGIF_Msk
  184. * - \ref OTG_INTSTS_VBEIF_Msk
  185. * - \ref OTG_INTSTS_SRPFIF_Msk
  186. * - \ref OTG_INTSTS_HNPFIF_Msk
  187. * - \ref OTG_INTSTS_GOIDLEIF_Msk
  188. * - \ref OTG_INTSTS_IDCHGIF_Msk
  189. * - \ref OTG_INTSTS_PDEVIF_Msk
  190. * - \ref OTG_INTSTS_HOSTIF_Msk
  191. * - \ref OTG_INTSTS_BVLDCHGIF_Msk
  192. * - \ref OTG_INTSTS_AVLDCHGIF_Msk
  193. * - \ref OTG_INTSTS_VBCHGIF_Msk
  194. * - \ref OTG_INTSTS_SECHGIF_Msk
  195. * - \ref OTG_INTSTS_SRPDETIF_Msk
  196. * @return None
  197. * @details This macro will clear OTG related interrupt flags specified by u32Mask parameter.
  198. */
  199. #define OTG_CLR_INT_FLAG(u32Mask) (OTG->INTSTS = (u32Mask))
  200. /**
  201. * @brief This macro is used to get OTG related status
  202. * @param[in] u32Mask The combination of user specified source. Valid values are listed below.
  203. * - \ref OTG_STATUS_OVERCUR_Msk
  204. * - \ref OTG_STATUS_IDSTS_Msk
  205. * - \ref OTG_STATUS_SESSEND_Msk
  206. * - \ref OTG_STATUS_BVLD_Msk
  207. * - \ref OTG_STATUS_AVLD_Msk
  208. * - \ref OTG_STATUS_VBUSVLD_Msk
  209. * @return The user specified status.
  210. * @details This macro will return OTG related status specified by u32Mask parameter.
  211. */
  212. #define OTG_GET_STATUS(u32Mask) (OTG->STATUS & (u32Mask))
  213. /*@}*/ /* end of group OTG_EXPORTED_FUNCTIONS */
  214. /*@}*/ /* end of group OTG_Driver */
  215. /*@}*/ /* end of group Standard_Driver */
  216. #ifdef __cplusplus
  217. }
  218. #endif
  219. #endif //__OTG_H__
  220. /*** (C) COPYRIGHT 2014~2015 Nuvoton Technology Corp. ***/