ramp.h
Go to the documentation of this file.00001
00049 #ifndef ALGO_RAMP_H
00050 #define ALGO_RAMP_H
00051
00052 #include "hw/hw_stepper.h"
00053
00054 #include "cfg/cfg_ramp.h"
00055
00056 #include <cfg/compiler.h>
00057
00058
00062 #define TIME2CLOCKS(micros) ((uint32_t)(micros) * (STEPPER_CLOCK / 1000000))
00063
00067 #define CLOCKS2TIME(clocks) ((uint32_t)(clocks) / (STEPPER_CLOCK / 1000000))
00068
00072 #define MICROS2FREQ(micros) (1000000UL / ((uint32_t)(micros)))
00073
00077 #define FREQ2MICROS(hz) (1000000UL / ((uint32_t)(hz)))
00078
00082 #define FIX_MULT32(a,b) (((uint64_t)(a)*(uint32_t)(b)) >> 16)
00083
00092 struct RampPrecalc
00093 {
00094 #if RAMP_USE_FLOATING_POINT
00095 float beta;
00096 float alpha;
00097 float gamma;
00098 #else
00099 uint16_t max_div_min;
00100 uint32_t inv_total_time;
00101 #endif
00102 };
00103
00104
00108 struct Ramp
00109 {
00110 uint32_t clocksRamp;
00111 uint16_t clocksMinWL;
00112 uint16_t clocksMaxWL;
00113
00114 struct RampPrecalc precalc;
00115 };
00116
00117
00118
00119
00120
00121 void ramp_compute(
00122 struct Ramp * ramp,
00123 uint32_t clocksInRamp,
00124 uint16_t clocksInMinWavelength,
00125 uint16_t clocksInMaxWavelength);
00126
00127
00136 void ramp_setup(struct Ramp* ramp, uint32_t length, uint32_t minFreq, uint32_t maxFreq);
00137
00138
00142 void ramp_default(struct Ramp *ramp);
00143
00144
00153 #if RAMP_USE_FLOATING_POINT
00154 float ramp_evaluate(const struct Ramp* ramp, float curClock);
00155 #else
00156 uint16_t ramp_evaluate(const struct Ramp* ramp, uint32_t curClock);
00157 #endif
00158
00159
00161 int ramp_testSetup(void);
00162 int ramp_testRun(void);
00163 int ramp_testTearDown(void);
00164
00165 #endif
00166