瀏覽代碼

Unify behaviour of wait on AVR (#14025)

Joel Challis 3 年之前
父節點
當前提交
2bc8215ce5
共有 1 個文件被更改,包括 20 次插入2 次删除
  1. 20 2
      tmk_core/common/avr/_wait.h

+ 20 - 2
tmk_core/common/avr/_wait.h

@@ -17,8 +17,26 @@
 
 #include <util/delay.h>
 
-#define wait_ms(ms) _delay_ms(ms)
-#define wait_us(us) _delay_us(us)
+#define wait_ms(ms)                             \
+    do {                                        \
+        if (__builtin_constant_p(ms)) {         \
+            _delay_ms(ms);                      \
+        } else {                                \
+            for (uint16_t i = ms; i > 0; i--) { \
+                _delay_ms(1);                   \
+            }                                   \
+        }                                       \
+    } while (0)
+#define wait_us(us)                             \
+    do {                                        \
+        if (__builtin_constant_p(us)) {         \
+            _delay_us(us);                      \
+        } else {                                \
+            for (uint16_t i = us; i > 0; i--) { \
+                _delay_us(1);                   \
+            }                                   \
+        }                                       \
+    } while (0)
 
 /* The AVR series GPIOs have a one clock read delay for changes in the digital input signal.
  * But here's more margin to make it two clocks. */