Moved wakeup logic in LLD.

git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@10572 35acf78f-673a-0410-8e92-d51de3d6d3f4
This commit is contained in:
Giovanni Di Sirio 2017-09-09 16:45:34 +00:00
parent 8204b9ce59
commit 67ac09b2f3
4 changed files with 35 additions and 34 deletions

View File

@ -245,21 +245,10 @@
#define USB_USE_WAIT FALSE #define USB_USE_WAIT FALSE
#endif #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. */ /* Derived constants and error checks. */
/*===========================================================================*/ /*===========================================================================*/
#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. */ /* Driver data structures and types. */
/*===========================================================================*/ /*===========================================================================*/

View File

@ -142,6 +142,13 @@
#define STM32_USB_OTGFIFO_FILL_BASEPRI 0 #define STM32_USB_OTGFIFO_FILL_BASEPRI 0
#endif #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. */ /* Derived constants and error checks. */
/*===========================================================================*/ /*===========================================================================*/
@ -242,6 +249,10 @@
#error "the USB OTG driver requires a 48MHz clock" #error "the USB OTG driver requires a 48MHz clock"
#endif #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. */ /* Driver data structures and types. */
/*===========================================================================*/ /*===========================================================================*/
@ -565,14 +576,12 @@ struct USBDriver {
* *
* @notapi * @notapi
*/ */
#define usb_lld_start_wakeup_host(usbp) ((usbp)->otg->DCTL |= DCTL_RWUSIG) #define usb_lld_wakeup_host(usbp) \
do{ \
/** (usbp)->otg->DCTL |= DCTL_RWUSIG; \
* @brief Stop of host wake-up procedure. osalThreadSleepMilliseconds(USB_HOST_WAKEUP_DURATION); \
* (usbp)->otg->DCTL &= ~DCTL_RWUSIG; \
* @notapi } while (false)
*/
#define usb_lld_stop_wakeup_host(usbp) ((usbp)->otg->DCTL &= ~DCTL_RWUSIG)
/*===========================================================================*/ /*===========================================================================*/
/* External declarations. */ /* External declarations. */

View File

@ -105,6 +105,13 @@
#define STM32_USB_USE_FAST_COPY FALSE #define STM32_USB_USE_FAST_COPY FALSE
#endif #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. */ /* Derived constants and error checks. */
/*===========================================================================*/ /*===========================================================================*/
@ -148,6 +155,10 @@
#error "STM32_USB1_LP_NUMBER not defined" #error "STM32_USB1_LP_NUMBER not defined"
#endif #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. */ /* Driver data structures and types. */
/*===========================================================================*/ /*===========================================================================*/
@ -453,14 +464,12 @@ struct USBDriver {
* *
* @notapi * @notapi
*/ */
#define usb_lld_start_wakeup_host(usbp) (STM32_USB->CNTR |= USB_CNTR_RESUME) #define usb_lld_wakeup_host(usbp) \
do{ \
/** STM32_USB->CNTR |= USB_CNTR_RESUME; \
* @brief Stop of host wake-up procedure. osalThreadSleepMilliseconds(USB_HOST_WAKEUP_DURATION); \
* STM32_USB->CNTR &= ~USB_CNTR_RESUME; \
* @notapi } while (false)
*/
#define usb_lld_stop_wakeup_host(usbp) (STM32_USB->CNTR &= ~USB_CNTR_RESUME)
/*===========================================================================*/ /*===========================================================================*/
/* External declarations. */ /* External declarations. */

View File

@ -644,13 +644,7 @@ void usbWakeupHost(USBDriver *usbp) {
if (usbp->state == USB_SUSPENDED) { if (usbp->state == USB_SUSPENDED) {
/* Starting host wakeup procedure.*/ /* Starting host wakeup procedure.*/
usb_lld_start_wakeup_host(usbp); usb_lld_wakeup_host(usbp);
/* Holding it for the configured time, it must be 2..15 msecs.*/
osalThreadSleepMilliseconds(USB_HOST_WAKEUP_DURATION);
/* Stopping host wake up procedure.*/
usb_lld_stop_wakeup_host(usbp);
} }
} }