ソースを参照

hotfix incorrect epsize alignment. ASM drivers are OK

Dmitry 6 年 前
コミット
7bc55c70c5

+ 3 - 5
src/usbd_stm32f103_devfs.c

@@ -312,12 +312,10 @@ bool ep_config(uint8_t ep, uint8_t eptype, uint16_t epsize) {
         uint16_t _pma;
         if (epsize > 62) {
             if (epsize & 0x1F) {
-                epsize &= 0x1F;
-            } else {
-                epsize -= 0x20;
+                epsize &= ~0x1F;
+                epsize += 0x20;
             }
-            _rxcnt = 0x8000 | (epsize << 5);
-            epsize += 0x20;
+            _rxcnt = 0x8000 - 0x20 + (epsize << 5);
         } else {
             _rxcnt = epsize << 9;
         }

+ 3 - 5
src/usbd_stm32l052_devfs.c

@@ -234,12 +234,10 @@ bool ep_config(uint8_t ep, uint8_t eptype, uint16_t epsize) {
         uint16_t _pma;
         if (epsize > 62) {
             if (epsize & 0x1F) {
-                epsize &= 0x1F;
-            } else {
-                epsize -= 0x20;
+                epsize &= ~0x1F;
+                epsize += 0x20;
             }
-            _rxcnt = 0x8000 | (epsize << 5);
-            epsize += 0x20;
+            _rxcnt = 0x8000 - 0x20 + (epsize << 5);
         } else {
             _rxcnt = epsize << 9;
         }

+ 3 - 5
src/usbd_stm32l100_devfs.c

@@ -222,12 +222,10 @@ bool ep_config(uint8_t ep, uint8_t eptype, uint16_t epsize) {
         uint16_t _pma;
         if (epsize > 62) {
             if (epsize & 0x1F) {
-                epsize &= 0x1F;
-            } else {
-                epsize -= 0x20;
+                epsize &= ~0x1F;
+                epsize += 0x20;
             }
-            _rxcnt = 0x8000 | (epsize << 5);
-            epsize += 0x20;
+            _rxcnt = 0x8000 - 0x20 + (epsize << 5);
         } else {
             _rxcnt = epsize << 9;
         }

+ 3 - 5
src/usbd_stm32l433_devfs.c

@@ -239,12 +239,10 @@ bool ep_config(uint8_t ep, uint8_t eptype, uint16_t epsize) {
         uint16_t _pma;
         if (epsize > 62) {
             if (epsize & 0x1F) {
-                epsize &= 0x1F;
-            } else {
-                epsize -= 0x20;
+                epsize &= ~0x1F;
+                epsize += 0x20;
             }
-            _rxcnt = 0x8000 | (epsize << 5);
-            epsize += 0x20;
+            _rxcnt = 0x8000 - 0x20 + (epsize << 5);
         } else {
             _rxcnt = epsize << 9;
         }