00001 #ifndef _DDA_H
00002 #define _DDA_H
00003
00004 #include <stdint.h>
00005
00006 #include "config.h"
00007
00008 #ifdef ACCELERATION_REPRAP
00009 # ifdef ACCELERATION_RAMPING
00010 # error Cant use ACCELERATION_REPRAP and ACCELERATION_RAMPING together.
00011 # endif
00012 #endif
00013
00014
00015
00016
00023 typedef struct {
00024
00025 int32_t X, Y, Z;
00026 uint32_t F;
00027 } TARGET;
00028
00035 typedef struct {
00036
00037 int32_t x_counter;
00038 int32_t y_counter;
00039 int32_t z_counter;
00040
00041
00042 uint32_t x_steps;
00043 uint32_t y_steps;
00044 uint32_t z_steps;
00045
00046 #ifdef ACCELERATION_RAMPING
00047
00048 uint32_t step_no;
00050 uint32_t c;
00052 int32_t n;
00053 #endif
00054 #ifdef ACCELERATION_TEMPORAL
00055 uint32_t x_time;
00056 uint32_t y_time;
00057 uint32_t z_time;
00058 uint32_t all_time;
00059 #endif
00060 } MOVE_STATE;
00061
00069 typedef struct {
00071 TARGET endpoint;
00072 union {
00073 struct {
00074
00075 uint8_t nullmove:1;
00076 uint8_t live:1;
00077 #ifdef ACCELERATION_REPRAP
00078 uint8_t accel:1;
00079 #endif
00080
00081 uint8_t x_direction:1;
00082 uint8_t y_direction:1;
00083 uint8_t z_direction:1;
00084 };
00085 uint8_t allflags;
00086 };
00087
00088 uint32_t x_delta;
00089 uint32_t y_delta;
00090 uint32_t z_delta;
00091
00092 uint32_t total_steps;
00093 uint32_t c;
00094
00095 #ifdef ACCELERATION_REPRAP
00096 uint32_t end_c;
00097 int32_t n;
00098 #endif
00099 #ifdef ACCELERATION_RAMPING
00100
00101 uint32_t rampup_steps;
00103 uint32_t rampdown_steps;
00105 uint32_t c_min;
00106 #endif
00107 #ifdef ACCELERATION_TEMPORAL
00108 uint32_t x_step_interval;
00109 uint32_t y_step_interval;
00110 uint32_t z_step_interval;
00111 uint8_t axis_to_step;
00112 #endif
00113
00114 uint8_t endstop_check;
00115 uint8_t endstop_stop_cond;
00116 } DDA;
00117
00118
00119
00120
00122 extern TARGET startpoint;
00124 extern TARGET startpoint_steps;
00126 extern TARGET current_position;
00127
00128
00129
00130
00131
00132 void dda_init(void);
00133
00134
00135 void dda_new_startpoint(void);
00136
00137
00138 void dda_create(DDA *dda, TARGET *target);
00139
00140
00141 void dda_start(DDA *dda) __attribute__ ((hot));
00142
00143
00144 void dda_step(DDA *dda) __attribute__ ((hot));
00145
00146
00147 void update_current_position(void);
00148
00149 #endif