summaryrefslogtreecommitdiff
path: root/time/system_tick.S
diff options
context:
space:
mode:
Diffstat (limited to 'time/system_tick.S')
-rw-r--r--time/system_tick.S60
1 files changed, 60 insertions, 0 deletions
diff --git a/time/system_tick.S b/time/system_tick.S
new file mode 100644
index 0000000..c1f90fd
--- /dev/null
+++ b/time/system_tick.S
@@ -0,0 +1,60 @@
+/*
+ * (c)2012 Michael Duane Rice All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer. Redistributions in binary
+ * form must reproduce the above copyright notice, this list of conditions
+ * and the following disclaimer in the documentation and/or other materials
+ * provided with the distribution. Neither the name of the copyright holders
+ * nor the names of contributors may be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/* $Id: system_tick.S 2348 2013-04-16 23:42:05Z swfltek $ */
+
+/*
+ Impoved system_tick Credit to Wouter van Gulik.
+*/
+
+#include <avr/common.h>
+
+ .global system_tick
+ .type system_tick, @function
+system_tick:
+ push r24
+ in r24,_SFR_IO_ADDR(SREG)
+ push r24
+ cli
+ lds r24,__system_time+0
+ subi r24, (-1)
+ sts __system_time+0,r24
+ lds r24,__system_time+1
+ sbci r24, (-1)
+ sts __system_time+1,r24
+ lds r24,__system_time+2
+ sbci r24, (-1)
+ sts __system_time+2,r24
+ lds r24,__system_time+3
+ sbci r24, (-1)
+ sts __system_time+3,r24
+ pop r24
+ out _SFR_IO_ADDR(SREG),r24
+ pop r24
+ ret
+ .size system_tick, .-system_tick