BeRTOS
|
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 * Function prototypes 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 /* ALGO_RAMP_H */ 00166