File source
#include <fitkitlib>
#include "stepper.h"
#include <stdint.h>
#include <stdbool.h>
#define LAST_PHASE 7
/* module registers */
unsigned volatile int stepper_steps = 0;
uint8_t stepper_speed = 128;
uint8_t stepper_delay = 0;
uint8_t stepper_phase = 0;
bool stepper_direction = 0;
/* set outputs */
void stepper_setphase(uint8_t phase){
P6DIR |= STEPPER_MASK;
P6OUT &= ~STEPPER_MASK;
switch(phase){
case 0:
P6OUT |= STEPPER_A;
break;
case 1:
P6OUT |= STEPPER_A;
P6OUT |= STEPPER_B;
break;
case 2:
P6OUT |= STEPPER_B;
break;
case 3:
P6OUT |= STEPPER_B;
P6OUT |= STEPPER_C;
break;
case 4:
P6OUT |= STEPPER_C;
break;
case 5:
P6OUT |= STEPPER_C;
P6OUT |= STEPPER_D;
break;
case 6:
P6OUT |= STEPPER_D;
break;
case 7:
P6OUT |= STEPPER_D;
P6OUT |= STEPPER_A;
break;
default:
break;
}
}
void stepper_disable(){
P6DIR |= STEPPER_MASK;
P6OUT &= ~STEPPER_MASK;
}
/* handle stepper motor */
void stepper(){
if(stepper_steps > 0){
stepper_delay--;
if(stepper_delay > stepper_speed) return;
stepper_delay = 0;
if(stepper_direction){
stepper_phase++;
if(stepper_phase > LAST_PHASE) stepper_phase = 0;
}else{
stepper_phase--;
if(stepper_phase > LAST_PHASE) stepper_phase = LAST_PHASE;
}
stepper_setphase(stepper_phase);
stepper_steps--;
}else{
if(stepper_direction){
stepper_phase--;
}else{
stepper_phase++;
}
stepper_disable();
}
}