32 #pragma GCC diagnostic ignored "-Wcast-align" 136 if (++count > 200000)
141 while (greset.b.ahbidle == 0);
144 greset.b.csftrst = 1;
149 if (++count > 200000)
154 while (greset.b.csftrst == 1);
177 uint32_t count32b= 0 , i= 0;
180 count32b = (len + 3) / 4;
182 for (i = 0; i < count32b; i++, src+=4)
203 uint32_t count32b = (len + 3) / 4;
205 __IO uint32_t *fifo = pdev->
regs.
DFIFO[0];
207 for ( i = 0; i < count32b; i++, dest += 4 )
212 return ((
void *)dest);
225 uint32_t i , baseAddress = 0;
244 #ifdef USB_OTG_FS_SOF_OUTPUT_ENABLED 248 #ifdef USB_OTG_FS_LOW_PWR_MGMT_SUPPORT 260 #ifdef USB_OTG_ULPI_PHY_ENABLED 263 #ifdef USB_OTG_EMBEDDED_PHY_ENABLED 268 #ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED 272 #ifdef USB_OTG_HS_SOF_OUTPUT_ENABLED 276 #ifdef USB_OTG_HS_LOW_PWR_MGMT_SUPPORT 294 (i * USB_OTG_EP_REG_OFFSET));
352 #ifdef USB_OTG_INTERNAL_VBUS_ENABLED 355 #ifdef USB_OTG_EXTERNAL_VBUS_ENABLED 390 #ifndef VBUS_SENSING_ENABLED 468 greset.b.txfflsh = 1;
469 greset.b.txfnum =
num;
474 if (++count > 200000)
479 while (greset.b.txfflsh == 1);
498 greset.b.rxfflsh = 1;
503 if (++count > 200000)
508 while (greset.b.rxfflsh == 1);
617 USB_OTG_OTGCTL_TypeDef gotgctl;
622 nptxfifosize.
d32 = 0;
631 USB_OTG_BSP_ConfigVBUS(pdev);
645 USB_OTG_ResetPort(pdev);
653 #ifdef USB_OTG_FS_CORE 659 nptxfifosize.
b.
depth = TXH_NP_FS_FIFOSIZ;
663 ptxfifosize.
b.
depth = TXH_P_FS_FIFOSIZ;
667 #ifdef USB_OTG_HS_CORE 673 nptxfifosize.
b.
depth = TXH_NP_HS_FIFOSIZ;
676 ptxfifosize.
b.
startaddr = RX_FIFO_HS_SIZE + TXH_NP_HS_FIFOSIZ;
677 ptxfifosize.
b.
depth = TXH_P_HS_FIFOSIZ;
684 gotgctl.b.hstsethnpen = 1;
700 USB_OTG_DriveVbus(pdev, 1);
703 USB_OTG_EnableHostInt(pdev);
731 USB_OTG_BSP_DriveVBUS(pdev, state);
734 hprt0.
d32 = USB_OTG_ReadHPRT0(pdev);
735 if ((hprt0.
b.
prtpwr == 0 ) && (state == 1 ))
740 if ((hprt0.
b.
prtpwr == 1 ) && (state == 0 ))
837 hprt0.
d32 = USB_OTG_ReadHPRT0(pdev);
857 uint32_t intr_enable = 0;
869 hcint.
d32 = 0xFFFFFFFF;
880 switch (pdev->host.hc[hc_num].ep_type)
889 if (pdev->host.hc[hc_num].ep_is_in)
896 if (pdev->host.hc[hc_num].do_ping)
910 if (pdev->host.hc[hc_num].ep_is_in)
921 if (pdev->host.hc[hc_num].ep_is_in)
934 intr_enable = (1 << hc_num);
943 hcchar.
b.
devaddr = pdev->host.hc[hc_num].dev_addr;
944 hcchar.
b.
epnum = pdev->host.hc[hc_num].ep_num;
945 hcchar.
b.
epdir = pdev->host.hc[hc_num].ep_is_in;
947 hcchar.
b.
eptype = pdev->host.hc[hc_num].ep_type;
948 hcchar.
b.
mps = pdev->host.hc[hc_num].max_packet;
972 uint16_t len_words = 0;
974 uint16_t num_packets;
975 uint16_t max_hc_pkt_count;
977 max_hc_pkt_count = 256;
983 if (pdev->host.hc[hc_num].xfer_len > 0)
985 num_packets = (pdev->host.hc[hc_num].xfer_len + \
986 pdev->host.hc[hc_num].max_packet - 1) / pdev->host.hc[hc_num].max_packet;
988 if (num_packets > max_hc_pkt_count)
990 num_packets = max_hc_pkt_count;
991 pdev->host.hc[hc_num].xfer_len = num_packets * \
992 pdev->host.hc[hc_num].max_packet;
999 if (pdev->host.hc[hc_num].ep_is_in)
1001 pdev->host.hc[hc_num].xfer_len = num_packets * \
1002 pdev->host.hc[hc_num].max_packet;
1005 hctsiz.
b.
xfersize = pdev->host.hc[hc_num].xfer_len;
1006 hctsiz.
b.
pktcnt = num_packets;
1007 hctsiz.
b.
pid = pdev->host.hc[hc_num].data_pid;
1017 hcchar.
b.
oddfrm = USB_OTG_IsEvenFrame(pdev);
1026 if((pdev->host.hc[hc_num].ep_is_in == 0) &&
1027 (pdev->host.hc[hc_num].xfer_len > 0))
1029 switch(pdev->host.hc[hc_num].ep_type)
1036 len_words = (pdev->host.hc[hc_num].xfer_len + 3) / 4;
1051 len_words = (pdev->host.hc[hc_num].xfer_len + 3) / 4;
1067 pdev->host.hc[hc_num].xfer_buff ,
1068 hc_num, pdev->host.hc[hc_num].xfer_len);
1166 #ifdef USE_DEVICE_MODE 1204 nptxfifosize.
d32 = 0;
1215 #ifdef USB_OTG_FS_CORE 1249 #ifdef USB_OTG_HS_CORE 1268 nptxfifosize.
b.
depth = TX0_FIFO_HS_SIZE;
1275 txfifosize.
b.
depth = TX1_FIFO_HS_SIZE;
1281 txfifosize.
b.
depth = TX2_FIFO_HS_SIZE;
1287 txfifosize.
b.
depth = TX3_FIFO_HS_SIZE;
1292 txfifosize.
b.
depth = TX4_FIFO_HS_SIZE;
1298 txfifosize.
b.
depth = TX5_FIFO_HS_SIZE;
1399 #ifdef VBUS_SENSING_ENABLED 1485 __IO uint32_t *addr;
1494 daintmsk.
ep.
in = 1 << ep->
num;
1514 #ifdef USB_OTG_HS_DEDICATED_EP1_ENABLED 1536 __IO uint32_t *addr;
1544 daintmsk.
ep.
in = 1 << ep->
num;
1555 #ifdef USB_OTG_HS_DEDICATED_EP1_ENABLED 1579 uint32_t fifoemptymsk = 0;
1622 fifoemptymsk = 1 << ep->
num;
1633 if (((dsts.
b.
soffn)&0x1) == 0)
1711 uint32_t fifoemptymsk = 0;
1761 fifoemptymsk |= 1 << ep->
num;
1810 __IO uint32_t *depctl_addr;
1846 __IO uint32_t *depctl_addr;
1880 return ((v & 0xffff0000) >> 16);
1909 return (v & 0xffff);
1936 doepctl.
d32 = 0x80008000;
2041 __IO uint32_t *depctl_addr;
2042 uint32_t Status = 0;
2052 else if (depctl.
b.
naksts == 1)
2064 else if (depctl.
b.
naksts == 1)
2084 __IO uint32_t *depctl_addr;
static void USB_OTG_EnableCommonInt(USB_OTG_CORE_HANDLE *pdev)
USB_OTG_EnableCommonInt Initializes the commmon interrupts, used in both device and modes...
USB_OTG_STS USB_OTG_FlushTxFifo(USB_OTG_CORE_HANDLE *pdev, uint32_t num)
USB_OTG_FlushTxFifo : Flush a Tx FIFO.
uint32_t USB_OTG_ReadDevAllOutEp_itr(USB_OTG_CORE_HANDLE *pdev)
USB_OTG_ReadDevAllOutEp_itr : returns OUT endpoint interrupt bits.
USB_OTG_STS USB_OTG_EPSetStall(USB_OTG_CORE_HANDLE *pdev, USB_OTG_EP *ep)
USB_OTG_EPSetStall : Set the EP STALL.
Specific api's relative to the used hardware platform.
struct _USB_OTG_GINTMSK_TypeDef::@56 b
struct _USB_OTG_GAHBCFG_TypeDef::@53 b
struct _USB_OTG_HPRT0_TypeDef::@80 b
USB_OTG_STS USB_OTG_WritePacket(USB_OTG_CORE_HANDLE *pdev, const uint8_t *src, uint8_t ch_ep_num, uint16_t len)
USB_OTG_WritePacket : Writes a packet into the Tx FIFO associated with the EP.
uint32_t disablevbussensing
uint32_t USB_OTG_ReadDevOutEP_itr(USB_OTG_CORE_HANDLE *pdev, uint8_t epnum)
USB_OTG_ReadDevOutEP_itr : returns Device OUT EP Interrupt register.
USB_OTG_STS USB_OTG_EnableGlobalInt(USB_OTG_CORE_HANDLE *pdev)
USB_OTG_EnableGlobalInt Enables the controller's Global Int in the AHB Config reg.
#define USB_OTG_DATA_FIFO_OFFSET
struct _USB_OTG_HCINTMSK_TypeDef::@87 b
USB_OTG_STS USB_OTG_SelectCore(USB_OTG_CORE_HANDLE *pdev, USB_OTG_CORE_ID_TypeDef coreID)
USB_OTG_SelectCore Initialize core registers address.
void USB_OTG_StopDevice(USB_OTG_CORE_HANDLE *pdev)
Stop the device and clean up fifo's.
void USB_OTG_EP0_OutStart(USB_OTG_CORE_HANDLE *pdev)
configures EPO to receive SETUP packets
uint8_t setup_packet[8 *3]
USB_OTG_STS USB_OTG_EP0Activate(USB_OTG_CORE_HANDLE *pdev)
enables EP0 OUT to receive SETUP packets and configures EP0 for transmitting packets ...
#define USB_OTG_PCGCCTL_OFFSET
#define USB_OTG_FS_BASE_ADDR
struct _USB_OTG_DIEPINTn_TypeDef::@68 b
#define DCFG_FRAME_INTERVAL_80
struct _USB_OTG_GCCFG_TypeDef::@64 b
enum USB_OTG_SPEED USB_OTG_GetDeviceSpeed(USB_OTG_CORE_HANDLE *pdev)
USB_OTG_GetDeviceSpeed Get the device speed from the device status register.
#define USB_OTG_EP_RX_VALID
#define USB_OTG_SPEED_PARAM_HIGH_IN_FULL
#define USB_OTG_EP_RX_NAK
__IO uint32_t DIEPTXF[USB_OTG_MAX_TX_FIFOS]
#define USB_OTG_EP_RX_STALL
#define USB_OTG_EP_REG_OFFSET
USB_OTG_STS USB_OTG_EPActivate(USB_OTG_CORE_HANDLE *pdev, USB_OTG_EP *ep)
USB_OTG_EPActivate : Activates an EP.
uint8_t USB_OTG_IsHostMode(USB_OTG_CORE_HANDLE *pdev)
USB_OTG_IsHostMode : Check if it is host mode.
#define USB_OTG_HOST_PORT_REGS_OFFSET
uint8_t USB_OTG_IsDeviceMode(USB_OTG_CORE_HANDLE *pdev)
USB_OTG_IsDeviceMode : Check if it is device mode.
void USB_OTG_BSP_uDelay(const uint32_t usec)
USB_OTG_STS USB_OTG_DisableGlobalInt(USB_OTG_CORE_HANDLE *pdev)
USB_OTG_DisableGlobalInt Enables the controller's Global Int in the AHB Config reg.
#define DSTS_ENUMSPD_LS_PHY_6MHZ
struct _USB_OTG_DSTS_TypeDef::@67 b
#define USB_OTG_SPEED_FULL
#define DSTS_ENUMSPD_FS_PHY_48MHZ
#define USB_OTG_DEV_OUT_EP_REG_OFFSET
USB_OTG_INEPREGS * INEP_REGS[USB_OTG_MAX_TX_FIFOS]
uint32_t USB_OTG_ReadDevAllInEPItr(USB_OTG_CORE_HANDLE *pdev)
USB_OTG_ReadDevAllInEPItr : Get int status register.
USB_OTG_OUTEPREGS * OUTEP_REGS[USB_OTG_MAX_TX_FIFOS]
#define USB_OTG_CHAN_REGS_OFFSET
#define DSTS_ENUMSPD_FS_PHY_30MHZ_OR_60MHZ
#define USB_OTG_EP_TX_STALL
struct _USB_OTG_HCTSIZn_TypeDef::@86 b
#define USB_OTG_CORE_GLOBAL_REGS_OFFSET
#define USB_OTG_DATA_FIFO_SIZE
USB_OTG_STS USB_OTG_EPStartXfer(USB_OTG_CORE_HANDLE *pdev, USB_OTG_EP *ep)
USB_OTG_EPStartXfer : Handle the setup for data xfer for an EP and starts the xfer.
__IO uint32_t DIEPTXF0_HNPTXFSIZ
#define USB_OTG_HOST_GLOBAL_REG_OFFSET
#define HPRT0_PRTSPD_LOW_SPEED
#define USB_OTG_DEV_GLOBAL_REG_OFFSET
void USB_OTG_UngateClock(USB_OTG_CORE_HANDLE *pdev)
USB_OTG_UngateClock : active USB Core clock.
#define USB_OTG_FS_MAX_PACKET_SIZE
struct _USB_OTG_DEP0XFRSIZ_TypeDef::@74 b
#define USB_OTG_WRITE_REG32(reg, value)
USB_OTG_STS USB_OTG_EP0StartXfer(USB_OTG_CORE_HANDLE *pdev, USB_OTG_EP *ep)
USB_OTG_EP0StartXfer : Handle the setup for a data xfer for EP0 and starts the xfer.
struct _USB_OTG_DCFG_TypeDef::@65 b
#define USB_OTG_EP_RX_DIS
struct _USB_OTG_HCFG_TypeDef::@75 b
uint32_t USB_OTG_ReadCoreItr(USB_OTG_CORE_HANDLE *pdev)
USB_OTG_ReadCoreItr : returns the Core Interrupt register.
struct _USB_OTG_DTHRCTL_TypeDef::@71 b
struct _USB_OTG_DAINT_TypeDef::@70 ep
#define USB_OTG_READ_REG32(reg)
struct _USB_OTG_DCTL_TypeDef::@66 b
void USB_OTG_BSP_mDelay(const uint32_t msec)
USB_OTG_STS USB_OTG_EPDeactivate(USB_OTG_CORE_HANDLE *pdev, USB_OTG_EP *ep)
USB_OTG_EPDeactivate : Deactivates an EP.
struct _USB_OTG_DEPCTL_TypeDef::@72 b
#define USB_OTG_EMBEDDED_PHY
#define USB_OTG_SPEED_PARAM_HIGH
struct _USB_OTG_GUSBCFG_TypeDef::@54 b
USB_OTG_STS USB_OTG_FlushRxFifo(USB_OTG_CORE_HANDLE *pdev)
USB_OTG_FlushRxFifo : Flush a Rx FIFO.
#define DSTS_ENUMSPD_HS_PHY_30MHZ_OR_60MHZ
#define USB_OTG_EP_TX_DIS
#define USB_OTG_HS_BASE_ADDR
USB_OTG_STS USB_OTG_SetCurrentMode(USB_OTG_CORE_HANDLE *pdev, uint8_t mode)
USB_OTG_SetCurrentMode : Set ID line.
#define USB_OTG_EP_TX_NAK
static USB_OTG_STS USB_OTG_CoreReset(USB_OTG_CORE_HANDLE *pdev)
USB_OTG_CoreReset : Soft reset of the core.
__IO uint32_t * DFIFO[USB_OTG_MAX_TX_FIFOS]
Header of the Core Layer.
void USB_OTG_ActiveRemoteWakeup(USB_OTG_CORE_HANDLE *pdev)
USB_OTG_RemoteWakeup : active remote wakeup signalling.
USB_OTG_STS USB_OTG_EPClearStall(USB_OTG_CORE_HANDLE *pdev, USB_OTG_EP *ep)
Clear the EP STALL.
uint32_t USB_OTG_GetEPStatus(USB_OTG_CORE_HANDLE *pdev, USB_OTG_EP *ep)
returns the EP Status
#define USB_OTG_EP_TX_VALID
uint32_t term_sel_dl_pulse
#define USB_OTG_HOST_CHAN_REGS_OFFSET
struct _USB_OTG_HNPTXSTS_TypeDef::@61 b
#define USB_OTG_SPEED_PARAM_FULL
#define USB_OTG_DEV_IN_EP_REG_OFFSET
void * USB_OTG_ReadPacket(USB_OTG_CORE_HANDLE *pdev, uint8_t *dest, uint16_t len)
USB_OTG_ReadPacket : Reads a packet from the Rx FIFO.
void USB_OTG_InitDevSpeed(USB_OTG_CORE_HANDLE *pdev, uint8_t speed)
USB_OTG_InitDevSpeed :Initializes the DevSpd field of DCFG register depending the PHY type and the en...
struct _USB_OTG_DEPXFRSIZ_TypeDef::@73 b
uint32_t USB_OTG_GetMode(USB_OTG_CORE_HANDLE *pdev)
USB_OTG_GetMode : Get current mode.
USB_OTG_STS USB_OTG_CoreInitDev(USB_OTG_CORE_HANDLE *pdev)
USB_OTG_CoreInitDev : Initializes the USB_OTG controller registers for device mode.
struct _USB_OTG_FSIZ_TypeDef::@60 b
struct _USB_OTG_HCCHAR_TypeDef::@83 b
void USB_OTG_SetEPStatus(USB_OTG_CORE_HANDLE *pdev, USB_OTG_EP *ep, uint32_t Status)
Set the EP Status.
struct _USB_OTG_PCGCCTL_TypeDef::@88 b
uint32_t ulpi_ext_vbus_drv
USB_OTG_HC_REGS * HC_REGS[USB_OTG_MAX_TX_FIFOS]
USB_OTG_STS USB_OTG_CoreInit(USB_OTG_CORE_HANDLE *pdev)
USB_OTG_CoreInit Initializes the USB_OTG controller registers and prepares the core device mode or ho...
USB_OTG_STS USB_OTG_EnableDevInt(USB_OTG_CORE_HANDLE *pdev)
USB_OTG_EnableDevInt : Enables the Device mode interrupts.
struct _USB_OTG_HPTXSTS_TypeDef::@78 b
#define USB_OTG_MODIFY_REG32(reg, clear_mask, set_mask)
uint32_t USB_OTG_ReadOtgItr(USB_OTG_CORE_HANDLE *pdev)
USB_OTG_ReadOtgItr : returns the USB_OTG Interrupt register.