hard.c

来自「嵌入式linux学习之uclinux步进电机驱动实例(测试平台S3C44B0X,」· C语言 代码 · 共 70 行

C
70
字号
//associate with the hardware

#include "step.h"
#include "hard.h"

usigned short x_steptable[8] = 
	{0x0001, 0x0005, 0x0004, 0x0006, 0x0002, 0x000A, 0x0008, 0x0009};
usigned short y_steptable[8] = 
	{0x0010, 0x0050, 0x0040, 0x0060, 0x0020, 0x00A0, 0x0080, 0x0090};
usigned short z_steptable[8] = 
	{0x0100, 0x0500, 0x0400, 0x0600, 0x0200, 0x0A00, 0x0800, 0x0900};

#define Flipbits = 0x0B00;
#define Short irq_enable_bit = 0x1000;
unsigned short word;
static int base = 0x378;

extern int xdest;
extern int ydest;
extern int zdest;
extern int xpos;
extern int ypos;
extern int zpos;

void verbose_outb(int port, int value)
{
	printk("outb(%02X, %04X)", port, value);
}

void move_one_step()
{
	if(xdest > xpos){
		xpos++;
	}else if(xdest < xpos){
		xpos--;
	}

	if(ydest > ypos){
		ypos++;
	}else if(ydest < ypos){
		ypos--;
	}

	if(zdest > zpos){
		zpos++;
	}else if(zdest < zpos){
		zpos--;
	}
	word = x_steptable[xpos % 8]
    		| y_steptable[ypos % 8]
 		| z_steptable[zpos % 8] ;
	if(interrupts_are_enabled) word |= Irq_enable_bit;
	word ^= Flipbits;
	verbose_outb( (word & 0x00FF), base + 0);
	verbose_outb( (word >> 8), base + 2);
	if(verbose_move) report_status(); 
}

void disableirq()
{       //disable irq on card
	word &= ~Irq_enable_bit;
	verbose_outb((word >> 8), base + 2); 	
}

void enableirq()
{       //enable irq on card
	word = Irq_enable_bit;
	verbose_outb( (word >> 8), base + 2);
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?