mbed library sources. Supersedes mbed-src.

Fork of mbed-dev by mbed official

Revision:
153:fa9ff456f731
Parent:
149:156823d33999
Child:
167:e84263d55307
--- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_pcd.c	Thu Dec 15 11:48:27 2016 +0000
+++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_pcd.c	Tue Dec 20 17:27:56 2016 +0000
@@ -157,7 +157,8 @@
   {
     /* Allocate lock resource and initialize it */
     hpcd->Lock = HAL_UNLOCKED;
-
+	for (index = 0; index < hpcd->Init.dev_endpoints ; index++)
+	hpcd->EPLock[index].Lock = HAL_UNLOCKED;
     /* Init the low level hardware : GPIO, CLOCK, NVIC... */
     HAL_PCD_MspInit(hpcd);
   }
@@ -198,7 +199,6 @@
     hpcd->OUT_ep[index].xfer_buff = 0;
     hpcd->OUT_ep[index].xfer_len = 0;
   }
-
   /* Init Device */
   USB_DevInit(hpcd->Instance, hpcd->Init);
 
@@ -426,7 +426,7 @@
           if(( epint & USB_OTG_DIEPINT_XFRC) == USB_OTG_DIEPINT_XFRC)
           {
             fifoemptymsk = 0x1 << epnum;
-            USBx_DEVICE->DIEPEMPMSK &= ~fifoemptymsk;
+            atomic_clr_u32(&USBx_DEVICE->DIEPEMPMSK,  fifoemptymsk);
             
             CLEAR_IN_EP_INTR(epnum, USB_OTG_DIEPINT_XFRC);
             
@@ -1141,7 +1141,7 @@
   ep->is_in = 0;
   ep->num = ep_addr & 0x7F;
   
-  __HAL_LOCK(hpcd);
+  __HAL_LOCK(&hpcd->EPLock[ep_addr & 0x7F]);
   
   if ((ep_addr & 0x7F) == 0 )
   {
@@ -1151,7 +1151,7 @@
   {
     USB_EPStartXfer(hpcd->Instance, ep, hpcd->Init.dma_enable);
   }
-  __HAL_UNLOCK(hpcd);
+  __HAL_UNLOCK(&hpcd->EPLock[ep_addr & 0x7F]);
   
   return HAL_OK;
 }
@@ -1187,7 +1187,7 @@
   ep->is_in = 1;
   ep->num = ep_addr & 0x7F;
   
-  __HAL_LOCK(hpcd);
+  __HAL_LOCK(&hpcd->EPLock[ep_addr & 0x7F]);
   
   if ((ep_addr & 0x7F) == 0 )
   {
@@ -1198,7 +1198,7 @@
     USB_EPStartXfer(hpcd->Instance, ep,  hpcd->Init.dma_enable);
   }
   
-  __HAL_UNLOCK(hpcd);
+  __HAL_UNLOCK(&hpcd->EPLock[ep_addr & 0x7F]);
   
   return HAL_OK;
 }
@@ -1226,13 +1226,13 @@
   ep->num   = ep_addr & 0x7F;
   ep->is_in = ((ep_addr & 0x80) == 0x80);
   
-  __HAL_LOCK(hpcd);
+  __HAL_LOCK(&hpcd->EPLock[ep_addr & 0x7F]);
   USB_EPSetStall(hpcd->Instance , ep);
   if((ep_addr & 0x7F) == 0)
   {
     USB_EP0_OutStart(hpcd->Instance,  hpcd->Init.dma_enable, (uint8_t *)hpcd->Setup);
   }
-  __HAL_UNLOCK(hpcd); 
+  __HAL_UNLOCK(&hpcd->EPLock[ep_addr & 0x7F]);
   
   return HAL_OK;
 }
@@ -1260,9 +1260,9 @@
   ep->num   = ep_addr & 0x7F;
   ep->is_in = ((ep_addr & 0x80) == 0x80);
   
-  __HAL_LOCK(hpcd); 
+  __HAL_LOCK(&hpcd->EPLock[ep_addr & 0x7F]);
   USB_EPClearStall(hpcd->Instance , ep);
-  __HAL_UNLOCK(hpcd); 
+  __HAL_UNLOCK(&hpcd->EPLock[ep_addr & 0x7F]);
     
   return HAL_OK;
 }
@@ -1275,8 +1275,7 @@
   */
 HAL_StatusTypeDef HAL_PCD_EP_Flush(PCD_HandleTypeDef *hpcd, uint8_t ep_addr)
 {
-  __HAL_LOCK(hpcd); 
-  
+  __HAL_LOCK(&hpcd->EPLock[ep_addr & 0x7F]);
   if ((ep_addr & 0x80) == 0x80)
   {
     USB_FlushTxFifo(hpcd->Instance, ep_addr & 0x7F);
@@ -1286,7 +1285,7 @@
     USB_FlushRxFifo(hpcd->Instance);
   }
   
-  __HAL_UNLOCK(hpcd); 
+  __HAL_UNLOCK(&hpcd->EPLock[ep_addr & 0x7F]);
     
   return HAL_OK;
 }
@@ -1398,7 +1397,7 @@
   if(len <= 0)
   {
     fifoemptymsk = 0x1 << epnum;
-    USBx_DEVICE->DIEPEMPMSK &= ~fifoemptymsk;
+    atomic_clr_u32(&USBx_DEVICE->DIEPEMPMSK, fifoemptymsk);
     
   }