Contiki 2.6
|
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)