mirror of https://github.com/ARMmbed/mbed-os.git
Convert USB library from em_int to em_core
parent
e900d5a04d
commit
2becfbe2e4
|
|
@ -45,8 +45,6 @@
|
||||||
#define EFM32_WEAK SL_WEAK
|
#define EFM32_WEAK SL_WEAK
|
||||||
#define EFM32_ATTRIBUTE_SECTION(X) SL_ATTRIBUTE_SECTION(X)
|
#define EFM32_ATTRIBUTE_SECTION(X) SL_ATTRIBUTE_SECTION(X)
|
||||||
|
|
||||||
#include "em_int.h"
|
|
||||||
|
|
||||||
#if defined( USB_USE_PRINTF )
|
#if defined( USB_USE_PRINTF )
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,7 @@
|
||||||
#if defined( USB_DEVICE )
|
#if defined( USB_DEVICE )
|
||||||
|
|
||||||
#include "em_cmu.h"
|
#include "em_cmu.h"
|
||||||
|
#include "em_core.h"
|
||||||
#include "em_usbtypes.h"
|
#include "em_usbtypes.h"
|
||||||
#include "em_usbhal.h"
|
#include "em_usbhal.h"
|
||||||
#include "em_usbd.h"
|
#include "em_usbd.h"
|
||||||
|
|
@ -69,9 +70,10 @@ static const char *stateNames[] =
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
void USBD_AbortAllTransfers( void )
|
void USBD_AbortAllTransfers( void )
|
||||||
{
|
{
|
||||||
INT_Disable();
|
CORE_DECLARE_IRQ_STATE;
|
||||||
|
CORE_ENTER_CRITICAL();
|
||||||
USBDHAL_AbortAllTransfers( USB_STATUS_EP_ABORTED );
|
USBDHAL_AbortAllTransfers( USB_STATUS_EP_ABORTED );
|
||||||
INT_Enable();
|
CORE_EXIT_CRITICAL();
|
||||||
}
|
}
|
||||||
|
|
||||||
/***************************************************************************//**
|
/***************************************************************************//**
|
||||||
|
|
@ -85,6 +87,7 @@ int USBD_AbortTransfer( int epAddr )
|
||||||
{
|
{
|
||||||
USB_XferCompleteCb_TypeDef callback;
|
USB_XferCompleteCb_TypeDef callback;
|
||||||
USBD_Ep_TypeDef *ep = USBD_GetEpFromAddr( epAddr );
|
USBD_Ep_TypeDef *ep = USBD_GetEpFromAddr( epAddr );
|
||||||
|
CORE_DECLARE_IRQ_STATE;
|
||||||
|
|
||||||
if ( ep == NULL )
|
if ( ep == NULL )
|
||||||
{
|
{
|
||||||
|
|
@ -100,10 +103,10 @@ int USBD_AbortTransfer( int epAddr )
|
||||||
return USB_STATUS_ILLEGAL;
|
return USB_STATUS_ILLEGAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
INT_Disable();
|
CORE_ENTER_CRITICAL();
|
||||||
if ( ep->state == D_EP_IDLE )
|
if ( ep->state == D_EP_IDLE )
|
||||||
{
|
{
|
||||||
INT_Enable();
|
CORE_EXIT_CRITICAL();
|
||||||
return USB_STATUS_OK;
|
return USB_STATUS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -125,7 +128,7 @@ int USBD_AbortTransfer( int epAddr )
|
||||||
callback( USB_STATUS_EP_ABORTED, ep->xferred, ep->remaining );
|
callback( USB_STATUS_EP_ABORTED, ep->xferred, ep->remaining );
|
||||||
}
|
}
|
||||||
|
|
||||||
INT_Enable();
|
CORE_EXIT_CRITICAL();
|
||||||
return USB_STATUS_OK;
|
return USB_STATUS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -139,9 +142,10 @@ int USBD_AbortTransfer( int epAddr )
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
void USBD_Connect( void )
|
void USBD_Connect( void )
|
||||||
{
|
{
|
||||||
INT_Disable();
|
CORE_DECLARE_IRQ_STATE;
|
||||||
|
CORE_ENTER_CRITICAL();
|
||||||
USBDHAL_Connect();
|
USBDHAL_Connect();
|
||||||
INT_Enable();
|
CORE_EXIT_CRITICAL();
|
||||||
}
|
}
|
||||||
|
|
||||||
/***************************************************************************//**
|
/***************************************************************************//**
|
||||||
|
|
@ -154,9 +158,10 @@ void USBD_Connect( void )
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
void USBD_Disconnect( void )
|
void USBD_Disconnect( void )
|
||||||
{
|
{
|
||||||
INT_Disable();
|
CORE_DECLARE_IRQ_STATE;
|
||||||
|
CORE_ENTER_CRITICAL();
|
||||||
USBDHAL_Disconnect();
|
USBDHAL_Disconnect();
|
||||||
INT_Enable();
|
CORE_EXIT_CRITICAL();
|
||||||
}
|
}
|
||||||
|
|
||||||
/***************************************************************************//**
|
/***************************************************************************//**
|
||||||
|
|
@ -239,6 +244,7 @@ const char *USBD_GetUsbStateName( USBD_State_TypeDef state )
|
||||||
int USBD_Init( const USBD_Init_TypeDef *p )
|
int USBD_Init( const USBD_Init_TypeDef *p )
|
||||||
{
|
{
|
||||||
USBD_Ep_TypeDef *ep;
|
USBD_Ep_TypeDef *ep;
|
||||||
|
CORE_DECLARE_IRQ_STATE;
|
||||||
|
|
||||||
#if !defined( USB_CORECLK_HFRCO ) || !defined( CMU_OSCENCMD_USHFRCOEN )
|
#if !defined( USB_CORECLK_HFRCO ) || !defined( CMU_OSCENCMD_USHFRCOEN )
|
||||||
/* Devices supporting crystal-less USB can use HFRCO or HFXO as core clock. */
|
/* Devices supporting crystal-less USB can use HFRCO or HFXO as core clock. */
|
||||||
|
|
@ -308,7 +314,7 @@ int USBD_Init( const USBD_Init_TypeDef *p )
|
||||||
*/
|
*/
|
||||||
totalRxFifoSize += 10 + 1 + ( 2 * (MAX_NUM_OUT_EPS + 1) );
|
totalRxFifoSize += 10 + 1 + ( 2 * (MAX_NUM_OUT_EPS + 1) );
|
||||||
|
|
||||||
INT_Disable();
|
CORE_ENTER_CRITICAL();
|
||||||
|
|
||||||
/* Enable USB clock */
|
/* Enable USB clock */
|
||||||
CMU->HFCORECLKEN0 |= CMU_HFCORECLKEN0_USB | CMU_HFCORECLKEN0_USBC;
|
CMU->HFCORECLKEN0 |= CMU_HFCORECLKEN0_USB | CMU_HFCORECLKEN0_USBC;
|
||||||
|
|
@ -339,7 +345,7 @@ int USBD_Init( const USBD_Init_TypeDef *p )
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
INT_Enable();
|
CORE_EXIT_CRITICAL();
|
||||||
DEBUG_USB_API_PUTS( "\nUSBD_Init(), FIFO setup error" );
|
DEBUG_USB_API_PUTS( "\nUSBD_Init(), FIFO setup error" );
|
||||||
EFM_ASSERT( false );
|
EFM_ASSERT( false );
|
||||||
return USB_STATUS_ILLEGAL;
|
return USB_STATUS_ILLEGAL;
|
||||||
|
|
@ -356,7 +362,7 @@ int USBD_Init( const USBD_Init_TypeDef *p )
|
||||||
USBD_SetUsbState( USBD_STATE_NONE );
|
USBD_SetUsbState( USBD_STATE_NONE );
|
||||||
}
|
}
|
||||||
|
|
||||||
INT_Enable();
|
CORE_EXIT_CRITICAL();
|
||||||
return USB_STATUS_OK;
|
return USB_STATUS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -389,6 +395,7 @@ int USBD_Init( const USBD_Init_TypeDef *p )
|
||||||
int USBD_Read( int epAddr, void *data, int byteCount,
|
int USBD_Read( int epAddr, void *data, int byteCount,
|
||||||
USB_XferCompleteCb_TypeDef callback )
|
USB_XferCompleteCb_TypeDef callback )
|
||||||
{
|
{
|
||||||
|
CORE_DECLARE_IRQ_STATE;
|
||||||
USBD_Ep_TypeDef *ep = USBD_GetEpFromAddr( epAddr );
|
USBD_Ep_TypeDef *ep = USBD_GetEpFromAddr( epAddr );
|
||||||
|
|
||||||
USB_PRINTF("USBD: Read addr %x, data %p, size %d, cb 0x%lx\n",
|
USB_PRINTF("USBD: Read addr %x, data %p, size %d, cb 0x%lx\n",
|
||||||
|
|
@ -416,24 +423,25 @@ int USBD_Read( int epAddr, void *data, int byteCount,
|
||||||
return USB_STATUS_ILLEGAL;
|
return USB_STATUS_ILLEGAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
INT_Disable();
|
CORE_ENTER_CRITICAL();
|
||||||
|
|
||||||
if ( USBDHAL_EpIsStalled( ep ) )
|
if ( USBDHAL_EpIsStalled( ep ) )
|
||||||
{
|
{
|
||||||
INT_Enable();
|
CORE_EXIT_CRITICAL();
|
||||||
DEBUG_USB_API_PUTS( "\nUSBD_Read(), Endpoint is halted" );
|
DEBUG_USB_API_PUTS( "\nUSBD_Read(), Endpoint is halted" );
|
||||||
return USB_STATUS_EP_STALLED;
|
return USB_STATUS_EP_STALLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( ep->state != D_EP_IDLE )
|
if ( ep->state != D_EP_IDLE )
|
||||||
{
|
{
|
||||||
INT_Enable();
|
CORE_EXIT_CRITICAL();
|
||||||
DEBUG_USB_API_PUTS( "\nUSBD_Read(), Endpoint is busy" );
|
DEBUG_USB_API_PUTS( "\nUSBD_Read(), Endpoint is busy" );
|
||||||
return USB_STATUS_EP_BUSY;
|
return USB_STATUS_EP_BUSY;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( ( ep->num > 0 ) && ( USBD_GetUsbState() != USBD_STATE_CONFIGURED ) )
|
if ( ( ep->num > 0 ) && ( USBD_GetUsbState() != USBD_STATE_CONFIGURED ) )
|
||||||
{
|
{
|
||||||
INT_Enable();
|
CORE_EXIT_CRITICAL();
|
||||||
DEBUG_USB_API_PUTS( "\nUSBD_Read(), Device not configured" );
|
DEBUG_USB_API_PUTS( "\nUSBD_Read(), Device not configured" );
|
||||||
return USB_STATUS_DEVICE_UNCONFIGURED;
|
return USB_STATUS_DEVICE_UNCONFIGURED;
|
||||||
}
|
}
|
||||||
|
|
@ -448,7 +456,7 @@ int USBD_Read( int epAddr, void *data, int byteCount,
|
||||||
}
|
}
|
||||||
else if ( ep->in != false )
|
else if ( ep->in != false )
|
||||||
{
|
{
|
||||||
INT_Enable();
|
CORE_EXIT_CRITICAL();
|
||||||
DEBUG_USB_API_PUTS( "\nUSBD_Read(), Illegal EP direction" );
|
DEBUG_USB_API_PUTS( "\nUSBD_Read(), Illegal EP direction" );
|
||||||
EFM_ASSERT( false );
|
EFM_ASSERT( false );
|
||||||
return USB_STATUS_ILLEGAL;
|
return USB_STATUS_ILLEGAL;
|
||||||
|
|
@ -458,7 +466,7 @@ int USBD_Read( int epAddr, void *data, int byteCount,
|
||||||
ep->xferCompleteCb = callback;
|
ep->xferCompleteCb = callback;
|
||||||
|
|
||||||
USBD_ArmEp( ep );
|
USBD_ArmEp( ep );
|
||||||
INT_Enable();
|
CORE_EXIT_CRITICAL();
|
||||||
return USB_STATUS_OK;
|
return USB_STATUS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -477,22 +485,26 @@ int USBD_Read( int epAddr, void *data, int byteCount,
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
int USBD_RemoteWakeup( void )
|
int USBD_RemoteWakeup( void )
|
||||||
{
|
{
|
||||||
INT_Disable();
|
CORE_DECLARE_IRQ_STATE;
|
||||||
|
CORE_ENTER_CRITICAL();
|
||||||
|
|
||||||
if ( ( dev->state != USBD_STATE_SUSPENDED ) ||
|
if ( ( dev->state != USBD_STATE_SUSPENDED ) ||
|
||||||
( dev->remoteWakeupEnabled == false ) )
|
( dev->remoteWakeupEnabled == false ) )
|
||||||
{
|
{
|
||||||
INT_Enable();
|
CORE_EXIT_CRITICAL();
|
||||||
DEBUG_USB_API_PUTS( "\nUSBD_RemoteWakeup(), Illegal remote wakeup" );
|
DEBUG_USB_API_PUTS( "\nUSBD_RemoteWakeup(), Illegal remote wakeup" );
|
||||||
return USB_STATUS_ILLEGAL;
|
return USB_STATUS_ILLEGAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
USBDHAL_SetRemoteWakeup();
|
USBDHAL_SetRemoteWakeup();
|
||||||
INT_Enable();
|
CORE_EXIT_CRITICAL();
|
||||||
|
|
||||||
USBTIMER_DelayMs( 10 );
|
USBTIMER_DelayMs( 10 );
|
||||||
INT_Disable();
|
|
||||||
|
CORE_ENTER_CRITICAL();
|
||||||
USBDHAL_ClearRemoteWakeup();
|
USBDHAL_ClearRemoteWakeup();
|
||||||
INT_Enable();
|
CORE_EXIT_CRITICAL();
|
||||||
|
|
||||||
return USB_STATUS_OK;
|
return USB_STATUS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -565,6 +577,7 @@ void USBD_SetUsbState( USBD_State_TypeDef newState )
|
||||||
int USBD_StallEp( int epAddr )
|
int USBD_StallEp( int epAddr )
|
||||||
{
|
{
|
||||||
USB_Status_TypeDef retVal;
|
USB_Status_TypeDef retVal;
|
||||||
|
CORE_DECLARE_IRQ_STATE;
|
||||||
USBD_Ep_TypeDef *ep = USBD_GetEpFromAddr( epAddr );
|
USBD_Ep_TypeDef *ep = USBD_GetEpFromAddr( epAddr );
|
||||||
|
|
||||||
if ( ep == NULL )
|
if ( ep == NULL )
|
||||||
|
|
@ -581,9 +594,9 @@ int USBD_StallEp( int epAddr )
|
||||||
return USB_STATUS_ILLEGAL;
|
return USB_STATUS_ILLEGAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
INT_Disable();
|
CORE_ENTER_CRITICAL();
|
||||||
retVal = USBDHAL_StallEp( ep );
|
retVal = USBDHAL_StallEp( ep );
|
||||||
INT_Enable();
|
CORE_EXIT_CRITICAL();
|
||||||
|
|
||||||
if ( retVal != USB_STATUS_OK )
|
if ( retVal != USB_STATUS_OK )
|
||||||
{
|
{
|
||||||
|
|
@ -626,6 +639,7 @@ void USBD_Stop( void )
|
||||||
int USBD_UnStallEp( int epAddr )
|
int USBD_UnStallEp( int epAddr )
|
||||||
{
|
{
|
||||||
USB_Status_TypeDef retVal;
|
USB_Status_TypeDef retVal;
|
||||||
|
CORE_DECLARE_IRQ_STATE;
|
||||||
USBD_Ep_TypeDef *ep = USBD_GetEpFromAddr( epAddr );
|
USBD_Ep_TypeDef *ep = USBD_GetEpFromAddr( epAddr );
|
||||||
|
|
||||||
if ( ep == NULL )
|
if ( ep == NULL )
|
||||||
|
|
@ -642,9 +656,9 @@ int USBD_UnStallEp( int epAddr )
|
||||||
return USB_STATUS_ILLEGAL;
|
return USB_STATUS_ILLEGAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
INT_Disable();
|
CORE_ENTER_CRITICAL();
|
||||||
retVal = USBDHAL_UnStallEp( ep );
|
retVal = USBDHAL_UnStallEp( ep );
|
||||||
INT_Enable();
|
CORE_EXIT_CRITICAL();
|
||||||
|
|
||||||
if ( retVal != USB_STATUS_OK )
|
if ( retVal != USB_STATUS_OK )
|
||||||
{
|
{
|
||||||
|
|
@ -678,6 +692,7 @@ int USBD_Write( int epAddr, void *data, int byteCount,
|
||||||
USB_XferCompleteCb_TypeDef callback )
|
USB_XferCompleteCb_TypeDef callback )
|
||||||
{
|
{
|
||||||
USBD_Ep_TypeDef *ep = USBD_GetEpFromAddr( epAddr );
|
USBD_Ep_TypeDef *ep = USBD_GetEpFromAddr( epAddr );
|
||||||
|
CORE_DECLARE_IRQ_STATE;
|
||||||
|
|
||||||
USB_PRINTF("USBD: Write addr %x, data %p, size %d, cb 0x%lx\n",
|
USB_PRINTF("USBD: Write addr %x, data %p, size %d, cb 0x%lx\n",
|
||||||
epAddr, data, byteCount, (uint32_t)callback);
|
epAddr, data, byteCount, (uint32_t)callback);
|
||||||
|
|
@ -704,24 +719,25 @@ int USBD_Write( int epAddr, void *data, int byteCount,
|
||||||
return USB_STATUS_ILLEGAL;
|
return USB_STATUS_ILLEGAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
INT_Disable();
|
CORE_ENTER_CRITICAL();
|
||||||
|
|
||||||
if ( USBDHAL_EpIsStalled( ep ) )
|
if ( USBDHAL_EpIsStalled( ep ) )
|
||||||
{
|
{
|
||||||
INT_Enable();
|
CORE_EXIT_CRITICAL();
|
||||||
DEBUG_USB_API_PUTS( "\nUSBD_Write(), Endpoint is halted" );
|
DEBUG_USB_API_PUTS( "\nUSBD_Write(), Endpoint is halted" );
|
||||||
return USB_STATUS_EP_STALLED;
|
return USB_STATUS_EP_STALLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( ep->state != D_EP_IDLE )
|
if ( ep->state != D_EP_IDLE )
|
||||||
{
|
{
|
||||||
INT_Enable();
|
CORE_EXIT_CRITICAL();
|
||||||
DEBUG_USB_API_PUTS( "\nUSBD_Write(), Endpoint is busy" );
|
DEBUG_USB_API_PUTS( "\nUSBD_Write(), Endpoint is busy" );
|
||||||
return USB_STATUS_EP_BUSY;
|
return USB_STATUS_EP_BUSY;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( ( ep->num > 0 ) && ( USBD_GetUsbState() != USBD_STATE_CONFIGURED ) )
|
if ( ( ep->num > 0 ) && ( USBD_GetUsbState() != USBD_STATE_CONFIGURED ) )
|
||||||
{
|
{
|
||||||
INT_Enable();
|
CORE_EXIT_CRITICAL();
|
||||||
DEBUG_USB_API_PUTS( "\nUSBD_Write(), Device not configured" );
|
DEBUG_USB_API_PUTS( "\nUSBD_Write(), Device not configured" );
|
||||||
return USB_STATUS_DEVICE_UNCONFIGURED;
|
return USB_STATUS_DEVICE_UNCONFIGURED;
|
||||||
}
|
}
|
||||||
|
|
@ -736,7 +752,7 @@ int USBD_Write( int epAddr, void *data, int byteCount,
|
||||||
}
|
}
|
||||||
else if ( ep->in != true )
|
else if ( ep->in != true )
|
||||||
{
|
{
|
||||||
INT_Enable();
|
CORE_EXIT_CRITICAL();
|
||||||
DEBUG_USB_API_PUTS( "\nUSBD_Write(), Illegal EP direction" );
|
DEBUG_USB_API_PUTS( "\nUSBD_Write(), Illegal EP direction" );
|
||||||
EFM_ASSERT( false );
|
EFM_ASSERT( false );
|
||||||
return USB_STATUS_ILLEGAL;
|
return USB_STATUS_ILLEGAL;
|
||||||
|
|
@ -746,7 +762,7 @@ int USBD_Write( int epAddr, void *data, int byteCount,
|
||||||
ep->xferCompleteCb = callback;
|
ep->xferCompleteCb = callback;
|
||||||
|
|
||||||
USBD_ArmEp( ep );
|
USBD_ArmEp( ep );
|
||||||
INT_Enable();
|
CORE_EXIT_CRITICAL();
|
||||||
return USB_STATUS_OK;
|
return USB_STATUS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -841,6 +857,7 @@ static void USBD_ResetEndpoints(void)
|
||||||
int USBD_AddEndpoint(int epAddr, int transferType,
|
int USBD_AddEndpoint(int epAddr, int transferType,
|
||||||
int maxPacketSize, int bufferMult)
|
int maxPacketSize, int bufferMult)
|
||||||
{
|
{
|
||||||
|
CORE_DECLARE_IRQ_STATE;
|
||||||
USBD_Ep_TypeDef *ep;
|
USBD_Ep_TypeDef *ep;
|
||||||
|
|
||||||
numEps++;
|
numEps++;
|
||||||
|
|
@ -890,7 +907,7 @@ int USBD_AddEndpoint(int epAddr, int transferType,
|
||||||
ep->num, numEps, ep->in, ep->addr, ep->type, ep->packetSize, ep->fifoSize,
|
ep->num, numEps, ep->in, ep->addr, ep->type, ep->packetSize, ep->fifoSize,
|
||||||
totalTxFifoSize, totalRxFifoSize);
|
totalTxFifoSize, totalRxFifoSize);
|
||||||
|
|
||||||
INT_Disable();
|
CORE_ENTER_CRITICAL();
|
||||||
#if defined( CMU_OSCENCMD_USHFRCOEN )
|
#if defined( CMU_OSCENCMD_USHFRCOEN )
|
||||||
/* Happy Gecko workaround: disable LEM GATE mode if using ISOC endpoints. */
|
/* Happy Gecko workaround: disable LEM GATE mode if using ISOC endpoints. */
|
||||||
if ( transferType == USB_EPTYPE_ISOC )
|
if ( transferType == USB_EPTYPE_ISOC )
|
||||||
|
|
@ -900,7 +917,7 @@ int USBD_AddEndpoint(int epAddr, int transferType,
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int ret = USBDHAL_ReconfigureFifos(totalRxFifoSize, totalTxFifoSize);
|
int ret = USBDHAL_ReconfigureFifos(totalRxFifoSize, totalTxFifoSize);
|
||||||
INT_Enable();
|
CORE_EXIT_CRITICAL();
|
||||||
|
|
||||||
if( ret != USB_STATUS_OK ) {
|
if( ret != USB_STATUS_OK ) {
|
||||||
return ret;
|
return ret;
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,7 @@
|
||||||
#if defined( USB_DEVICE )
|
#if defined( USB_DEVICE )
|
||||||
|
|
||||||
#include "em_cmu.h"
|
#include "em_cmu.h"
|
||||||
|
#include "em_core.h"
|
||||||
#include "em_usbtypes.h"
|
#include "em_usbtypes.h"
|
||||||
#include "em_usbhal.h"
|
#include "em_usbhal.h"
|
||||||
#include "em_usbd.h"
|
#include "em_usbd.h"
|
||||||
|
|
@ -106,8 +107,9 @@ void USB_IRQHandler( void )
|
||||||
{
|
{
|
||||||
uint32_t status;
|
uint32_t status;
|
||||||
bool servedVbusInterrupt = false;
|
bool servedVbusInterrupt = false;
|
||||||
|
CORE_DECLARE_IRQ_STATE;
|
||||||
|
|
||||||
INT_Disable();
|
CORE_ENTER_CRITICAL();
|
||||||
|
|
||||||
#if ( USB_PWRSAVE_MODE )
|
#if ( USB_PWRSAVE_MODE )
|
||||||
if ( USBD_poweredDown )
|
if ( USBD_poweredDown )
|
||||||
|
|
@ -192,7 +194,7 @@ void USB_IRQHandler( void )
|
||||||
status = USBHAL_GetCoreInts();
|
status = USBHAL_GetCoreInts();
|
||||||
if ( status == 0 )
|
if ( status == 0 )
|
||||||
{
|
{
|
||||||
INT_Enable();
|
CORE_EXIT_CRITICAL();
|
||||||
if ( !servedVbusInterrupt )
|
if ( !servedVbusInterrupt )
|
||||||
{
|
{
|
||||||
DEBUG_USB_INT_LO_PUTS( "\nSinT" );
|
DEBUG_USB_INT_LO_PUTS( "\nSinT" );
|
||||||
|
|
@ -209,7 +211,7 @@ void USB_IRQHandler( void )
|
||||||
HANDLE_INT( USB_GINTSTS_IEPINT )
|
HANDLE_INT( USB_GINTSTS_IEPINT )
|
||||||
HANDLE_INT( USB_GINTSTS_OEPINT )
|
HANDLE_INT( USB_GINTSTS_OEPINT )
|
||||||
|
|
||||||
INT_Enable();
|
CORE_EXIT_CRITICAL();
|
||||||
|
|
||||||
if ( status != 0 )
|
if ( status != 0 )
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -199,9 +199,7 @@ USB_Status_TypeDef USBDHAL_CoreInit( uint32_t totalRxFifoSize,
|
||||||
USB_GUSBCFG_FORCEDEVMODE;
|
USB_GUSBCFG_FORCEDEVMODE;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
INT_Enable();
|
|
||||||
USBTIMER_DelayMs( 50 );
|
USBTIMER_DelayMs( 50 );
|
||||||
INT_Disable();
|
|
||||||
|
|
||||||
/* Set device speed */
|
/* Set device speed */
|
||||||
USB->DCFG = ( USB->DCFG & ~_USB_DCFG_DEVSPD_MASK ) | 3; /* Full speed PHY */
|
USB->DCFG = ( USB->DCFG & ~_USB_DCFG_DEVSPD_MASK ) | 3; /* Full speed PHY */
|
||||||
|
|
@ -649,9 +647,7 @@ USB_Status_TypeDef USBHHAL_CoreInit( uint32_t rxFifoSize,
|
||||||
~(GUSBCFG_WO_BITMASK | USB_GUSBCFG_FORCEDEVMODE ) ) |
|
~(GUSBCFG_WO_BITMASK | USB_GUSBCFG_FORCEDEVMODE ) ) |
|
||||||
USB_GUSBCFG_FORCEHSTMODE;
|
USB_GUSBCFG_FORCEHSTMODE;
|
||||||
|
|
||||||
INT_Enable();
|
|
||||||
USBTIMER_DelayMs( 100 );
|
USBTIMER_DelayMs( 100 );
|
||||||
INT_Disable();
|
|
||||||
|
|
||||||
/* Set 48 MHz PHY clock, FS/LS mode */
|
/* Set 48 MHz PHY clock, FS/LS mode */
|
||||||
USB->HCFG = ( USB->HCFG & ~_USB_HCFG_FSLSPCLKSEL_MASK ) |
|
USB->HCFG = ( USB->HCFG & ~_USB_HCFG_FSLSPCLKSEL_MASK ) |
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,7 @@
|
||||||
#include "em_usb.h"
|
#include "em_usb.h"
|
||||||
#if defined( USB_DEVICE ) || defined( USB_HOST )
|
#if defined( USB_DEVICE ) || defined( USB_HOST )
|
||||||
#include "em_cmu.h"
|
#include "em_cmu.h"
|
||||||
|
#include "em_core.h"
|
||||||
#include "em_timer.h"
|
#include "em_timer.h"
|
||||||
#include "em_usbtypes.h"
|
#include "em_usbtypes.h"
|
||||||
#include "em_usbhal.h"
|
#include "em_usbhal.h"
|
||||||
|
|
@ -244,8 +245,9 @@ void USBTIMER_Start( uint32_t id, uint32_t timeout,
|
||||||
{
|
{
|
||||||
uint32_t accumulated;
|
uint32_t accumulated;
|
||||||
USBTIMER_Timer_TypeDef *this, **last;
|
USBTIMER_Timer_TypeDef *this, **last;
|
||||||
|
CORE_DECLARE_IRQ_STATE;
|
||||||
|
|
||||||
INT_Disable();
|
CORE_ENTER_CRITICAL();
|
||||||
|
|
||||||
if ( timers[ id ].running )
|
if ( timers[ id ].running )
|
||||||
{
|
{
|
||||||
|
|
@ -255,7 +257,7 @@ void USBTIMER_Start( uint32_t id, uint32_t timeout,
|
||||||
if ( timeout == 0 )
|
if ( timeout == 0 )
|
||||||
{
|
{
|
||||||
callback();
|
callback();
|
||||||
INT_Enable();
|
CORE_EXIT_CRITICAL();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -297,7 +299,7 @@ void USBTIMER_Start( uint32_t id, uint32_t timeout,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
INT_Enable();
|
CORE_EXIT_CRITICAL();
|
||||||
}
|
}
|
||||||
|
|
||||||
/***************************************************************************//**
|
/***************************************************************************//**
|
||||||
|
|
@ -310,8 +312,9 @@ void USBTIMER_Start( uint32_t id, uint32_t timeout,
|
||||||
void USBTIMER_Stop( uint32_t id )
|
void USBTIMER_Stop( uint32_t id )
|
||||||
{
|
{
|
||||||
USBTIMER_Timer_TypeDef *this, **last;
|
USBTIMER_Timer_TypeDef *this, **last;
|
||||||
|
CORE_DECLARE_IRQ_STATE;
|
||||||
|
|
||||||
INT_Disable();
|
CORE_ENTER_CRITICAL();
|
||||||
|
|
||||||
if ( head ) /* Queue empty ? */
|
if ( head ) /* Queue empty ? */
|
||||||
{
|
{
|
||||||
|
|
@ -335,7 +338,7 @@ void USBTIMER_Stop( uint32_t id )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
INT_Enable();
|
CORE_EXIT_CRITICAL();
|
||||||
}
|
}
|
||||||
#endif /* ( NUM_QTIMERS > 0 ) */
|
#endif /* ( NUM_QTIMERS > 0 ) */
|
||||||
|
|
||||||
|
|
@ -347,8 +350,9 @@ void USBTIMER_Stop( uint32_t id )
|
||||||
static void TimerTick( void )
|
static void TimerTick( void )
|
||||||
{
|
{
|
||||||
USBTIMER_Callback_TypeDef cb;
|
USBTIMER_Callback_TypeDef cb;
|
||||||
|
CORE_DECLARE_IRQ_STATE;
|
||||||
|
|
||||||
INT_Disable();
|
CORE_ENTER_CRITICAL();
|
||||||
|
|
||||||
if ( head )
|
if ( head )
|
||||||
{
|
{
|
||||||
|
|
@ -372,7 +376,7 @@ static void TimerTick( void )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
INT_Enable();
|
CORE_EXIT_CRITICAL();
|
||||||
}
|
}
|
||||||
/** @endcond */
|
/** @endcond */
|
||||||
#endif /* ( NUM_QTIMERS > 0 ) */
|
#endif /* ( NUM_QTIMERS > 0 ) */
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue