Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
TASTE
uPython-mirror
Commits
75abee20
Commit
75abee20
authored
Jan 26, 2014
by
Damien George
Browse files
stm: USB host mode working! Restructure stm library directories.
parent
8fcf7b85
Changes
109
Hide whitespace changes
Inline
Side-by-side
stm/stmusb/usb_otg.c
0 → 100644
View file @
75abee20
/**
******************************************************************************
* @file usb_otg.c
* @author MCD Application Team
* @version V2.1.0
* @date 19-March-2012
* @brief OTG Core Layer
******************************************************************************
* @attention
*
* <h2><center>© COPYRIGHT 2012 STMicroelectronics</center></h2>
*
* Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
* You may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
*
* http://www.st.com/software_license_agreement_liberty_v2
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
******************************************************************************
*/
/* Includes ------------------------------------------------------------------*/
#include
"usb_defines.h"
#include
"usb_regs.h"
#include
"usb_core.h"
#include
"usb_otg.h"
/** @addtogroup USB_OTG_DRIVER
* @{
*/
/** @defgroup USB_OTG
* @brief This file is the interface between EFSL ans Host mass-storage class
* @{
*/
/** @defgroup USB_OTG_Private_Defines
* @{
*/
/**
* @}
*/
/** @defgroup USB_OTG_Private_TypesDefinitions
* @{
*/
/**
* @}
*/
/** @defgroup USB_OTG_Private_Macros
* @{
*/
/**
* @}
*/
/** @defgroup USB_OTG_Private_Variables
* @{
*/
/**
* @}
*/
/** @defgroup USB_OTG_Private_FunctionPrototypes
* @{
*/
static
uint32_t
USB_OTG_HandleOTG_ISR
(
USB_OTG_CORE_HANDLE
*
pdev
);
static
uint32_t
USB_OTG_HandleConnectorIDStatusChange_ISR
(
USB_OTG_CORE_HANDLE
*
pdev
);
static
uint32_t
USB_OTG_HandleSessionRequest_ISR
(
USB_OTG_CORE_HANDLE
*
pdev
);
static
uint32_t
USB_OTG_Read_itr
(
USB_OTG_CORE_HANDLE
*
pdev
);
/**
* @}
*/
/** @defgroup USB_OTG_Private_Functions
* @{
*/
/* OTG Interrupt Handler */
/**
* @brief STM32_USBO_OTG_ISR_Handler
*
* @param None
* @retval : None
*/
uint32_t
STM32_USBO_OTG_ISR_Handler
(
USB_OTG_CORE_HANDLE
*
pdev
)
{
uint32_t
retval
=
0
;
USB_OTG_GINTSTS_TypeDef
gintsts
;
gintsts
.
d32
=
0
;
gintsts
.
d32
=
USB_OTG_Read_itr
(
pdev
);
if
(
gintsts
.
d32
==
0
)
{
return
0
;
}
if
(
gintsts
.
b
.
otgintr
)
{
retval
|=
USB_OTG_HandleOTG_ISR
(
pdev
);
}
if
(
gintsts
.
b
.
conidstschng
)
{
retval
|=
USB_OTG_HandleConnectorIDStatusChange_ISR
(
pdev
);
}
if
(
gintsts
.
b
.
sessreqintr
)
{
retval
|=
USB_OTG_HandleSessionRequest_ISR
(
pdev
);
}
return
retval
;
}
/**
* @brief USB_OTG_Read_itr
* returns the Core Interrupt register
* @param None
* @retval : status
*/
static
uint32_t
USB_OTG_Read_itr
(
USB_OTG_CORE_HANDLE
*
pdev
)
{
USB_OTG_GINTSTS_TypeDef
gintsts
;
USB_OTG_GINTMSK_TypeDef
gintmsk
;
USB_OTG_GINTMSK_TypeDef
gintmsk_common
;
gintsts
.
d32
=
0
;
gintmsk
.
d32
=
0
;
gintmsk_common
.
d32
=
0
;
/* OTG interrupts */
gintmsk_common
.
b
.
sessreqintr
=
1
;
gintmsk_common
.
b
.
conidstschng
=
1
;
gintmsk_common
.
b
.
otgintr
=
1
;
gintsts
.
d32
=
USB_OTG_READ_REG32
(
&
pdev
->
regs
.
GREGS
->
GINTSTS
);
gintmsk
.
d32
=
USB_OTG_READ_REG32
(
&
pdev
->
regs
.
GREGS
->
GINTMSK
);
return
((
gintsts
.
d32
&
gintmsk
.
d32
)
&
gintmsk_common
.
d32
);
}
/**
* @brief USB_OTG_HandleOTG_ISR
* handles the OTG Interrupts
* @param None
* @retval : status
*/
static
uint32_t
USB_OTG_HandleOTG_ISR
(
USB_OTG_CORE_HANDLE
*
pdev
)
{
USB_OTG_GOTGINT_TypeDef
gotgint
;
USB_OTG_GOTGCTL_TypeDef
gotgctl
;
gotgint
.
d32
=
0
;
gotgctl
.
d32
=
0
;
gotgint
.
d32
=
USB_OTG_READ_REG32
(
&
pdev
->
regs
.
GREGS
->
GOTGINT
);
gotgctl
.
d32
=
USB_OTG_READ_REG32
(
&
pdev
->
regs
.
GREGS
->
GOTGCTL
);
if
(
gotgint
.
b
.
sesenddet
)
{
gotgctl
.
d32
=
USB_OTG_READ_REG32
(
&
pdev
->
regs
.
GREGS
->
GOTGCTL
);
if
(
USB_OTG_IsDeviceMode
(
pdev
))
{
}
else
if
(
USB_OTG_IsHostMode
(
pdev
))
{
}
}
/* ----> SRP SUCCESS or FAILURE INTERRUPT <---- */
if
(
gotgint
.
b
.
sesreqsucstschng
)
{
gotgctl
.
d32
=
USB_OTG_READ_REG32
(
&
pdev
->
regs
.
GREGS
->
GOTGCTL
);
if
(
gotgctl
.
b
.
sesreqscs
)
/* Session request success */
{
if
(
USB_OTG_IsDeviceMode
(
pdev
))
{
}
/* Clear Session Request */
gotgctl
.
d32
=
0
;
gotgctl
.
b
.
sesreq
=
1
;
USB_OTG_MODIFY_REG32
(
&
pdev
->
regs
.
GREGS
->
GOTGCTL
,
gotgctl
.
d32
,
0
);
}
else
/* Session request failure */
{
if
(
USB_OTG_IsDeviceMode
(
pdev
))
{
}
}
}
/* ----> HNP SUCCESS or FAILURE INTERRUPT <---- */
if
(
gotgint
.
b
.
hstnegsucstschng
)
{
gotgctl
.
d32
=
USB_OTG_READ_REG32
(
&
pdev
->
regs
.
GREGS
->
GOTGCTL
);
if
(
gotgctl
.
b
.
hstnegscs
)
/* Host negotiation success */
{
if
(
USB_OTG_IsHostMode
(
pdev
))
/* The core AUTOMATICALLY sets the Host mode */
{
}
}
else
/* Host negotiation failure */
{
}
gotgint
.
b
.
hstnegsucstschng
=
1
;
/* Ack "Host Negotiation Success Status Change" interrupt. */
}
/* ----> HOST NEGOTIATION DETECTED INTERRUPT <---- */
if
(
gotgint
.
b
.
hstnegdet
)
{
if
(
USB_OTG_IsDeviceMode
(
pdev
))
/* The core AUTOMATICALLY sets the Host mode */
{
}
else
{
}
}
if
(
gotgint
.
b
.
adevtoutchng
)
{}
if
(
gotgint
.
b
.
debdone
)
{
USB_OTG_ResetPort
(
pdev
);
}
/* Clear OTG INT */
USB_OTG_WRITE_REG32
(
&
pdev
->
regs
.
GREGS
->
GOTGINT
,
gotgint
.
d32
);
return
1
;
}
/**
* @brief USB_OTG_HandleConnectorIDStatusChange_ISR
* handles the Connector ID Status Change Interrupt
* @param None
* @retval : status
*/
static
uint32_t
USB_OTG_HandleConnectorIDStatusChange_ISR
(
USB_OTG_CORE_HANDLE
*
pdev
)
{
USB_OTG_GINTMSK_TypeDef
gintmsk
;
USB_OTG_GOTGCTL_TypeDef
gotgctl
;
USB_OTG_GINTSTS_TypeDef
gintsts
;
gintsts
.
d32
=
0
;
gintmsk
.
d32
=
0
;
gotgctl
.
d32
=
0
;
gintmsk
.
b
.
sofintr
=
1
;
USB_OTG_MODIFY_REG32
(
&
pdev
->
regs
.
GREGS
->
GINTMSK
,
gintmsk
.
d32
,
0
);
gotgctl
.
d32
=
USB_OTG_READ_REG32
(
&
pdev
->
regs
.
GREGS
->
GOTGCTL
);
/* B-Device connector (Device Mode) */
if
(
gotgctl
.
b
.
conidsts
)
{
USB_OTG_DisableGlobalInt
(
pdev
);
USB_OTG_CoreInitDev
(
pdev
);
USB_OTG_EnableGlobalInt
(
pdev
);
pdev
->
otg
.
OTG_State
=
B_PERIPHERAL
;
}
else
{
USB_OTG_DisableGlobalInt
(
pdev
);
USB_OTG_CoreInitHost
(
pdev
);
USB_OTG_EnableGlobalInt
(
pdev
);
pdev
->
otg
.
OTG_State
=
A_HOST
;
}
/* Set flag and clear interrupt */
gintsts
.
b
.
conidstschng
=
1
;
USB_OTG_WRITE_REG32
(
&
pdev
->
regs
.
GREGS
->
GINTSTS
,
gintsts
.
d32
);
return
1
;
}
/**
* @brief USB_OTG_HandleSessionRequest_ISR
* Initiating the Session Request Protocol
* @param None
* @retval : status
*/
static
uint32_t
USB_OTG_HandleSessionRequest_ISR
(
USB_OTG_CORE_HANDLE
*
pdev
)
{
USB_OTG_GINTSTS_TypeDef
gintsts
;
USB_OTG_GOTGCTL_TypeDef
gotgctl
;
gotgctl
.
d32
=
0
;
gintsts
.
d32
=
0
;
gotgctl
.
d32
=
USB_OTG_READ_REG32
(
&
pdev
->
regs
.
GREGS
->
GOTGCTL
);
if
(
USB_OTG_IsDeviceMode
(
pdev
)
&&
(
gotgctl
.
b
.
bsesvld
))
{
}
else
if
(
gotgctl
.
b
.
asesvld
)
{
}
/* Clear interrupt */
gintsts
.
d32
=
0
;
gintsts
.
b
.
sessreqintr
=
1
;
USB_OTG_WRITE_REG32
(
&
pdev
->
regs
.
GREGS
->
GINTSTS
,
gintsts
.
d32
);
return
1
;
}
/**
* @brief USB_OTG_InitiateSRP
* Initiate an srp session
* @param None
* @retval : None
*/
void
USB_OTG_InitiateSRP
(
USB_OTG_CORE_HANDLE
*
pdev
)
{
USB_OTG_GOTGCTL_TypeDef
otgctl
;
otgctl
.
d32
=
0
;
otgctl
.
d32
=
USB_OTG_READ_REG32
(
&
pdev
->
regs
.
GREGS
->
GOTGCTL
);
if
(
otgctl
.
b
.
sesreq
)
{
return
;
/* SRP in progress */
}
otgctl
.
b
.
sesreq
=
1
;
USB_OTG_WRITE_REG32
(
&
pdev
->
regs
.
GREGS
->
GOTGCTL
,
otgctl
.
d32
);
}
/**
* @brief USB_OTG_InitiateHNP
* Initiate HNP
* @param None
* @retval : None
*/
void
USB_OTG_InitiateHNP
(
USB_OTG_CORE_HANDLE
*
pdev
,
uint8_t
state
,
uint8_t
mode
)
{
USB_OTG_GOTGCTL_TypeDef
otgctl
;
USB_OTG_HPRT0_TypeDef
hprt0
;
otgctl
.
d32
=
0
;
hprt0
.
d32
=
0
;
otgctl
.
d32
=
USB_OTG_READ_REG32
(
&
pdev
->
regs
.
GREGS
->
GOTGCTL
);
if
(
mode
)
{
/* Device mode */
if
(
state
)
{
otgctl
.
b
.
devhnpen
=
1
;
/* B-Dev has been enabled to perform HNP */
otgctl
.
b
.
hnpreq
=
1
;
/* Initiate an HNP req. to the connected USB host*/
USB_OTG_WRITE_REG32
(
&
pdev
->
regs
.
GREGS
->
GOTGCTL
,
otgctl
.
d32
);
}
}
else
{
/* Host mode */
if
(
state
)
{
otgctl
.
b
.
hstsethnpen
=
1
;
/* A-Dev has enabled B-device for HNP */
USB_OTG_WRITE_REG32
(
&
pdev
->
regs
.
GREGS
->
GOTGCTL
,
otgctl
.
d32
);
/* Suspend the bus so that B-dev will disconnect indicating the initial condition for HNP to DWC_Core */
hprt0
.
d32
=
USB_OTG_ReadHPRT0
(
pdev
);
hprt0
.
b
.
prtsusp
=
1
;
/* The core clear this bit when disconnect interrupt generated (GINTSTS.DisconnInt = '1') */
USB_OTG_WRITE_REG32
(
pdev
->
regs
.
HPRT0
,
hprt0
.
d32
);
}
}
}
/**
* @brief USB_OTG_GetCurrentState
* Return current OTG State
* @param None
* @retval : None
*/
uint32_t
USB_OTG_GetCurrentState
(
USB_OTG_CORE_HANDLE
*
pdev
)
{
return
pdev
->
otg
.
OTG_State
;
}
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
stm/stmusb/usb_otg.h
0 → 100644
View file @
75abee20
/**
******************************************************************************
* @file usb_otg.h
* @author MCD Application Team
* @version V2.1.0
* @date 19-March-2012
* @brief OTG Core Header
******************************************************************************
* @attention
*
* <h2><center>© COPYRIGHT 2012 STMicroelectronics</center></h2>
*
* Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
* You may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
*
* http://www.st.com/software_license_agreement_liberty_v2
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
******************************************************************************
*/
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __USB_OTG__
#define __USB_OTG__
/** @addtogroup USB_OTG_DRIVER
* @{
*/
/** @defgroup USB_OTG
* @brief This file is the
* @{
*/
/** @defgroup USB_OTG_Exported_Defines
* @{
*/
void
USB_OTG_InitiateSRP
(
USB_OTG_CORE_HANDLE
*
pdev
);
void
USB_OTG_InitiateHNP
(
USB_OTG_CORE_HANDLE
*
pdev
,
uint8_t
state
,
uint8_t
mode
);
void
USB_OTG_Switchback
(
USB_OTG_CORE_HANDLE
*
pdev
);
uint32_t
USB_OTG_GetCurrentState
(
USB_OTG_CORE_HANDLE
*
pdev
);
/**
* @}
*/
/** @defgroup USB_OTG_Exported_Types
* @{
*/
/**
* @}
*/
/** @defgroup USB_OTG_Exported_Macros
* @{
*/
/**
* @}
*/
/** @defgroup USB_OTG_Exported_Variables
* @{
*/
/**
* @}
*/
/** @defgroup USB_OTG_Exported_FunctionsPrototype
* @{
*/
/**
* @}
*/
#endif //__USB_OTG__
/**
* @}
*/
/**
* @}
*/
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
stm/
li
b/usb_regs.h
→
stm/
stmus
b/usb_regs.h
View file @
75abee20
...
...
@@ -64,7 +64,7 @@
#define USB_OTG_DATA_FIFO_SIZE 0x1000
#define USB_OTG_MAX_TX_FIFOS
4 // XXX check we can make it this small!
#define USB_OTG_MAX_TX_FIFOS
15
#define USB_OTG_HS_MAX_PACKET_SIZE 512
#define USB_OTG_FS_MAX_PACKET_SIZE 64
...
...
stm/
lib
/usbd_cdc_core.h
→
stm/
stmusbd
/usbd_cdc_core.h
View file @
75abee20
File moved
stm/
lib
/usbd_cdc_vcp.c
→
stm/
stmusbd
/usbd_cdc_vcp.c
View file @
75abee20
...
...
@@ -32,7 +32,6 @@
/* Includes ------------------------------------------------------------------*/
#include
"usbd_conf.h"
#include
"usbd_cdc_vcp.h"
#include
"std.h"
/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
...
...
stm/
lib
/usbd_cdc_vcp.h
→
stm/
stmusbd
/usbd_cdc_vcp.h
View file @
75abee20
File moved
stm/
lib
/usbd_conf.h
→
stm/
stmusbd
/usbd_conf.h
View file @
75abee20
File moved
stm/
lib
/usbd_core.c
→
stm/
stmusbd
/usbd_core.c
View file @
75abee20
File moved
stm/
lib
/usbd_core.h
→
stm/
stmusbd
/usbd_core.h
View file @
75abee20
File moved
stm/
lib
/usbd_def.h
→
stm/
stmusbd
/usbd_def.h
View file @
75abee20
File moved
stm/
lib
/usbd_desc.c
→
stm/
stmusbd
/usbd_desc.c
View file @
75abee20
File moved
stm/
lib
/usbd_desc.h
→
stm/
stmusbd
/usbd_desc.h
View file @
75abee20
File moved
stm/
lib
/usbd_ioreq.c
→
stm/
stmusbd
/usbd_ioreq.c
View file @
75abee20
File moved
stm/
lib
/usbd_ioreq.h
→
stm/
stmusbd
/usbd_ioreq.h
View file @
75abee20
File moved
stm/
lib
/usbd_msc_bot.c
→
stm/
stmusbd
/usbd_msc_bot.c
View file @
75abee20
File moved
stm/
lib
/usbd_msc_bot.h
→
stm/
stmusbd
/usbd_msc_bot.h
View file @
75abee20
File moved
stm/
lib
/usbd_msc_data.c
→
stm/
stmusbd
/usbd_msc_data.c
View file @
75abee20
File moved
stm/
lib
/usbd_msc_data.h
→
stm/
stmusbd
/usbd_msc_data.h
View file @
75abee20
File moved
stm/
lib
/usbd_msc_mem.h
→
stm/
stmusbd
/usbd_msc_mem.h
View file @
75abee20
File moved
stm/
lib
/usbd_msc_scsi.c
→
stm/
stmusbd
/usbd_msc_scsi.c
View file @
75abee20
File moved
Prev
1
2
3
4
5
6
Next
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment