📄 stepper.c
字号:
#include <stdio.h>#include <sys/time.h>#include <signal.h>#include "../include/44b.h"#define STEP_INTERVALE 0x40#define STEPER_VALUE_MIN 0x40#define STEPER_VALUE_MAX 0x1000 #define STEPER_MOTOR_ENABLE 1#define STEPER_MOTOR_DISABLE 0#define STEPER_MOTOR_CLOCKWISE 0#define STEPER_MOTOR_ANTICLOCKWISE 1 #define true 1#define false 0 #define STEPER_ENABLE 0x01#define STEPER_SINGLE 0x02#define STEPER_REVERSE 0x04 #define MIN_STEPER_PLUSE_FREQ 0x300#define MAX_STEPER_PLUSE_FREQ 0x100000#define GEN_PLUSE_HIGH() {rPDATC |= (1<<11);}#define GEN_PLUSE_LOW() {rPDATC &= (~(1<<11));}static int steper_control_mask = 0xf8;int port_con_c, port_up_c;void stepper_control(int benable){ if(benable == STEPER_MOTOR_ENABLE) { steper_control_mask |= (1<<3); *(unsigned char *)0x0a000006 = steper_control_mask; } else { steper_control_mask &= (~(1<<3)); *(unsigned char *)0x0a000006 = steper_control_mask; }}void stepper_set_direct(int direct){ if(direct == STEPER_MOTOR_CLOCKWISE) { steper_control_mask |= (1<<2); *(unsigned char *)0x0a000006 = steper_control_mask; } else { steper_control_mask &= (~(1<<2)); *(unsigned char *)0x0a000006 = steper_control_mask; }}static int pulse_direct = 1;static int stepper_speed = 1;void pulse_timer(int signo){ if(pulse_direct <= 0) { GEN_PLUSE_LOW(); GEN_PLUSE_HIGH(); pulse_direct = stepper_speed; } pulse_direct --;} void stepper_speedup(){ stepper_speed --; if(stepper_speed <= 0) stepper_speed = 1;}void stepper_speeddown(){ stepper_speed ++; if(stepper_speed >= 100) stepper_speed = 100;}void stepper_setspeed(int speed){ if(speed <= 100 && speed >= 1) stepper_speed = speed;}void stepper_init(){ port_con_c = rPCONC; port_up_c = rPUPC; // config the port c rPCONC |= (1 << 22); rPUPC |= (1 << 11); stepper_control(STEPER_MOTOR_ENABLE); stepper_set_direct(STEPER_MOTOR_CLOCKWISE);} void stepper_uninit(){ rPCONC = port_con_c; rPUPC = port_up_c;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -