stepper-interrupt.h
00001 #ifndef __STEPPER3_INTERRUPT_H__2MHD6D6PQ1__
00002 #define __STEPPER3_INTERRUPT_H__2MHD6D6PQ1__
00003
00004 #include <stepper.h>
00005
00006
00007 #define TIMER_FREQ 748800
00008
00009 typedef struct _StepperContext StepperContext;
00010 typedef struct _StepperState StepperState;
00011 typedef struct _StepperTimerStep StepperTimerStep;
00012
00013 #define MAX_STEPS_PER_PERIOD 40
00014 #define NUM_STEPPERS 2
00015
00016 #define STEPPER_MAX_VELOCITY 4000
00017 #define STEPPER_MAX_ACCELRATION 4000
00018
00019
00020 #define TIMING_ERRORS
00021
00022 struct _StepperState
00023 {
00024 long step_count;
00025 uint32_t io_mask;
00026 const uint32_t *acc_steps;
00027 const uint32_t *run_steps;
00028 const uint32_t *hold_steps;
00029 uint8_t current_step;
00030 uint8_t sequence_length;
00031
00032 long velocity;
00033 long acceleration;
00034 long step_full;
00035 long step_frac;
00036
00037 long n_steps;
00038
00039 StepperAccSeq *acceleration_sequence;
00040
00041 #ifdef TIMING_ERRORS
00042 long err_max;
00043 long err_min;
00044 #endif
00045 };
00046
00047 #define STEPPER_POWER_ACC 30
00048 #define STEPPER_POWER_RUN 20
00049 #define STEPPER_POWER_HOLD 10
00050 #define STEPPER_POWER_OFF 0
00051
00052 #define STEPPER_DIRECTION_NONE 0
00053 #define STEPPER_DIRECTION_FORWARD 1
00054 #define STEPPER_DIRECTION_BACKWARD 2
00055
00056 struct _StepperTimerStep
00057 {
00058 StepperTimerStep *next;
00059 StepperState *state;
00060 uint16_t time;
00061 uint8_t direction;
00062 uint8_t power;
00063 };
00064
00065
00066 struct _StepperContext
00067 {
00068 unsigned int flags;
00069 unsigned long period_count;
00070 AT91PS_TC timer_channel;
00071 StepperState steppers[NUM_STEPPERS];
00072 StepperTimerStep *steps;
00073 StepperTimerStep *current_step;
00074 StepperUserCallback user_callback;
00075 };
00076
00077 extern StepperContext stepper_context;
00078 #endif
00079
00080 void stepper_timer_interrupt(void);