From 3bbc7d36ad7baec2828ed30255d114ddd0de950e Mon Sep 17 00:00:00 2001 From: Giovanni Di Sirio Date: Fri, 26 Jun 2020 07:51:04 +0000 Subject: [PATCH] Added a new setting to STM32 USBv1 allowing for some clock deviation from 48MHz. Renamed setting USB_HOST_WAKEUP_DURATION to STM32_USB_HOST_WAKEUP_DURATION for consistency. git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@13726 27425a3e-05d8-49a3-a47f-9c15f0e5edd8 --- os/hal/ports/STM32/LLD/USBv1/hal_usb_lld.h | 30 +++++++++++++++------- readme.txt | 3 +++ testhal/STM32/multi/USB_CDC/.cproject | 1 + 3 files changed, 25 insertions(+), 9 deletions(-) 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 339cbc5bf..1270172fc 100644 --- a/os/hal/ports/STM32/LLD/USBv1/hal_usb_lld.h +++ b/os/hal/ports/STM32/LLD/USBv1/hal_usb_lld.h @@ -108,8 +108,15 @@ /** * @brief Host wake-up procedure duration. */ -#if !defined(USB_HOST_WAKEUP_DURATION) || defined(__DOXYGEN__) -#define USB_HOST_WAKEUP_DURATION 2 +#if !defined(STM32_USB_HOST_WAKEUP_DURATION) || defined(__DOXYGEN__) +#define STM32_USB_HOST_WAKEUP_DURATION 2 +#endif + +/** + * @brief Allowed deviation for the 48MHz clock. + */ +#if !defined(STM32_USB_48MHZ_DELTA) || defined(__DOXYGEN__) +#define STM32_USB_48MHZ_DELTA 0 #endif /*===========================================================================*/ @@ -135,10 +142,6 @@ #error "Invalid IRQ priority assigned to USB LP" #endif -#if STM32_USBCLK != 48000000 -#error "the USB driver requires a 48MHz clock" -#endif - #if !defined(STM32_USB1_HP_HANDLER) #error "STM32_USB1_HP_HANDLER not defined" #endif @@ -155,8 +158,17 @@ #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" +#if (STM32_USB_HOST_WAKEUP_DURATION < 2) || (STM32_USB_HOST_WAKEUP_DURATION > 15) +#error "invalid STM32_USB_HOST_WAKEUP_DURATION setting, it must be between 2 and 15" +#endif + +#if (STM32_USB_48MHZ_DELTA < 0) || (STM32_USB_48MHZ_DELTA > 250000) +#error "invalid STM32_USB_48MHZ_DELTA setting, it must not exceed 250000" +#endif + +#if (STM32_USBCLK < (48000000 - STM32_USB_48MHZ_DELTA)) || \ + (STM32_USBCLK > (48000000 + STM32_USB_48MHZ_DELTA)) +#error "the USB driver requires a 48MHz clock" #endif /*===========================================================================*/ @@ -467,7 +479,7 @@ struct USBDriver { #define usb_lld_wakeup_host(usbp) \ do { \ STM32_USB->CNTR |= USB_CNTR_RESUME; \ - osalThreadSleepMilliseconds(USB_HOST_WAKEUP_DURATION); \ + osalThreadSleepMilliseconds(STM32_USB_HOST_WAKEUP_DURATION); \ STM32_USB->CNTR &= ~USB_CNTR_RESUME; \ } while (false) diff --git a/readme.txt b/readme.txt index f69297b7d..eee7d018a 100644 --- a/readme.txt +++ b/readme.txt @@ -74,6 +74,9 @@ ***************************************************************************** *** Next *** +- NEW: Added a new setting to STM32 USBv1 allowing for some clock deviation + from 48MHz. Renamed setting USB_HOST_WAKEUP_DURATION to + STM32_USB_HOST_WAKEUP_DURATION for consistency. - NEW: Added entry for STM32L475 in STM32L4 registry header, updated all configuration files. - NEW: Updated CMSIS headers for STM32F7, G0, G4, H7, L0, L4, L4+. diff --git a/testhal/STM32/multi/USB_CDC/.cproject b/testhal/STM32/multi/USB_CDC/.cproject index e74ab8ab4..f9e087436 100644 --- a/testhal/STM32/multi/USB_CDC/.cproject +++ b/testhal/STM32/multi/USB_CDC/.cproject @@ -285,4 +285,5 @@ +