From 67ac09b2f3e66f2a59261d189a0128644918727c Mon Sep 17 00:00:00 2001 From: Giovanni Di Sirio Date: Sat, 9 Sep 2017 16:45:34 +0000 Subject: Moved wakeup logic in LLD. git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@10572 35acf78f-673a-0410-8e92-d51de3d6d3f4 --- os/hal/ports/STM32/LLD/OTGv1/hal_usb_lld.h | 25 +++++++++++++++++-------- os/hal/ports/STM32/LLD/USBv1/hal_usb_lld.h | 25 +++++++++++++++++-------- 2 files changed, 34 insertions(+), 16 deletions(-) (limited to 'os/hal/ports/STM32') diff --git a/os/hal/ports/STM32/LLD/OTGv1/hal_usb_lld.h b/os/hal/ports/STM32/LLD/OTGv1/hal_usb_lld.h index 4c4177133..ba5e4fc2f 100644 --- a/os/hal/ports/STM32/LLD/OTGv1/hal_usb_lld.h +++ b/os/hal/ports/STM32/LLD/OTGv1/hal_usb_lld.h @@ -142,6 +142,13 @@ #define STM32_USB_OTGFIFO_FILL_BASEPRI 0 #endif +/** + * @brief Host wake-up procedure duration. + */ +#if !defined(USB_HOST_WAKEUP_DURATION) || defined(__DOXYGEN__) +#define USB_HOST_WAKEUP_DURATION 2 +#endif + /*===========================================================================*/ /* Derived constants and error checks. */ /*===========================================================================*/ @@ -242,6 +249,10 @@ #error "the USB OTG driver requires a 48MHz clock" #endif +#if (USB_HOST_WAKEUP_DURATION < 2) || (USB_HOST_WAKEUP_DURATION > 15) +#error "invalid USB_HOST_WAKEUP_DURATION setting, it must be between 2 and 15" +#endif + /*===========================================================================*/ /* Driver data structures and types. */ /*===========================================================================*/ @@ -565,14 +576,12 @@ struct USBDriver { * * @notapi */ -#define usb_lld_start_wakeup_host(usbp) ((usbp)->otg->DCTL |= DCTL_RWUSIG) - -/** - * @brief Stop of host wake-up procedure. - * - * @notapi - */ -#define usb_lld_stop_wakeup_host(usbp) ((usbp)->otg->DCTL &= ~DCTL_RWUSIG) +#define usb_lld_wakeup_host(usbp) \ + do{ \ + (usbp)->otg->DCTL |= DCTL_RWUSIG; \ + osalThreadSleepMilliseconds(USB_HOST_WAKEUP_DURATION); \ + (usbp)->otg->DCTL &= ~DCTL_RWUSIG; \ + } while (false) /*===========================================================================*/ /* External declarations. */ diff --git a/os/hal/ports/STM32/LLD/USBv1/hal_usb_lld.h b/os/hal/ports/STM32/LLD/USBv1/hal_usb_lld.h index db199e33d..b1073acf9 100644 --- a/os/hal/ports/STM32/LLD/USBv1/hal_usb_lld.h +++ b/os/hal/ports/STM32/LLD/USBv1/hal_usb_lld.h @@ -105,6 +105,13 @@ #define STM32_USB_USE_FAST_COPY FALSE #endif +/** + * @brief Host wake-up procedure duration. + */ +#if !defined(USB_HOST_WAKEUP_DURATION) || defined(__DOXYGEN__) +#define USB_HOST_WAKEUP_DURATION 2 +#endif + /*===========================================================================*/ /* Derived constants and error checks. */ /*===========================================================================*/ @@ -148,6 +155,10 @@ #error "STM32_USB1_LP_NUMBER not defined" #endif +#if (USB_HOST_WAKEUP_DURATION < 2) || (USB_HOST_WAKEUP_DURATION > 15) +#error "invalid USB_HOST_WAKEUP_DURATION setting, it must be between 2 and 15" +#endif + /*===========================================================================*/ /* Driver data structures and types. */ /*===========================================================================*/ @@ -453,14 +464,12 @@ struct USBDriver { * * @notapi */ -#define usb_lld_start_wakeup_host(usbp) (STM32_USB->CNTR |= USB_CNTR_RESUME) - -/** - * @brief Stop of host wake-up procedure. - * - * @notapi - */ -#define usb_lld_stop_wakeup_host(usbp) (STM32_USB->CNTR &= ~USB_CNTR_RESUME) +#define usb_lld_wakeup_host(usbp) \ + do{ \ + STM32_USB->CNTR |= USB_CNTR_RESUME; \ + osalThreadSleepMilliseconds(USB_HOST_WAKEUP_DURATION); \ + STM32_USB->CNTR &= ~USB_CNTR_RESUME; \ + } while (false) /*===========================================================================*/ /* External declarations. */ -- cgit v1.2.3