diff --git a/os/hal/ports/STM32/LLD/OTGv1/hal_usb_lld.c b/os/hal/ports/STM32/LLD/OTGv1/hal_usb_lld.c index 52e44f011..73f585f21 100644 --- a/os/hal/ports/STM32/LLD/OTGv1/hal_usb_lld.c +++ b/os/hal/ports/STM32/LLD/OTGv1/hal_usb_lld.c @@ -609,11 +609,25 @@ static void usb_lld_serve_interrupt(USBDriver *usbp) { otg_epin_handler(usbp, 2); if (src & (1 << 3)) otg_epin_handler(usbp, 3); -#if STM32_USB_USE_OTG2 +#if USB_MAX_ENDPOINTS >= 4 if (src & (1 << 4)) otg_epin_handler(usbp, 4); +#endif +#if USB_MAX_ENDPOINTS >= 5 if (src & (1 << 5)) otg_epin_handler(usbp, 5); +#endif +#if USB_MAX_ENDPOINTS >= 6 + if (src & (1 << 6)) + otg_epin_handler(usbp, 6); +#endif +#if USB_MAX_ENDPOINTS >= 7 + if (src & (1 << 7)) + otg_epin_handler(usbp, 7); +#endif +#if USB_MAX_ENDPOINTS >= 8 + if (src & (1 << 8)) + otg_epin_handler(usbp, 8); #endif } if (sts & GINTSTS_OEPINT) { @@ -625,11 +639,25 @@ static void usb_lld_serve_interrupt(USBDriver *usbp) { otg_epout_handler(usbp, 2); if (src & (1 << 19)) otg_epout_handler(usbp, 3); -#if STM32_USB_USE_OTG2 +#if USB_MAX_ENDPOINTS >= 4 if (src & (1 << 20)) otg_epout_handler(usbp, 4); +#endif +#if USB_MAX_ENDPOINTS >= 5 if (src & (1 << 21)) otg_epout_handler(usbp, 5); +#endif +#if USB_MAX_ENDPOINTS >= 6 + if (src & (1 << 22)) + otg_epout_handler(usbp, 6); +#endif +#if USB_MAX_ENDPOINTS >= 7 + if (src & (1 << 23)) + otg_epout_handler(usbp, 7); +#endif +#if USB_MAX_ENDPOINTS >= 8 + if (src & (1 << 24)) + otg_epout_handler(usbp, 8); #endif } } diff --git a/readme.txt b/readme.txt index dca319543..f6eaffd28 100644 --- a/readme.txt +++ b/readme.txt @@ -157,6 +157,8 @@ - RT: Merged RT4. - NIL: Merged NIL2. - NIL: Added STM32F7 demo. +- HAL: Fixed STM32 OTGv1 driver not serving interrupts for endpoints > 5 + (bug #816)(backported to 16.1.8). - VAR: Fixed BYTE_ORDER redefined in lwip_bindings/arch/cc.h (bug #814) (backported to 16.1.7). - HAL: Fixed setting alternate mode in STM32 GPIOv3 and GPIOv3 drivers can fail