aboutsummaryrefslogtreecommitdiff
path: root/arch/delay.h
diff options
context:
space:
mode:
authorSelene ToyKeeper2023-11-03 11:05:59 -0600
committerSelene ToyKeeper2023-11-03 11:05:59 -0600
commit3489015ff245861355f73674f79801279d95ea39 (patch)
tree87f188f4f407ae83fd98ff3e4ed0bcf81b4ae9d5 /arch/delay.h
parentmoved ATTINY and MODEL_NUMBER into $target/arch and $target/model, (diff)
downloadanduril-3489015ff245861355f73674f79801279d95ea39.tar.gz
anduril-3489015ff245861355f73674f79801279d95ea39.tar.bz2
anduril-3489015ff245861355f73674f79801279d95ea39.zip
renamed tk*.h to arch/*.h or fsm/*.h (part 1)
to get them out of the root dir, and to start cleaning up mcu/arch code
Diffstat (limited to 'arch/delay.h')
-rw-r--r--arch/delay.h58
1 files changed, 58 insertions, 0 deletions
diff --git a/arch/delay.h b/arch/delay.h
new file mode 100644
index 0000000..502e6ab
--- /dev/null
+++ b/arch/delay.h
@@ -0,0 +1,58 @@
+// tk-delay.h: Smaller, more flexible _delay_ms() functions.
+// Copyright (C) 2015-2023 Selene ToyKeeper
+// SPDX-License-Identifier: GPL-3.0-or-later
+#pragma once
+
+#ifdef OWN_DELAY
+#include "tk-attiny.h"
+#include <util/delay_basic.h>
+#ifdef USE_DELAY_MS
+// Having own _delay_ms() saves some bytes AND adds possibility to use variables as input
+#define delay_ms _delay_ms
+void _delay_ms(uint16_t n)
+{
+ // TODO: make this take tenths of a ms instead of ms,
+ // for more precise timing?
+ //#ifdef USE_FINE_DELAY
+ //if (n==0) { _delay_loop_2(BOGOMIPS/3); }
+ //else {
+ // while(n-- > 0) _delay_loop_2(BOGOMIPS);
+ //}
+ //#else
+ while(n-- > 0) _delay_loop_2(BOGOMIPS);
+ //#endif
+}
+#endif
+#if defined(USE_FINE_DELAY) || defined(USE_DELAY_ZERO)
+#define delay_zero _delay_zero
+void _delay_zero() {
+ //_delay_loop_2((BOGOMIPS/3) & 0xff00);
+ _delay_loop_2(DELAY_ZERO_TIME);
+}
+#endif
+#ifdef USE_DELAY_4MS
+#ifndef delay_4ms
+#define delay_4ms _delay_4ms
+void _delay_4ms(uint8_t n) // because it saves a bit of ROM space to do it this way
+{
+ while(n-- > 0) _delay_loop_2(BOGOMIPS*4);
+}
+#endif
+#endif
+#ifdef USE_DELAY_S
+#define delay_s _delay_s
+void _delay_s() // because it saves a bit of ROM space to do it this way
+{
+ #ifdef USE_DELAY_4MS
+ _delay_4ms(250);
+ #else
+ #ifdef USE_DELAY_MS
+ _delay_ms(1000);
+ #endif
+ #endif
+}
+#endif
+#else
+#include <util/delay.h>
+#endif
+