mbed library sources. Supersedes mbed-src.

Fork of mbed-dev by mbed official

Committer:
<>
Date:
Fri Oct 28 11:17:30 2016 +0100
Revision:
149:156823d33999
Parent:
targets/cmsis/TARGET_NUVOTON/TARGET_NUC472/StdDriver/nuc472_usbd.h@144:ef7eb2e8f9f7
This updates the lib to the mbed lib v128

NOTE: This release includes a restructuring of the file and directory locations and thus some
include paths in your code may need updating accordingly.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
<> 144:ef7eb2e8f9f7 1 /**************************************************************************//**
<> 144:ef7eb2e8f9f7 2 * @file usbd.h
<> 144:ef7eb2e8f9f7 3 * @version V1.00
<> 144:ef7eb2e8f9f7 4 * $Revision: 21 $
<> 144:ef7eb2e8f9f7 5 * $Date: 14/10/06 1:29p $
<> 144:ef7eb2e8f9f7 6 * @brief NUC472/NUC442 USBD driver header file
<> 144:ef7eb2e8f9f7 7 *
<> 144:ef7eb2e8f9f7 8 * @note
<> 144:ef7eb2e8f9f7 9 * Copyright (C) 2014 Nuvoton Technology Corp. All rights reserved.
<> 144:ef7eb2e8f9f7 10 *****************************************************************************/
<> 144:ef7eb2e8f9f7 11 #ifndef __USBD_H__
<> 144:ef7eb2e8f9f7 12 #define __USBD_H__
<> 144:ef7eb2e8f9f7 13
<> 144:ef7eb2e8f9f7 14 #ifdef __cplusplus
<> 144:ef7eb2e8f9f7 15 extern "C"
<> 144:ef7eb2e8f9f7 16 {
<> 144:ef7eb2e8f9f7 17 #endif
<> 144:ef7eb2e8f9f7 18
<> 144:ef7eb2e8f9f7 19
<> 144:ef7eb2e8f9f7 20 /** @addtogroup NUC472_442_Device_Driver NUC472/NUC442 Device Driver
<> 144:ef7eb2e8f9f7 21 @{
<> 144:ef7eb2e8f9f7 22 */
<> 144:ef7eb2e8f9f7 23
<> 144:ef7eb2e8f9f7 24 /** @addtogroup NUC472_442_USBD_Driver USBD Driver
<> 144:ef7eb2e8f9f7 25 @{
<> 144:ef7eb2e8f9f7 26 */
<> 144:ef7eb2e8f9f7 27
<> 144:ef7eb2e8f9f7 28 /** @addtogroup NUC472_442_USBD_EXPORTED_CONSTANTS USBD Exported Constants
<> 144:ef7eb2e8f9f7 29 @{
<> 144:ef7eb2e8f9f7 30 */
<> 144:ef7eb2e8f9f7 31 /// @cond HIDDEN_SYMBOLS
<> 144:ef7eb2e8f9f7 32 #define USBD_MAX_EP 12
<> 144:ef7eb2e8f9f7 33
<> 144:ef7eb2e8f9f7 34 #define Maximum(a,b) (a)>(b) ? (a) : (b)
<> 144:ef7eb2e8f9f7 35 #define Minimum(a,b) (a)<(b) ? (a) : (b)
<> 144:ef7eb2e8f9f7 36
<> 144:ef7eb2e8f9f7 37
<> 144:ef7eb2e8f9f7 38 #define CEP 0xff /*!< Control Endpoint \hideinitializer */
<> 144:ef7eb2e8f9f7 39 #define EPA 0 /*!< Endpoint A \hideinitializer */
<> 144:ef7eb2e8f9f7 40 #define EPB 1 /*!< Endpoint B \hideinitializer */
<> 144:ef7eb2e8f9f7 41 #define EPC 2 /*!< Endpoint C \hideinitializer */
<> 144:ef7eb2e8f9f7 42 #define EPD 3 /*!< Endpoint D \hideinitializer */
<> 144:ef7eb2e8f9f7 43 #define EPE 4 /*!< Endpoint E \hideinitializer */
<> 144:ef7eb2e8f9f7 44 #define EPF 5 /*!< Endpoint F \hideinitializer */
<> 144:ef7eb2e8f9f7 45 #define EPG 6 /*!< Endpoint G \hideinitializer */
<> 144:ef7eb2e8f9f7 46 #define EPH 7 /*!< Endpoint H \hideinitializer */
<> 144:ef7eb2e8f9f7 47 #define EPI 8 /*!< Endpoint I \hideinitializer */
<> 144:ef7eb2e8f9f7 48 #define EPJ 9 /*!< Endpoint J \hideinitializer */
<> 144:ef7eb2e8f9f7 49 #define EPK 10 /*!< Endpoint K \hideinitializer */
<> 144:ef7eb2e8f9f7 50 #define EPL 11 /*!< Endpoint L \hideinitializer */
<> 144:ef7eb2e8f9f7 51
<> 144:ef7eb2e8f9f7 52 /* USB Request Type */
<> 144:ef7eb2e8f9f7 53 #define REQ_STANDARD 0x00
<> 144:ef7eb2e8f9f7 54 #define REQ_CLASS 0x20
<> 144:ef7eb2e8f9f7 55 #define REQ_VENDOR 0x40
<> 144:ef7eb2e8f9f7 56
<> 144:ef7eb2e8f9f7 57 /* USB Standard Request */
<> 144:ef7eb2e8f9f7 58 #define GET_STATUS 0x00
<> 144:ef7eb2e8f9f7 59 #define CLEAR_FEATURE 0x01
<> 144:ef7eb2e8f9f7 60 #define SET_FEATURE 0x03
<> 144:ef7eb2e8f9f7 61 #define SET_ADDRESS 0x05
<> 144:ef7eb2e8f9f7 62 #define GET_DESCRIPTOR 0x06
<> 144:ef7eb2e8f9f7 63 #define SET_DESCRIPTOR 0x07
<> 144:ef7eb2e8f9f7 64 #define GET_CONFIGURATION 0x08
<> 144:ef7eb2e8f9f7 65 #define SET_CONFIGURATION 0x09
<> 144:ef7eb2e8f9f7 66 #define GET_INTERFACE 0x0A
<> 144:ef7eb2e8f9f7 67 #define SET_INTERFACE 0x0B
<> 144:ef7eb2e8f9f7 68 #define SYNC_FRAME 0x0C
<> 144:ef7eb2e8f9f7 69
<> 144:ef7eb2e8f9f7 70 /* USB Descriptor Type */
<> 144:ef7eb2e8f9f7 71 #define DESC_DEVICE 0x01
<> 144:ef7eb2e8f9f7 72 #define DESC_CONFIG 0x02
<> 144:ef7eb2e8f9f7 73 #define DESC_STRING 0x03
<> 144:ef7eb2e8f9f7 74 #define DESC_INTERFACE 0x04
<> 144:ef7eb2e8f9f7 75 #define DESC_ENDPOINT 0x05
<> 144:ef7eb2e8f9f7 76 #define DESC_QUALIFIER 0x06
<> 144:ef7eb2e8f9f7 77 #define DESC_OTHERSPEED 0x07
<> 144:ef7eb2e8f9f7 78 #define DESC_IFPOWER 0x08
<> 144:ef7eb2e8f9f7 79 #define DESC_OTG 0x09
<> 144:ef7eb2e8f9f7 80
<> 144:ef7eb2e8f9f7 81 /* USB HID Descriptor Type */
<> 144:ef7eb2e8f9f7 82 #define DESC_HID 0x21
<> 144:ef7eb2e8f9f7 83 #define DESC_HID_RPT 0x22
<> 144:ef7eb2e8f9f7 84
<> 144:ef7eb2e8f9f7 85 /* USB Descriptor Length */
<> 144:ef7eb2e8f9f7 86 #define LEN_DEVICE 18
<> 144:ef7eb2e8f9f7 87 #define LEN_QUALIFIER 10
<> 144:ef7eb2e8f9f7 88 #define LEN_CONFIG 9
<> 144:ef7eb2e8f9f7 89 #define LEN_INTERFACE 9
<> 144:ef7eb2e8f9f7 90 #define LEN_ENDPOINT 7
<> 144:ef7eb2e8f9f7 91 #define LEN_OTG 5
<> 144:ef7eb2e8f9f7 92 #define LEN_HID 9
<> 144:ef7eb2e8f9f7 93
<> 144:ef7eb2e8f9f7 94 /* USB Endpoint Type */
<> 144:ef7eb2e8f9f7 95 #define EP_ISO 0x01
<> 144:ef7eb2e8f9f7 96 #define EP_BULK 0x02
<> 144:ef7eb2e8f9f7 97 #define EP_INT 0x03
<> 144:ef7eb2e8f9f7 98
<> 144:ef7eb2e8f9f7 99 #define EP_INPUT 0x80
<> 144:ef7eb2e8f9f7 100 #define EP_OUTPUT 0x00
<> 144:ef7eb2e8f9f7 101
<> 144:ef7eb2e8f9f7 102 /* USB Feature Selector */
<> 144:ef7eb2e8f9f7 103 #define FEATURE_DEVICE_REMOTE_WAKEUP 0x01
<> 144:ef7eb2e8f9f7 104 #define FEATURE_ENDPOINT_HALT 0x00
<> 144:ef7eb2e8f9f7 105 /// @endcond HIDDEN_SYMBOLS
<> 144:ef7eb2e8f9f7 106 /********************* Bit definition of CEPCTL register **********************/
<> 144:ef7eb2e8f9f7 107 #define USB_CEPCTL_NAKCLR ((uint32_t)0x00000000) /*!<NAK clear \hideinitializer */
<> 144:ef7eb2e8f9f7 108 #define USB_CEPCTL_STALL ((uint32_t)0x00000002) /*!<Stall \hideinitializer */
<> 144:ef7eb2e8f9f7 109 #define USB_CEPCTL_ZEROLEN ((uint32_t)0x00000004) /*!<Zero length packet \hideinitializer */
<> 144:ef7eb2e8f9f7 110 #define USB_CEPCTL_FLUSH ((uint32_t)0x00000008) /*!<CEP flush \hideinitializer */
<> 144:ef7eb2e8f9f7 111
<> 144:ef7eb2e8f9f7 112 /********************* Bit definition of EPxRSPCTL register **********************/
<> 144:ef7eb2e8f9f7 113 #define USB_EP_RSPCTL_FLUSH ((uint32_t)0x00000001) /*!<Buffer Flush \hideinitializer */
<> 144:ef7eb2e8f9f7 114 #define USB_EP_RSPCTL_MODE_AUTO ((uint32_t)0x00000000) /*!<Auto-Validate Mode \hideinitializer */
<> 144:ef7eb2e8f9f7 115 #define USB_EP_RSPCTL_MODE_MANUAL ((uint32_t)0x00000002) /*!<Manual-Validate Mode \hideinitializer */
<> 144:ef7eb2e8f9f7 116 #define USB_EP_RSPCTL_MODE_FLY ((uint32_t)0x00000004) /*!<Fly Mode \hideinitializer */
<> 144:ef7eb2e8f9f7 117 #define USB_EP_RSPCTL_MODE_MASK ((uint32_t)0x00000006) /*!<Mode Mask \hideinitializer */
<> 144:ef7eb2e8f9f7 118 #define USB_EP_RSPCTL_TOGGLE ((uint32_t)0x00000008) /*!<Clear Toggle bit \hideinitializer */
<> 144:ef7eb2e8f9f7 119 #define USB_EP_RSPCTL_HALT ((uint32_t)0x00000010) /*!<Endpoint halt \hideinitializer */
<> 144:ef7eb2e8f9f7 120 #define USB_EP_RSPCTL_ZEROLEN ((uint32_t)0x00000020) /*!<Zero length packet IN \hideinitializer */
<> 144:ef7eb2e8f9f7 121 #define USB_EP_RSPCTL_SHORTTXEN ((uint32_t)0x00000040) /*!<Packet end \hideinitializer */
<> 144:ef7eb2e8f9f7 122 #define USB_EP_RSPCTL_DISBUF ((uint32_t)0x00000080) /*!<Disable buffer \hideinitializer */
<> 144:ef7eb2e8f9f7 123
<> 144:ef7eb2e8f9f7 124 /********************* Bit definition of EPxCFG register **********************/
<> 144:ef7eb2e8f9f7 125 #define USB_EP_CFG_VALID ((uint32_t)0x00000001) /*!<Endpoint Valid \hideinitializer */
<> 144:ef7eb2e8f9f7 126 #define USB_EP_CFG_TYPE_BULK ((uint32_t)0x00000002) /*!<Endpoint type - bulk \hideinitializer */
<> 144:ef7eb2e8f9f7 127 #define USB_EP_CFG_TYPE_INT ((uint32_t)0x00000004) /*!<Endpoint type - interrupt \hideinitializer */
<> 144:ef7eb2e8f9f7 128 #define USB_EP_CFG_TYPE_ISO ((uint32_t)0x00000006) /*!<Endpoint type - isochronous \hideinitializer */
<> 144:ef7eb2e8f9f7 129 #define USB_EP_CFG_TYPE_MASK ((uint32_t)0x00000006) /*!<Endpoint type mask \hideinitializer */
<> 144:ef7eb2e8f9f7 130 #define USB_EP_CFG_DIR_OUT ((uint32_t)0x00000000) /*!<OUT endpoint \hideinitializer */
<> 144:ef7eb2e8f9f7 131 #define USB_EP_CFG_DIR_IN ((uint32_t)0x00000008) /*!<IN endpoint \hideinitializer */
<> 144:ef7eb2e8f9f7 132
<> 144:ef7eb2e8f9f7 133
<> 144:ef7eb2e8f9f7 134 /*@}*/ /* end of group NUC472_442_USBD_EXPORTED_CONSTANTS */
<> 144:ef7eb2e8f9f7 135
<> 144:ef7eb2e8f9f7 136 /** @addtogroup NUC472_442_USBD_EXPORTED_STRUCT USBD Exported Struct
<> 144:ef7eb2e8f9f7 137 @{
<> 144:ef7eb2e8f9f7 138 */
<> 144:ef7eb2e8f9f7 139
<> 144:ef7eb2e8f9f7 140
<> 144:ef7eb2e8f9f7 141 typedef struct USBD_CMD_STRUCT {
<> 144:ef7eb2e8f9f7 142 uint8_t bmRequestType;
<> 144:ef7eb2e8f9f7 143 uint8_t bRequest;
<> 144:ef7eb2e8f9f7 144 uint16_t wValue;
<> 144:ef7eb2e8f9f7 145 uint16_t wIndex;
<> 144:ef7eb2e8f9f7 146 uint16_t wLength;
<> 144:ef7eb2e8f9f7 147
<> 144:ef7eb2e8f9f7 148 } S_USBD_CMD_T; /*!<USB Setup Packet Structure */
<> 144:ef7eb2e8f9f7 149
<> 144:ef7eb2e8f9f7 150
<> 144:ef7eb2e8f9f7 151
<> 144:ef7eb2e8f9f7 152
<> 144:ef7eb2e8f9f7 153 typedef struct s_usbd_info {
<> 144:ef7eb2e8f9f7 154 uint8_t *gu8DevDesc;
<> 144:ef7eb2e8f9f7 155 uint8_t *gu8ConfigDesc;
<> 144:ef7eb2e8f9f7 156 uint8_t *gu8StrLangDesc;
<> 144:ef7eb2e8f9f7 157 uint8_t *gu8StrVendorDesc;
<> 144:ef7eb2e8f9f7 158 uint8_t *gu8StrProductDesc;
<> 144:ef7eb2e8f9f7 159 uint8_t *gu8QualDesc;
<> 144:ef7eb2e8f9f7 160 uint8_t *gu8OtherConfigDesc;
<> 144:ef7eb2e8f9f7 161 uint8_t *gu8HidReportDesc[3];
<> 144:ef7eb2e8f9f7 162 uint32_t gu32HidReportSize[3];
<> 144:ef7eb2e8f9f7 163
<> 144:ef7eb2e8f9f7 164 } S_USBD_INFO_T; /*!<USB Information Structure */
<> 144:ef7eb2e8f9f7 165
<> 144:ef7eb2e8f9f7 166
<> 144:ef7eb2e8f9f7 167 /*@}*/ /* end of group NUC472_442_USBD_EXPORTED_STRUCT */
<> 144:ef7eb2e8f9f7 168
<> 144:ef7eb2e8f9f7 169 /// @cond HIDDEN_SYMBOLS
<> 144:ef7eb2e8f9f7 170 extern uint32_t volatile g_usbd_DmaDone;
<> 144:ef7eb2e8f9f7 171 extern uint32_t g_usbd_UsbAddr;
<> 144:ef7eb2e8f9f7 172 extern uint32_t g_usbd_CtrlInSize;
<> 144:ef7eb2e8f9f7 173 extern uint32_t g_usbd_ShortPacket;
<> 144:ef7eb2e8f9f7 174 extern uint32_t g_usbd_CtrlZero;
<> 144:ef7eb2e8f9f7 175 extern uint8_t g_usbd_EpHalt[];
<> 144:ef7eb2e8f9f7 176 extern S_USBD_INFO_T gsInfo;
<> 144:ef7eb2e8f9f7 177 extern S_USBD_CMD_T gUsbCmd;
<> 144:ef7eb2e8f9f7 178 extern uint32_t g_usbd_Configured;
<> 144:ef7eb2e8f9f7 179 /// @endcond /* HIDDEN_SYMBOLS */
<> 144:ef7eb2e8f9f7 180
<> 144:ef7eb2e8f9f7 181 /** @addtogroup NUC472_442_USBD_EXPORTED_MACROS USBD Exported Macros
<> 144:ef7eb2e8f9f7 182 @{
<> 144:ef7eb2e8f9f7 183 */
<> 144:ef7eb2e8f9f7 184
<> 144:ef7eb2e8f9f7 185 #define USBD_ENABLE_USB() ((uint32_t)(USBD->PHYCTL |= (USBD_PHYCTL_PHYEN_Msk|USBD_PHYCTL_DPPUEN_Msk))) /*!<Enable USB \hideinitializer */
<> 144:ef7eb2e8f9f7 186 #define USBD_DISABLE_USB() ((uint32_t)(USBD->PHYCTL &= ~USBD_PHYCTL_DPPUEN_Msk)) /*!<Disable USB \hideinitializer */
<> 144:ef7eb2e8f9f7 187 #define USBD_ENABLE_PHY() ((uint32_t)(USBD->PHYCTL |= USBD_PHYCTL_PHYEN_Msk)) /*!<Enable PHY \hideinitializer */
<> 144:ef7eb2e8f9f7 188 #define USBD_DISABLE_PHY() ((uint32_t)(USBD->PHYCTL &= ~USBD_PHYCTL_PHYEN_Msk)) /*!<Disable PHY \hideinitializer */
<> 144:ef7eb2e8f9f7 189 #define USBD_SET_SE0() ((uint32_t)(USBD->PHYCTL &= ~USBD_PHYCTL_DPPUEN_Msk)) /*!<Enable SE0, Force USB PHY Transceiver to Drive SE0 \hideinitializer */
<> 144:ef7eb2e8f9f7 190 #define USBD_CLR_SE0() ((uint32_t)(USBD->PHYCTL |= USBD_PHYCTL_DPPUEN_Msk)) /*!<Disable SE0 \hideinitializer */
<> 144:ef7eb2e8f9f7 191 #define USBD_SET_ADDR(addr) (USBD->FADDR = (addr)) /*!<Set USB address \hideinitializer */
<> 144:ef7eb2e8f9f7 192 #define USBD_GET_ADDR() ((uint32_t)(USBD->FADDR)) /*!<Get USB address \hideinitializer */
<> 144:ef7eb2e8f9f7 193 #define USBD_ENABLE_USB_INT(intr) (USBD->GINTEN = (intr)) /*!<Enable USB Interrupt \hideinitializer */
<> 144:ef7eb2e8f9f7 194 #define USBD_ENABLE_BUS_INT(intr) (USBD->BUSINTEN = (intr)) /*!<Enable BUS Interrupt \hideinitializer */
<> 144:ef7eb2e8f9f7 195 #define USBD_GET_BUS_INT_FLAG() (USBD->BUSINTSTS) /*!<Clear Bus interrupt flag \hideinitializer */
<> 144:ef7eb2e8f9f7 196 #define USBD_CLR_BUS_INT_FLAG(flag) (USBD->BUSINTSTS = flag) /*!<Clear Bus interrupt flag \hideinitializer */
<> 144:ef7eb2e8f9f7 197 #define USBD_ENABLE_CEP_INT(intr) (USBD->CEPINTEN = (intr)) /*!<Enable CEP Interrupt \hideinitializer */
<> 144:ef7eb2e8f9f7 198 #define USBD_CLR_CEP_INT_FLAG(flag) (USBD->CEPINTSTS = flag) /*!<Clear CEP interrupt flag \hideinitializer */
<> 144:ef7eb2e8f9f7 199 #define USBD_SET_CEP_STATE(flag) (USBD->CEPCTL = flag) /*!<Set CEP state \hideinitializer */
<> 144:ef7eb2e8f9f7 200 #define USBD_START_CEP_IN(size) (USBD->CEPTXCNT = size) /*!<Start CEP IN Transfer \hideinitializer */
<> 144:ef7eb2e8f9f7 201 #define USBD_SET_MAX_PAYLOAD(ep, size) (*((__IO uint32_t *) ((uint32_t)&USBD->EPAMPS + (uint32_t)((ep)*0x28))) = (size)) /*!<Set EPx Maximum Packet Size \hideinitializer */
<> 144:ef7eb2e8f9f7 202 #define USBD_ENABLE_EP_INT(ep, intr) (*((__IO uint32_t *) ((uint32_t)&USBD->EPAINTEN + (uint32_t)((ep)*0x28))) = (intr)) /*!<Enable EPx Interrupt \hideinitializer */
<> 144:ef7eb2e8f9f7 203 #define USBD_GET_EP_INT_FLAG(ep) (*((__IO uint32_t *) ((uint32_t)&USBD->EPAINTSTS + (uint32_t)((ep)*0x28)))) /*!<Get EPx interrupt flag \hideinitializer */
<> 144:ef7eb2e8f9f7 204 #define USBD_CLR_EP_INT_FLAG(ep, flag) (*((__IO uint32_t *) ((uint32_t)&USBD->EPAINTSTS + (uint32_t)((ep)*0x28))) = (flag)) /*!<Clear EPx interrupt flag \hideinitializer */
<> 144:ef7eb2e8f9f7 205 #define USBD_SET_DMA_LEN(len) (USBD->DMACNT = len) /*!<Set DMA transfer length \hideinitializer */
<> 144:ef7eb2e8f9f7 206 #define USBD_SET_DMA_ADDR(addr) (USBD->DMAADDR = addr) /*!<Set DMA transfer address \hideinitializer */
<> 144:ef7eb2e8f9f7 207 #define USBD_SET_DMA_READ(epnum) (USBD->DMACTL = (USBD->DMACTL & ~USBD_DMACTL_EPNUM_Msk) | USBD_DMACTL_DMARD_Msk | epnum) /*!<Set DMA transfer type to read \hideinitializer */
<> 144:ef7eb2e8f9f7 208 #define USBD_SET_DMA_WRITE(epnum) (USBD->DMACTL = (USBD->DMACTL & ~(USBD_DMACTL_EPNUM_Msk | USBD_DMACTL_DMARD_Msk)) | epnum) /*!<Set DMA transfer type to write \hideinitializer */
<> 144:ef7eb2e8f9f7 209 #define USBD_ENABLE_DMA() (USBD->DMACTL |= USBD_DMACTL_DMAEN_Msk) /*!<Enable DMA transfer \hideinitializer */
<> 144:ef7eb2e8f9f7 210 #define USBD_IS_ATTACHED() ((uint32_t)(USBD->PHYCTL & USBD_PHYCTL_VBUSDET_Msk)) /*!<Check cable connect state \hideinitializer */
<> 144:ef7eb2e8f9f7 211
<> 144:ef7eb2e8f9f7 212
<> 144:ef7eb2e8f9f7 213 /*@}*/ /* end of group NUC472_442_USBD_EXPORTED_MACROS */
<> 144:ef7eb2e8f9f7 214
<> 144:ef7eb2e8f9f7 215 /** @addtogroup NUC472_442_USBD_EXPORTED_FUNCTIONS USBD Exported Functions
<> 144:ef7eb2e8f9f7 216 @{
<> 144:ef7eb2e8f9f7 217 */
<> 144:ef7eb2e8f9f7 218 /**
<> 144:ef7eb2e8f9f7 219 * @brief USBD_memcpy, Copy bytes hardware limitation
<> 144:ef7eb2e8f9f7 220 * @param[in] u8Dst Destination pointer.
<> 144:ef7eb2e8f9f7 221 * @param[in] u8Src Source pointer.
<> 144:ef7eb2e8f9f7 222 * @param[in] i32Size Copy size.
<> 144:ef7eb2e8f9f7 223 * @retval None.
<> 144:ef7eb2e8f9f7 224 */
<> 144:ef7eb2e8f9f7 225 static __INLINE void USBD_MemCopy(uint8_t *u8Dst, uint8_t *u8Src, int32_t i32Size)
<> 144:ef7eb2e8f9f7 226 {
<> 144:ef7eb2e8f9f7 227 while (i32Size--) *u8Dst++ = *u8Src++;
<> 144:ef7eb2e8f9f7 228 }
<> 144:ef7eb2e8f9f7 229
<> 144:ef7eb2e8f9f7 230 /**
<> 144:ef7eb2e8f9f7 231 * @brief USBD_ResetDMA
<> 144:ef7eb2e8f9f7 232 * @param None
<> 144:ef7eb2e8f9f7 233 * @retval None.
<> 144:ef7eb2e8f9f7 234 */
<> 144:ef7eb2e8f9f7 235 static __INLINE void USBD_ResetDMA(void)
<> 144:ef7eb2e8f9f7 236 {
<> 144:ef7eb2e8f9f7 237 USBD->DMACNT = 0;
<> 144:ef7eb2e8f9f7 238 USBD->DMACTL = 0x80;
<> 144:ef7eb2e8f9f7 239 USBD->DMACTL = 0x00;
<> 144:ef7eb2e8f9f7 240 }
<> 144:ef7eb2e8f9f7 241 /**
<> 144:ef7eb2e8f9f7 242 * @brief USBD_SetEpBufAddr, Set Endpoint buffer address
<> 144:ef7eb2e8f9f7 243 * @param[in] u32Ep Endpoint Number
<> 144:ef7eb2e8f9f7 244 * @param[in] u32Base Buffer Start Address
<> 144:ef7eb2e8f9f7 245 * @param[in] u32Len Buffer length
<> 144:ef7eb2e8f9f7 246 * @retval None.
<> 144:ef7eb2e8f9f7 247 */
<> 144:ef7eb2e8f9f7 248 static __INLINE void USBD_SetEpBufAddr(uint32_t u32Ep, uint32_t u32Base, uint32_t u32Len)
<> 144:ef7eb2e8f9f7 249 {
<> 144:ef7eb2e8f9f7 250 if (u32Ep == CEP) {
<> 144:ef7eb2e8f9f7 251 USBD->CEPBUFSTART = u32Base;
<> 144:ef7eb2e8f9f7 252 USBD->CEPBUFEND = u32Base + u32Len - 1;
<> 144:ef7eb2e8f9f7 253 } else {
<> 144:ef7eb2e8f9f7 254 *((__IO uint32_t *) ((uint32_t)&USBD->EPABUFSTART + (uint32_t)(u32Ep*0x28))) = u32Base;
<> 144:ef7eb2e8f9f7 255 *((__IO uint32_t *) ((uint32_t)&USBD->EPABUFEND + (uint32_t)(u32Ep*0x28))) = u32Base + u32Len - 1;
<> 144:ef7eb2e8f9f7 256 }
<> 144:ef7eb2e8f9f7 257 }
<> 144:ef7eb2e8f9f7 258
<> 144:ef7eb2e8f9f7 259 /**
<> 144:ef7eb2e8f9f7 260 * @brief USBD_ConfigEp, Config Endpoint
<> 144:ef7eb2e8f9f7 261 * @param[in] u32Ep USB endpoint
<> 144:ef7eb2e8f9f7 262 * @param[in] u32EpNum Endpoint number
<> 144:ef7eb2e8f9f7 263 * @param[in] u32EpType Endpoint type
<> 144:ef7eb2e8f9f7 264 * @param[in] u32EpDir Endpoint direction
<> 144:ef7eb2e8f9f7 265 * @retval None.
<> 144:ef7eb2e8f9f7 266 */
<> 144:ef7eb2e8f9f7 267 static __INLINE void USBD_ConfigEp(uint32_t u32Ep, uint32_t u32EpNum, uint32_t u32EpType, uint32_t u32EpDir)
<> 144:ef7eb2e8f9f7 268 {
<> 144:ef7eb2e8f9f7 269 if (u32EpType == USB_EP_CFG_TYPE_BULK)
<> 144:ef7eb2e8f9f7 270 *((__IO uint32_t *)((uint32_t)&USBD->EPARSPCTL+(uint32_t)(u32Ep*0x28)))=(USB_EP_RSPCTL_FLUSH|USB_EP_RSPCTL_MODE_AUTO);
<> 144:ef7eb2e8f9f7 271 else if (u32EpType == USB_EP_CFG_TYPE_INT)
<> 144:ef7eb2e8f9f7 272 *((__IO uint32_t *)((uint32_t)&USBD->EPARSPCTL+(uint32_t)(u32Ep*0x28)))=(USB_EP_RSPCTL_FLUSH|USB_EP_RSPCTL_MODE_MANUAL);
<> 144:ef7eb2e8f9f7 273 else if (u32EpType == USB_EP_CFG_TYPE_ISO)
<> 144:ef7eb2e8f9f7 274 *((__IO uint32_t *)((uint32_t)&USBD->EPARSPCTL+(uint32_t)(u32Ep*0x28)))=(USB_EP_RSPCTL_FLUSH|USB_EP_RSPCTL_MODE_FLY);
<> 144:ef7eb2e8f9f7 275
<> 144:ef7eb2e8f9f7 276 *((__IO uint32_t *)((uint32_t)&USBD->EPACFG+(uint32_t)(u32Ep*0x28)))=(u32EpType|u32EpDir|USB_EP_CFG_VALID|(u32EpNum << 4));
<> 144:ef7eb2e8f9f7 277 }
<> 144:ef7eb2e8f9f7 278
<> 144:ef7eb2e8f9f7 279 /**
<> 144:ef7eb2e8f9f7 280 * @brief Set USB endpoint stall state
<> 144:ef7eb2e8f9f7 281 *
<> 144:ef7eb2e8f9f7 282 * @param[in] u32Ep USB endpoint
<> 144:ef7eb2e8f9f7 283 * @return None
<> 144:ef7eb2e8f9f7 284 *
<> 144:ef7eb2e8f9f7 285 * @details Set USB endpoint stall state, endpoint will return STALL token.
<> 144:ef7eb2e8f9f7 286 */
<> 144:ef7eb2e8f9f7 287 static __INLINE void USBD_SetStall(uint32_t u32Ep)
<> 144:ef7eb2e8f9f7 288 {
<> 144:ef7eb2e8f9f7 289 uint32_t u32CfgAddr;
<> 144:ef7eb2e8f9f7 290 uint32_t u32Cfg;
<> 144:ef7eb2e8f9f7 291 int i;
<> 144:ef7eb2e8f9f7 292
<> 144:ef7eb2e8f9f7 293 if (u32Ep == 0)
<> 144:ef7eb2e8f9f7 294 USBD_SET_CEP_STATE(USB_CEPCTL_STALL);
<> 144:ef7eb2e8f9f7 295 else {
<> 144:ef7eb2e8f9f7 296 for (i=0; i<USBD_MAX_EP; i++) {
<> 144:ef7eb2e8f9f7 297 u32CfgAddr = (uint32_t)&USBD->EPACFG + (uint32_t)(i * 0x28);
<> 144:ef7eb2e8f9f7 298 u32Cfg = *((__IO uint32_t *) (u32CfgAddr));
<> 144:ef7eb2e8f9f7 299
<> 144:ef7eb2e8f9f7 300 if (((u32Cfg & 0xf0) >> 4) == u32Ep)
<> 144:ef7eb2e8f9f7 301 {
<> 144:ef7eb2e8f9f7 302 u32CfgAddr = (uint32_t)&USBD->EPARSPCTL + (uint32_t)(i * 0x28);
<> 144:ef7eb2e8f9f7 303 u32Cfg = *((__IO uint32_t *) (u32CfgAddr)) & 0xf7; /* avoid clear TOGGLE bit */
<> 144:ef7eb2e8f9f7 304 *((__IO uint32_t *) (u32CfgAddr)) = (u32Cfg | USB_EP_RSPCTL_HALT);
<> 144:ef7eb2e8f9f7 305 }
<> 144:ef7eb2e8f9f7 306 }
<> 144:ef7eb2e8f9f7 307 }
<> 144:ef7eb2e8f9f7 308 }
<> 144:ef7eb2e8f9f7 309
<> 144:ef7eb2e8f9f7 310 /**
<> 144:ef7eb2e8f9f7 311 * @brief Clear USB endpoint stall state
<> 144:ef7eb2e8f9f7 312 *
<> 144:ef7eb2e8f9f7 313 * @param[in] u32Ep USB endpoint
<> 144:ef7eb2e8f9f7 314 * @return None
<> 144:ef7eb2e8f9f7 315 *
<> 144:ef7eb2e8f9f7 316 * @details Clear USB endpoint stall state, endpoint will return ACK/NAK token.
<> 144:ef7eb2e8f9f7 317 */
<> 144:ef7eb2e8f9f7 318 static __INLINE void USBD_ClearStall(uint32_t u32Ep)
<> 144:ef7eb2e8f9f7 319 {
<> 144:ef7eb2e8f9f7 320 uint32_t u32CfgAddr;
<> 144:ef7eb2e8f9f7 321 uint32_t u32Cfg;
<> 144:ef7eb2e8f9f7 322 int i;
<> 144:ef7eb2e8f9f7 323
<> 144:ef7eb2e8f9f7 324 for (i=0; i<USBD_MAX_EP; i++) {
<> 144:ef7eb2e8f9f7 325 u32CfgAddr = (uint32_t)&USBD->EPACFG + (uint32_t)(i * 0x28);
<> 144:ef7eb2e8f9f7 326 u32Cfg = *((__IO uint32_t *) (u32CfgAddr));
<> 144:ef7eb2e8f9f7 327
<> 144:ef7eb2e8f9f7 328 if (((u32Cfg & 0xf0) >> 4) == u32Ep)
<> 144:ef7eb2e8f9f7 329 {
<> 144:ef7eb2e8f9f7 330 u32CfgAddr = (uint32_t)&USBD->EPARSPCTL + (uint32_t)(i * 0x28);
<> 144:ef7eb2e8f9f7 331 *((__IO uint32_t *) (u32CfgAddr)) = USB_EP_RSPCTL_TOGGLE;
<> 144:ef7eb2e8f9f7 332 }
<> 144:ef7eb2e8f9f7 333 }
<> 144:ef7eb2e8f9f7 334 }
<> 144:ef7eb2e8f9f7 335
<> 144:ef7eb2e8f9f7 336 /**
<> 144:ef7eb2e8f9f7 337 * @brief Get USB endpoint stall state
<> 144:ef7eb2e8f9f7 338 *
<> 144:ef7eb2e8f9f7 339 * @param[in] u32Ep USB endpoint
<> 144:ef7eb2e8f9f7 340 * @retval 0: USB endpoint is not stalled.
<> 144:ef7eb2e8f9f7 341 * @retval non-0: USB endpoint is stalled.
<> 144:ef7eb2e8f9f7 342 *
<> 144:ef7eb2e8f9f7 343 * @details Get USB endpoint stall state.
<> 144:ef7eb2e8f9f7 344 */
<> 144:ef7eb2e8f9f7 345 static __INLINE uint32_t USBD_GetStall(uint32_t u32Ep)
<> 144:ef7eb2e8f9f7 346 {
<> 144:ef7eb2e8f9f7 347 uint32_t u32CfgAddr;
<> 144:ef7eb2e8f9f7 348 uint32_t u32Cfg;
<> 144:ef7eb2e8f9f7 349 int i;
<> 144:ef7eb2e8f9f7 350
<> 144:ef7eb2e8f9f7 351 for (i=0; i<USBD_MAX_EP; i++) {
<> 144:ef7eb2e8f9f7 352 u32CfgAddr = (uint32_t)&USBD->EPACFG + (uint32_t)(i * 0x28);
<> 144:ef7eb2e8f9f7 353 u32Cfg = *((__IO uint32_t *) (u32CfgAddr));
<> 144:ef7eb2e8f9f7 354
<> 144:ef7eb2e8f9f7 355 if (((u32Cfg & 0xf0) >> 4) == u32Ep)
<> 144:ef7eb2e8f9f7 356 {
<> 144:ef7eb2e8f9f7 357 u32CfgAddr = (uint32_t)&USBD->EPARSPCTL + (uint32_t)(i * 0x28);
<> 144:ef7eb2e8f9f7 358 return ((*((__IO uint32_t *) (u32CfgAddr))) & USB_EP_RSPCTL_HALT);
<> 144:ef7eb2e8f9f7 359 }
<> 144:ef7eb2e8f9f7 360 }
<> 144:ef7eb2e8f9f7 361 return 0;
<> 144:ef7eb2e8f9f7 362 }
<> 144:ef7eb2e8f9f7 363
<> 144:ef7eb2e8f9f7 364
<> 144:ef7eb2e8f9f7 365 /*-------------------------------------------------------------------------------------------*/
<> 144:ef7eb2e8f9f7 366 typedef void (*VENDOR_REQ)(void); /*!<USB Vendor request callback function */
<> 144:ef7eb2e8f9f7 367 typedef void (*CLASS_REQ)(void); /*!<USB Class request callback function */
<> 144:ef7eb2e8f9f7 368 typedef void (*SET_INTERFACE_REQ)(uint32_t u32AltInterface); /*!<USB Standard request "Set Interface" callback function */
<> 144:ef7eb2e8f9f7 369
<> 144:ef7eb2e8f9f7 370 void USBD_Open(S_USBD_INFO_T *param, CLASS_REQ pfnClassReq, SET_INTERFACE_REQ pfnSetInterface);
<> 144:ef7eb2e8f9f7 371 void USBD_Start(void);
<> 144:ef7eb2e8f9f7 372 void USBD_ProcessSetupPacket(void);
<> 144:ef7eb2e8f9f7 373 void USBD_StandardRequest(void);
<> 144:ef7eb2e8f9f7 374 void USBD_UpdateDeviceState(void);
<> 144:ef7eb2e8f9f7 375 void USBD_PrepareCtrlIn(uint8_t *pu8Buf, uint32_t u32Size);
<> 144:ef7eb2e8f9f7 376 void USBD_CtrlIn(void);
<> 144:ef7eb2e8f9f7 377 void USBD_CtrlOut(uint8_t *pu8Buf, uint32_t u32Size);
<> 144:ef7eb2e8f9f7 378 void USBD_SwReset(void);
<> 144:ef7eb2e8f9f7 379 void USBD_SetVendorRequest(VENDOR_REQ pfnVendorReq);
<> 144:ef7eb2e8f9f7 380
<> 144:ef7eb2e8f9f7 381
<> 144:ef7eb2e8f9f7 382
<> 144:ef7eb2e8f9f7 383 /*@}*/ /* end of group NUC472_442_USBD_EXPORTED_FUNCTIONS */
<> 144:ef7eb2e8f9f7 384
<> 144:ef7eb2e8f9f7 385 /*@}*/ /* end of group NUC472_442_USBD_Driver */
<> 144:ef7eb2e8f9f7 386
<> 144:ef7eb2e8f9f7 387 /*@}*/ /* end of group NUC472_442_Device_Driver */
<> 144:ef7eb2e8f9f7 388
<> 144:ef7eb2e8f9f7 389 #ifdef __cplusplus
<> 144:ef7eb2e8f9f7 390 }
<> 144:ef7eb2e8f9f7 391 #endif
<> 144:ef7eb2e8f9f7 392
<> 144:ef7eb2e8f9f7 393 #endif //__USBD_H__
<> 144:ef7eb2e8f9f7 394
<> 144:ef7eb2e8f9f7 395 /*** (C) COPYRIGHT 2013 Nuvoton Technology Corp. ***/