Browse files

split delay functions into separate files

  • Loading branch information...
1 parent ab1155f commit e3d0aa7b620619815a73962665d9a246a02e30e1 @triffid committed Oct 11, 2010
Showing with 66 additions and 55 deletions.
  1. +1 −1 Makefile
  2. +1 −0 dda_queue.c
  3. +50 −0 delay.c
  4. +13 −0 delay.h
  5. +1 −0 gcode.c
  6. +0 −47 timer.c
  7. +0 −7 timer.h
View
2 Makefile
@@ -14,7 +14,7 @@
PROGRAM = mendel
-SOURCES = $(PROGRAM).c serial.c dda.c gcode.c timer.c clock.c temp.c sermsg.c dda_queue.c watchdog.c debug.c sersendf.c heater.c analog.c
+SOURCES = $(PROGRAM).c serial.c dda.c gcode.c timer.c clock.c temp.c sermsg.c dda_queue.c watchdog.c debug.c sersendf.c heater.c analog.c delay.c
##############################################################################
# #
View
1 dda_queue.c
@@ -8,6 +8,7 @@
#include "serial.h"
#include "sermsg.h"
#include "temp.h"
+#include "delay.h"
uint8_t mb_head = 0;
uint8_t mb_tail = 0;
View
50 delay.c
@@ -0,0 +1,50 @@
+#include "delay.h"
+
+#include "watchdog.h"
+
+// delay( microseconds )
+void delay(uint32_t delay) {
+ wd_reset();
+ while (delay > 65535) {
+ delayMicrosecondsInterruptible(65533);
+ delay -= 65535;
+ wd_reset();
+ }
+ delayMicrosecondsInterruptible(delay & 0xFFFF);
+ wd_reset();
+}
+
+// delay_ms( milliseconds )
+void delay_ms(uint32_t delay) {
+ wd_reset();
+ while (delay > 65) {
+ delayMicrosecondsInterruptible(64999);
+ delay -= 65;
+ wd_reset();
+ }
+ delayMicrosecondsInterruptible(delay * 1000);
+ wd_reset();
+}
+
+void delayMicrosecondsInterruptible(uint16_t us)
+{
+ // for a one-microsecond delay, simply return. the overhead
+ // of the function call yields a delay of approximately 1 1/8 us.
+ if (--us == 0)
+ return;
+
+ // the following loop takes a quarter of a microsecond (4 cycles)
+ // per iteration, so execute it four times for each microsecond of
+ // delay requested.
+ us <<= 2;
+
+ // account for the time taken in the preceeding commands.
+ us -= 2;
+
+ // busy wait
+ __asm__ __volatile__ ("1: sbiw %0,1" "\n\t" // 2 cycles
+ "brne 1b" :
+ "=w" (us) :
+ "0" (us) // 2 cycles
+ );
+}
View
13 delay.h
@@ -0,0 +1,13 @@
+#ifndef _DELAY_H
+#define _DELAY_H
+
+#include <stdint.h>
+
+void delay(uint32_t delay);
+
+void delay_ms(uint32_t delay);
+
+#define delay_us(d) delayMicrosecondsInterruptible(d)
+void delayMicrosecondsInterruptible(unsigned int us);
+
+#endif /* _DELAY_H */
View
1 gcode.c
@@ -14,6 +14,7 @@
#include "debug.h"
#include "heater.h"
#include "sersendf.h"
+#include "delay.h"
/*
Switch user friendly values to coding friendly values
View
47 timer.c
@@ -102,50 +102,3 @@ void setTimer(uint32_t delay)
setTimerCeiling(getTimerCeiling(delay)); // set timeout
setTimerResolution(getTimerResolution(delay)); // restart timer with proper prescaler
}
-
-// delay( microseconds )
-void delay(uint32_t delay) {
- wd_reset();
- while (delay > 65535) {
- delayMicrosecondsInterruptible(65533);
- delay -= 65535;
- wd_reset();
- }
- delayMicrosecondsInterruptible(delay & 0xFFFF);
- wd_reset();
-}
-
-// delay_ms( milliseconds )
-void delay_ms(uint32_t delay) {
- wd_reset();
- while (delay > 65) {
- delayMicrosecondsInterruptible(64999);
- delay -= 65;
- wd_reset();
- }
- delayMicrosecondsInterruptible(delay * 1000);
- wd_reset();
-}
-
-void delayMicrosecondsInterruptible(uint16_t us)
-{
- // for a one-microsecond delay, simply return. the overhead
- // of the function call yields a delay of approximately 1 1/8 us.
- if (--us == 0)
- return;
-
- // the following loop takes a quarter of a microsecond (4 cycles)
- // per iteration, so execute it four times for each microsecond of
- // delay requested.
- us <<= 2;
-
- // account for the time taken in the preceeding commands.
- us -= 2;
-
- // busy wait
- __asm__ __volatile__ ("1: sbiw %0,1" "\n\t" // 2 cycles
- "brne 1b" :
- "=w" (us) :
- "0" (us) // 2 cycles
- );
-}
View
7 timer.h
@@ -21,13 +21,6 @@ uint16_t getTimerCeiling(const uint32_t delay);
void setTimer(uint32_t delay);
-void delay(uint32_t delay);
-
-void delay_ms(uint32_t delay);
-
-#define delay_us(d) delayMicrosecondsInterruptible(d)
-void delayMicrosecondsInterruptible(unsigned int us);
-
#define enableTimerInterrupt() do { TIMSK1 |= (1<<OCIE1A); } while (0)
#define disableTimerInterrupt() do { TIMSK1 &= ~(1<<OCIE1A); } while (0)
#define timerInterruptIsEnabled() (TIMSK1 & (1 << OCIE1A))

0 comments on commit e3d0aa7

Please sign in to comment.