Contiki 2.6

stepper-steps.h

00001 #include <AT91SAM7S64.h>
00002 
00003 #ifndef MAX
00004 #define MIN(a,b) (((a) > (b)) ? (b) : (a))
00005 #endif
00006 
00007 /* Pins for stepper 0 */
00008 #define STEPPER0_I00 AT91C_PIO_PA17
00009 #define STEPPER0_I01 AT91C_PIO_PA18
00010 #define STEPPER0_PHASE0 AT91C_PIO_PA19
00011 
00012 #define STEPPER0_I10 AT91C_PIO_PA21
00013 #define STEPPER0_I11 AT91C_PIO_PA22
00014 #define STEPPER0_PHASE1 AT91C_PIO_PA23
00015 
00016 /* Pins for stepper 1 */
00017 #define STEPPER1_I00 AT91C_PIO_PA24
00018 #define STEPPER1_I01 AT91C_PIO_PA25
00019 #define STEPPER1_PHASE0 AT91C_PIO_PA26
00020 
00021 #define STEPPER1_I10 AT91C_PIO_PA27
00022 #define STEPPER1_I11 AT91C_PIO_PA28
00023 #define STEPPER1_PHASE1 AT91C_PIO_PA29
00024 
00025 /* Common pins */
00026 #define STEPPER_INHIBIT AT91C_PIO_PA7
00027 
00028 
00029 #define  STEPPER_IOMASK(s) (STEPPER##s##_I00 | STEPPER##s##_I01 | STEPPER##s##_PHASE0 \
00030                          | STEPPER##s##_I10 | STEPPER##s##_I11 | STEPPER##s##_PHASE1)
00031 #define STEPPER_PHASE(s,p,l) ((((l) < 2) ? (STEPPER##s##_I##p##1) : 0) | (((l) & 1) ? 0 : (STEPPER##s##_I##p##0)))
00032 
00033 #define STEPPER_STEP(s, l0, l1) (\
00034 ((l0 >= 0) ? STEPPER_PHASE(s,0, l0):(STEPPER_PHASE(s,0, -(l0))|STEPPER##s##_PHASE0)) | \
00035 ((l1 >= 0) ? STEPPER_PHASE(s,1, l1):(STEPPER_PHASE(s,1,-(l1))|STEPPER##s##_PHASE1)))
00036 
00037 
00038 #define FULL_STEP_BOTH(s,l) {\
00039   STEPPER_STEP(s,(l),(l)), \
00040   STEPPER_STEP(s,(l),-(l)), \
00041   STEPPER_STEP(s,-(l),-(l)), \
00042   STEPPER_STEP(s,-(l),(l))}
00043 
00044 
00045 #define FULL_STEP_SINGLE(s,l) {\
00046   STEPPER_STEP(s,0,(l)), \
00047   STEPPER_STEP(s,(l),0), \
00048   STEPPER_STEP(s,0,-(l)), \
00049   STEPPER_STEP(s,-(l),0)}
00050 
00051 #define HALF_STEP(s,l) {\
00052   STEPPER_STEP(s,0,(l)), \
00053   STEPPER_STEP(s,(l),(l)), \
00054   STEPPER_STEP(s,(l),0), \
00055   STEPPER_STEP(s,(l),-(l)), \
00056   STEPPER_STEP(s,0,-(l)), \
00057   STEPPER_STEP(s,-(l),-(l)), \
00058   STEPPER_STEP(s,-(l),0), \
00059   STEPPER_STEP(s,-(l),(l))}
00060 
00061 
00062 #define MINI_STEP(s,l) {\
00063   STEPPER_STEP(s,0,(l)), \
00064   STEPPER_STEP(s,1,MIN((l),2)), \
00065   STEPPER_STEP(s,MIN((l),2),1), \
00066   STEPPER_STEP(s,(l),0), \
00067   STEPPER_STEP(s,MIN((l),2),-1), \
00068   STEPPER_STEP(s,1,-MIN((l),2)), \
00069   STEPPER_STEP(s,0,-(l)), \
00070   STEPPER_STEP(s,-1,-MIN((l),2)), \
00071   STEPPER_STEP(s,-MIN((l),2),-1), \
00072   STEPPER_STEP(s,-(l),0), \
00073   STEPPER_STEP(s,-MIN((l),2),1), \
00074   STEPPER_STEP(s,-1,MIN((l),2))}
00075 
00076 #define MICRO_STEP(s,l) {\
00077   STEPPER_STEP(s,0,(l)), \
00078   STEPPER_STEP(s,1,(l)), \
00079   STEPPER_STEP(s,MIN((l),2),(l)), \
00080   STEPPER_STEP(s,(l),(l)), \
00081   STEPPER_STEP(s,(l),MIN((l),2)), \
00082   STEPPER_STEP(s,(l),1), \
00083   STEPPER_STEP(s,(l),0), \
00084   STEPPER_STEP(s,(l),-1), \
00085   STEPPER_STEP(s,(l),-MIN((l),2)), \
00086   STEPPER_STEP(s,(l),-(l)), \
00087   STEPPER_STEP(s,MIN((l),2),-(l)), \
00088   STEPPER_STEP(s,1,-(l)), \
00089   STEPPER_STEP(s,0,-(l)), \
00090   STEPPER_STEP(s,-1,-(l)), \
00091   STEPPER_STEP(s,-MIN((l),2),-(l)), \
00092   STEPPER_STEP(s,-(l),-(l)), \
00093   STEPPER_STEP(s,-(l),-MIN((l),2)), \
00094   STEPPER_STEP(s,-(l),-1), \
00095   STEPPER_STEP(s,-(l),0), \
00096   STEPPER_STEP(s,-(l),1), \
00097   STEPPER_STEP(s,-(l),MIN((l),2)), \
00098   STEPPER_STEP(s,-(l),(l)), \
00099   STEPPER_STEP(s,-MIN((l),2),(l)), \
00100   STEPPER_STEP(s,-1,(l))}
00101 
00102 #define STEPPER_ENABLE() (*AT91C_PIOA_SODR = STEPPER_INHIBIT)
00103 #define STEPPER_DISABLE() (*AT91C_PIOA_CODR = STEPPER_INHIBIT)