Mercurial > louis > kiibohd-controller
annotate Lib/delay.h @ 412:e7a3be42ae1e
Debug code for interconnect cable debugging
author | Jacob Alexander <haata@kiibohd.com> |
---|---|
date | Sat, 20 Feb 2016 13:27:49 -0800 |
parents | 66eccdd9ced5 |
children |
rev | line source |
---|---|
192
6ac92b8614c0
Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents:
70
diff
changeset
|
1 /* Teensyduino Core Library |
6ac92b8614c0
Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents:
70
diff
changeset
|
2 * http://www.pjrc.com/teensy/ |
6ac92b8614c0
Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents:
70
diff
changeset
|
3 * Copyright (c) 2013 PJRC.COM, LLC. |
341 | 4 * Modifications by Jacob Alexander 2013-2015 |
192
6ac92b8614c0
Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents:
70
diff
changeset
|
5 * |
6ac92b8614c0
Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents:
70
diff
changeset
|
6 * Permission is hereby granted, free of charge, to any person obtaining |
6ac92b8614c0
Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents:
70
diff
changeset
|
7 * a copy of this software and associated documentation files (the |
6ac92b8614c0
Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents:
70
diff
changeset
|
8 * "Software"), to deal in the Software without restriction, including |
6ac92b8614c0
Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents:
70
diff
changeset
|
9 * without limitation the rights to use, copy, modify, merge, publish, |
6ac92b8614c0
Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents:
70
diff
changeset
|
10 * distribute, sublicense, and/or sell copies of the Software, and to |
6ac92b8614c0
Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents:
70
diff
changeset
|
11 * permit persons to whom the Software is furnished to do so, subject to |
6ac92b8614c0
Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents:
70
diff
changeset
|
12 * the following conditions: |
6ac92b8614c0
Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents:
70
diff
changeset
|
13 * |
6ac92b8614c0
Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents:
70
diff
changeset
|
14 * 1. The above copyright notice and this permission notice shall be |
6ac92b8614c0
Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents:
70
diff
changeset
|
15 * included in all copies or substantial portions of the Software. |
6ac92b8614c0
Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents:
70
diff
changeset
|
16 * |
6ac92b8614c0
Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents:
70
diff
changeset
|
17 * 2. If the Software is incorporated into a build system that allows |
6ac92b8614c0
Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents:
70
diff
changeset
|
18 * selection among a list of target devices, then similar target |
6ac92b8614c0
Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents:
70
diff
changeset
|
19 * devices manufactured by PJRC.COM must be included in the list of |
6ac92b8614c0
Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents:
70
diff
changeset
|
20 * target devices and selectable in the same manner. |
6ac92b8614c0
Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents:
70
diff
changeset
|
21 * |
6ac92b8614c0
Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents:
70
diff
changeset
|
22 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
6ac92b8614c0
Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents:
70
diff
changeset
|
23 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
6ac92b8614c0
Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents:
70
diff
changeset
|
24 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND |
6ac92b8614c0
Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents:
70
diff
changeset
|
25 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS |
6ac92b8614c0
Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents:
70
diff
changeset
|
26 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN |
6ac92b8614c0
Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents:
70
diff
changeset
|
27 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN |
6ac92b8614c0
Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents:
70
diff
changeset
|
28 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
6ac92b8614c0
Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents:
70
diff
changeset
|
29 * SOFTWARE. |
6ac92b8614c0
Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents:
70
diff
changeset
|
30 */ |
70
23600aaa5e15
Adding initial Teensy 3 support, compiles, but not fully functional yet.
Jacob Alexander <triplehaata@gmail.com>
parents:
diff
changeset
|
31 |
341 | 32 #pragma once |
70
23600aaa5e15
Adding initial Teensy 3 support, compiles, but not fully functional yet.
Jacob Alexander <triplehaata@gmail.com>
parents:
diff
changeset
|
33 |
192
6ac92b8614c0
Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents:
70
diff
changeset
|
34 // ----- System Includes ----- |
6ac92b8614c0
Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents:
70
diff
changeset
|
35 |
70
23600aaa5e15
Adding initial Teensy 3 support, compiles, but not fully functional yet.
Jacob Alexander <triplehaata@gmail.com>
parents:
diff
changeset
|
36 #include <stdint.h> |
23600aaa5e15
Adding initial Teensy 3 support, compiles, but not fully functional yet.
Jacob Alexander <triplehaata@gmail.com>
parents:
diff
changeset
|
37 |
192
6ac92b8614c0
Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents:
70
diff
changeset
|
38 |
6ac92b8614c0
Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents:
70
diff
changeset
|
39 |
6ac92b8614c0
Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents:
70
diff
changeset
|
40 // ----- Macros ----- |
6ac92b8614c0
Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents:
70
diff
changeset
|
41 |
70
23600aaa5e15
Adding initial Teensy 3 support, compiles, but not fully functional yet.
Jacob Alexander <triplehaata@gmail.com>
parents:
diff
changeset
|
42 // Convenience Macros, for delay compatibility with AVR-GCC |
23600aaa5e15
Adding initial Teensy 3 support, compiles, but not fully functional yet.
Jacob Alexander <triplehaata@gmail.com>
parents:
diff
changeset
|
43 #define _delay_ms(val) delay( val ) |
23600aaa5e15
Adding initial Teensy 3 support, compiles, but not fully functional yet.
Jacob Alexander <triplehaata@gmail.com>
parents:
diff
changeset
|
44 #define _delay_us(val) delayMicroseconds( val ) |
23600aaa5e15
Adding initial Teensy 3 support, compiles, but not fully functional yet.
Jacob Alexander <triplehaata@gmail.com>
parents:
diff
changeset
|
45 |
23600aaa5e15
Adding initial Teensy 3 support, compiles, but not fully functional yet.
Jacob Alexander <triplehaata@gmail.com>
parents:
diff
changeset
|
46 |
192
6ac92b8614c0
Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents:
70
diff
changeset
|
47 |
6ac92b8614c0
Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents:
70
diff
changeset
|
48 // ----- Functions ----- |
6ac92b8614c0
Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents:
70
diff
changeset
|
49 |
70
23600aaa5e15
Adding initial Teensy 3 support, compiles, but not fully functional yet.
Jacob Alexander <triplehaata@gmail.com>
parents:
diff
changeset
|
50 // the systick interrupt is supposed to increment this at 1 kHz rate |
23600aaa5e15
Adding initial Teensy 3 support, compiles, but not fully functional yet.
Jacob Alexander <triplehaata@gmail.com>
parents:
diff
changeset
|
51 extern volatile uint32_t systick_millis_count; |
23600aaa5e15
Adding initial Teensy 3 support, compiles, but not fully functional yet.
Jacob Alexander <triplehaata@gmail.com>
parents:
diff
changeset
|
52 |
23600aaa5e15
Adding initial Teensy 3 support, compiles, but not fully functional yet.
Jacob Alexander <triplehaata@gmail.com>
parents:
diff
changeset
|
53 static inline uint32_t millis(void) __attribute__((always_inline, unused)); |
23600aaa5e15
Adding initial Teensy 3 support, compiles, but not fully functional yet.
Jacob Alexander <triplehaata@gmail.com>
parents:
diff
changeset
|
54 static inline uint32_t millis(void) |
23600aaa5e15
Adding initial Teensy 3 support, compiles, but not fully functional yet.
Jacob Alexander <triplehaata@gmail.com>
parents:
diff
changeset
|
55 { |
23600aaa5e15
Adding initial Teensy 3 support, compiles, but not fully functional yet.
Jacob Alexander <triplehaata@gmail.com>
parents:
diff
changeset
|
56 return systick_millis_count; // single aligned 32 bit is atomic; |
23600aaa5e15
Adding initial Teensy 3 support, compiles, but not fully functional yet.
Jacob Alexander <triplehaata@gmail.com>
parents:
diff
changeset
|
57 } |
23600aaa5e15
Adding initial Teensy 3 support, compiles, but not fully functional yet.
Jacob Alexander <triplehaata@gmail.com>
parents:
diff
changeset
|
58 |
23600aaa5e15
Adding initial Teensy 3 support, compiles, but not fully functional yet.
Jacob Alexander <triplehaata@gmail.com>
parents:
diff
changeset
|
59 |
23600aaa5e15
Adding initial Teensy 3 support, compiles, but not fully functional yet.
Jacob Alexander <triplehaata@gmail.com>
parents:
diff
changeset
|
60 static inline void delayMicroseconds(uint32_t) __attribute__((always_inline, unused)); |
23600aaa5e15
Adding initial Teensy 3 support, compiles, but not fully functional yet.
Jacob Alexander <triplehaata@gmail.com>
parents:
diff
changeset
|
61 static inline void delayMicroseconds(uint32_t usec) |
23600aaa5e15
Adding initial Teensy 3 support, compiles, but not fully functional yet.
Jacob Alexander <triplehaata@gmail.com>
parents:
diff
changeset
|
62 { |
23600aaa5e15
Adding initial Teensy 3 support, compiles, but not fully functional yet.
Jacob Alexander <triplehaata@gmail.com>
parents:
diff
changeset
|
63 #if F_CPU == 96000000 |
23600aaa5e15
Adding initial Teensy 3 support, compiles, but not fully functional yet.
Jacob Alexander <triplehaata@gmail.com>
parents:
diff
changeset
|
64 uint32_t n = usec << 5; |
333
772f9bea482b
Adding 72 MHz clock support for mk20dx256vlh7
Jacob Alexander <haata@kiibohd.com>
parents:
308
diff
changeset
|
65 #elif F_CPU == 72000000 |
772f9bea482b
Adding 72 MHz clock support for mk20dx256vlh7
Jacob Alexander <haata@kiibohd.com>
parents:
308
diff
changeset
|
66 uint32_t n = usec << 5; // XXX Not accurate, assembly snippet needs to be updated |
70
23600aaa5e15
Adding initial Teensy 3 support, compiles, but not fully functional yet.
Jacob Alexander <triplehaata@gmail.com>
parents:
diff
changeset
|
67 #elif F_CPU == 48000000 |
23600aaa5e15
Adding initial Teensy 3 support, compiles, but not fully functional yet.
Jacob Alexander <triplehaata@gmail.com>
parents:
diff
changeset
|
68 uint32_t n = usec << 4; |
23600aaa5e15
Adding initial Teensy 3 support, compiles, but not fully functional yet.
Jacob Alexander <triplehaata@gmail.com>
parents:
diff
changeset
|
69 #elif F_CPU == 24000000 |
23600aaa5e15
Adding initial Teensy 3 support, compiles, but not fully functional yet.
Jacob Alexander <triplehaata@gmail.com>
parents:
diff
changeset
|
70 uint32_t n = usec << 3; |
23600aaa5e15
Adding initial Teensy 3 support, compiles, but not fully functional yet.
Jacob Alexander <triplehaata@gmail.com>
parents:
diff
changeset
|
71 #endif |
23600aaa5e15
Adding initial Teensy 3 support, compiles, but not fully functional yet.
Jacob Alexander <triplehaata@gmail.com>
parents:
diff
changeset
|
72 asm volatile( |
308 | 73 "L_%=_delayMicroseconds:" "\n\t" |
74 "subs %0, #1" "\n\t" | |
75 "bne L_%=_delayMicroseconds" "\n" | |
70
23600aaa5e15
Adding initial Teensy 3 support, compiles, but not fully functional yet.
Jacob Alexander <triplehaata@gmail.com>
parents:
diff
changeset
|
76 : "+r" (n) : |
23600aaa5e15
Adding initial Teensy 3 support, compiles, but not fully functional yet.
Jacob Alexander <triplehaata@gmail.com>
parents:
diff
changeset
|
77 ); |
23600aaa5e15
Adding initial Teensy 3 support, compiles, but not fully functional yet.
Jacob Alexander <triplehaata@gmail.com>
parents:
diff
changeset
|
78 } |
23600aaa5e15
Adding initial Teensy 3 support, compiles, but not fully functional yet.
Jacob Alexander <triplehaata@gmail.com>
parents:
diff
changeset
|
79 |
23600aaa5e15
Adding initial Teensy 3 support, compiles, but not fully functional yet.
Jacob Alexander <triplehaata@gmail.com>
parents:
diff
changeset
|
80 |
23600aaa5e15
Adding initial Teensy 3 support, compiles, but not fully functional yet.
Jacob Alexander <triplehaata@gmail.com>
parents:
diff
changeset
|
81 void yield(void) __attribute__ ((weak)); |
23600aaa5e15
Adding initial Teensy 3 support, compiles, but not fully functional yet.
Jacob Alexander <triplehaata@gmail.com>
parents:
diff
changeset
|
82 |
23600aaa5e15
Adding initial Teensy 3 support, compiles, but not fully functional yet.
Jacob Alexander <triplehaata@gmail.com>
parents:
diff
changeset
|
83 uint32_t micros(void); |
23600aaa5e15
Adding initial Teensy 3 support, compiles, but not fully functional yet.
Jacob Alexander <triplehaata@gmail.com>
parents:
diff
changeset
|
84 |
23600aaa5e15
Adding initial Teensy 3 support, compiles, but not fully functional yet.
Jacob Alexander <triplehaata@gmail.com>
parents:
diff
changeset
|
85 void delay(uint32_t ms); |
23600aaa5e15
Adding initial Teensy 3 support, compiles, but not fully functional yet.
Jacob Alexander <triplehaata@gmail.com>
parents:
diff
changeset
|
86 |