亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? u110_bak.c

?? linux下打印驅動源代碼 適用于雙步進針打驅動
?? C
?? 第 1 頁 / 共 3 頁
字號:
/******************************************************************** *  fcr12-printer/linux-driver/u110.c * *  Arca FCR1.2 platform PRN Driver. (Epson U110) *  Author: Seeger Chin *   Owner: ARCA Technology Corp. *    Date: 2003.08.19 ********************************************************************/#include <linux/config.h>#include <linux/module.h>#include <linux/errno.h>#include <linux/signal.h>#include <linux/sched.h>#include <linux/timer.h>#include <linux/interrupt.h>#include <linux/serial.h>#include <linux/major.h>#include <linux/string.h>#include <linux/fcntl.h>#include <linux/ptrace.h>#include <linux/ioport.h>#include <linux/mm.h>#include <linux/slab.h>#include <linux/init.h>#include <linux/delay.h>#include <linux/fs.h>#include <linux/slab.h>#include <linux/spinlock.h>#include <linux/arca-chars.h>#include <asm/system.h>#include <asm/io.h>#include <asm/irq.h>#include <asm/uaccess.h>#include <asm/bitops.h>#include <asm/processor.h>#include <asm/hardware.h>/******************************************************************* ** ** *******************************************************************/#define PRNIORESET      0x19750000#define PRNIOBLKMARK    0x19750001#define PRNIONEWLINE    0x19750002#define PRNIOPAPERFW    0x19750003#define PRNIOPAPERFB    0x19750004#define PRNIOPOWEROFF	0x19750005#define PRN_TIMER (1 * HZ)#define DEBUG 0#if DEBUG#define dprintk(x...)	if (DEBUG) printk(x)#else#define dprintk(x...)#endif#if defined(CONFIG_ARCA_FCR12_PLATFORM)#define PRN_COIL_REG     0xaf000000#define PRN_CMOTOR_PORT1 0xaf400000#define PRN_CMOTOR_PORT2 0xaf600000#define PRN_PMOTOR_PORT1 0xaf800000#define PRN_PMOTOR_PORT2 0xafa00000#define PRN_STATUS_REG   0xafc00000#define PRN_IRQM_REG     0xafc00000#define STATUS_PMOTOR_READY  (1 << 6)//40H#define STATUS_CMOTOR_READY  (1 << 5)//20H#define STATUS_COIL_READY    (1 << 4)//10H#define STATUS_BLACKMARK     (1 << 3)//08H#define STATUS_PAPER_END     (1 << 2)//04H#define STATUS_HOME_POSITION (1 << 1)//02H#define STATUS_CARRIAGE_HOT  (1 << 0)//01H#ifndef REG8#define REG8(n)          (*(volatile unsigned char *)(n))#endif#define __prn_home_position() (!(REG8(PRN_STATUS_REG) & STATUS_HOME_POSITION))//02H// 當關pf中斷時PRN_STATUS_REG=02H,則返回0;其他否則返回1 #define __prn_pmotor_ready()  (REG8(PRN_STATUS_REG) & STATUS_PMOTOR_READY)//恒等于0??????#define __prn_cmotor_ready()  (REG8(PRN_STATUS_REG) & STATUS_CMOTOR_READY)//恒等于0??????#define __prn_coil_ready()    (REG8(PRN_STATUS_REG) & STATUS_COIL_READY)  //10H//恒等于0??????#define __prn_blackmark()     (!(REG8(PRN_STATUS_REG) & STATUS_BLACKMARK)) //08H //恒等于1?????  #define __prn_paper_end()     (!(REG8(PRN_STATUS_REG) & STATUS_PAPER_END)) //04H // 當關cm的data2中斷時PRN_STATUS_REG=04H,則返回0;否則返回1  #define __prn_carriage_hot()  (REG8(PRN_STATUS_REG) & STATUS_CARRIAGE_HOT) //01H// 當關cm中斷時PRN_STATUS_REG=01H,則返回1;否則返回0static volatile unsigned char prn_irq = 0;static unsigned char old_val=0;   /* For test */static unsigned char tmpp=0;      /* Nick *//* How many steps the c-motor will walk to print the current line. */static volatile int prn_line_max_steps=0;  #define _NEVER_BLOCK    (sigmask(SIGKILL) | sigmask(SIGSTOP))#define _DONT_BLOCK     (_NEVER_BLOCK | sigmask(SIGINT))/******************************************************************* ** ** *******************************************************************/#define __prn_cmotor_irq_mask()			\do {						\	prn_irq |= 0x01;			\/*  |=  位或運算   */	REG8(PRN_STATUS_REG) = prn_irq;		\	udelay(1);				\} while (0)#define __prn_cmotor_irq_unmask()		\do {						\	prn_irq &= ~0x01;			\/*  &=  位與運算  ~位取反運算 */	REG8(PRN_STATUS_REG) = prn_irq;		\	udelay(1);				\} while (0)//CM的data2中斷,用于打印時字車超出最大步數時,關CM中斷#define __prn_cmotor_data2irq_mask()		\do {						\	prn_irq |= 0x04;			\	REG8(PRN_STATUS_REG) = prn_irq;		\	udelay(1);				\} while (0)#define __prn_cmotor_data2irq_unmask()		\do {						\	prn_irq &= ~0x04;			\	REG8(PRN_STATUS_REG) = prn_irq;		\	udelay(1);				\} while (0)#define __prn_pmotor_irq_mask()			\do {						\	prn_irq |= 0x02;			\	REG8(PRN_STATUS_REG) = prn_irq;		\	udelay(1);				\} while (0)#define __prn_pmotor_irq_unmask()		\do {						\	prn_irq &= ~0x02;			\	REG8(PRN_STATUS_REG) = prn_irq;		\	udelay(1);				\} while (0)#define __prn_irq_mask()			\do {						\	prn_irq |= 0x07;			\	REG8(PRN_STATUS_REG) = prn_irq;		\	udelay(1);				\} while (0)#define __prn_pin_init()			\do {						\	__gpiob_as_intr(7);			\///????????	__gpiob_set_irq_high_level(7);		\	udelay(1);				\} while(0)/******************************************************************* ** ** *******************************************************************/#define PRN_IRQ INTC_IRQ7#else#error "Not supported platform"#endifstatic unsigned char off_i = 0x0c;static unsigned char hold_i = 0x08;static unsigned char prun_i  = 0x00;//給紙電機運行標志static unsigned char crun_i  = 0x00;//字車電機運行標志static volatile unsigned int cmotor_step = 0x80000000; /*volatile 在每次訪問時,其值被重載  */static volatile unsigned int pmotor_step = 0x80000000;static volatile unsigned char prn_state;static volatile unsigned char cmotor_direction = 0;static volatile unsigned char pmotor_direction = 0;static volatile unsigned int pmotor_steps;static unsigned char cmotor_const_param = 0;#define PRN_RST0             0x10#define PRN_RST1             0x20#define PRN_STANDBY          0x30#define PRN_BLACKMARK        0x40#define PRN_NEWLINE          0x50#define PRN_PRINTING         0x60#define PRN_PAPERFETCH0      0x70#define PRN_PAPERFETCH1      0x80#define PRN_PAPERFETCH2      0x90 //paperfetch#define MOTOR_STAT_STOP      0x00#define MOTOR_STAT_ACC       0x01#define MOTOR_STAT_CONST     0x02#define MOTOR_STAT_COIL      0x03#define MOTOR_STAT_DEC       0x04#define MOTOR_STAT_WORKRUSH  0x05#define MOTOR_STAT_HOLDRUSH  0x06#define MOTOR_STAT_STEP      0x07#define NPMOTOR              0x01#define NCMOTOR              0x00#define PRN_STATUS()         ((prn_state) & 0xf0)#define MOTOR_STATUS()       (((prn_state) & 0x0f) >> 1)#define MOTOR_NUM()          ((prn_state) & 0x01)#define DATA2INTERUPT()        ((prn_state) & 0x10)#define ENCODE_STATUS(prns, motors, motor)				\do {									\	prn_state = (prns) | ((motors) << 1) | ((motor) & 0x01);	\       //    或運算,根據工作狀態,速度狀態,字車,成為一個狀態標志} while (0)static unsigned char prn_buffer[4096];/******************************************************************* ** ** *******************************************************************/static unsigned char motor_steps[] = { 0x00, 0x02, 0x03, 0x01 };//含義??static unsigned char cmotor_acc[11] = {	58, 28, 22, 19, 17, 16, 15, 15, 14, 13, 12};static unsigned char cmotor_dec[11] = {	12, 13, 13, 14, 15, 17, 18, 21, 25, 32, 78};static unsigned char pmotor_acc[21] = {	82, 54, 42, 35, 31, 28, 26, 24, 23, 21, 20, 19, 19, 18, 17, 17,	16, 16, 15, 15, 15};static unsigned char pmotor_dec[3] = {	15, 20, 29};static volatile unsigned int coil_counter = 0;/******************************************************************* **  For Function defines ** *******************************************************************//* HomePosition function defines */static void arca_prn_hold_rush(void);/* 后rush */static void arca_prn_work_rush(void);/* 前rush */static int arca_prn_home_position(void);/* For Carriage Motor function defines  */static void prn_cmotor_work_rush(unsigned char direction);/* 后rush */static void prn_cmotor_hold_rush(unsigned char direction);/* 前rush */static void prn_cmotor_stop(unsigned char direction);static void prn_cmotor_coil(unsigned char direction);/* 會不會是慢速或失步???? */static void prn_cmotor_acc(unsigned char direction);static void prn_cmotor_dec(unsigned char direction);/* For Page Motor function defines  */static void prn_pmotor_coil(unsigned char direction);static void prn_pmotor_dec(unsigned char direction);static void prn_pmotor_const(unsigned char direction);static void prn_pmotor_stop(unsigned char direction);static void prn_pmotor_step(unsigned char direction);/* Motor state mechanism   */static void prn_decode_motor_state(unsigned char status, unsigned char motor);static void arca_prn_hp_hold(void){	unsigned char port2;	port2 = hold_i | motor_steps[cmotor_step % 4]; //must hold motor state  hold_i = 0x08	while (!__prn_cmotor_ready())  //查詢中斷方式?		udelay(500);	REG8(PRN_CMOTOR_PORT2) = port2;        udelay (12000);	return;}/***************************************************************** * Used for cmotor const detection用于位置初始化 *****************************************************************/static void prn_cmotor_test_acc(unsigned char direction){	unsigned char port1, port2;	int step = (direction) ? 1 : -1;//正向時 step=1 反向時 step=-1	int i;	arca_prn_work_rush();  //open power for motor 啟動6ms rush	for (i=0;i<11;i++) {        //加速11步		cmotor_step += step;//加速步自增		port1 = cmotor_acc[i];//給加速時間		port2 = crun_i | motor_steps[cmotor_step % 4];		while (!__prn_cmotor_ready())			udelay(500);		REG8(PRN_CMOTOR_PORT1) = port1;		REG8(PRN_CMOTOR_PORT2) = port2;	}}static int prn_cmotor_test_const(int steps, unsigned char direction,			       unsigned char test){	unsigned char port1, port2;	//direction=1為反向從右到左	int step = (direction) ? 1 : -1;//direction=0為正向從左到右	int i;//一旦	for (i=0;i<steps;i++) {		if ((test == 1) && (__prn_home_position()))		//test=1且HPS為H時			return i;		else if ((test == 2) && (!__prn_home_position()))	//test=2且HPS為L時				return i;                               //若test=0則返回最大步數				cmotor_step += step;		port1 = 12;		port2 = crun_i | motor_steps[cmotor_step % 4];		while (!__prn_cmotor_ready())			udelay(500);		REG8(PRN_CMOTOR_PORT1) = port1;		REG8(PRN_CMOTOR_PORT2) = port2;	}	return steps;			}static void prn_cmotor_test_dec(unsigned char direction){	unsigned char port1, port2;	int step = (direction) ? 1 : -1;	int i;	for (i=0;i<11;i++) {		cmotor_step += step;		port1 = cmotor_dec[i];		port2 = crun_i | motor_steps[cmotor_step % 4];		while (!__prn_cmotor_ready())			udelay(500);		REG8(PRN_CMOTOR_PORT1) = port1;		REG8(PRN_CMOTOR_PORT2) = port2;	}	arca_prn_hold_rush();	arca_prn_hp_hold();	return;}/******************************************************************* ** ** *******************************************************************/static void arca_prn_hold_rush(void){	unsigned char port2;	port2 = crun_i | motor_steps[cmotor_step % 4]; //must hold motor state	while (!__prn_cmotor_ready())		udelay(500);	REG8(PRN_CMOTOR_PORT2) = port2;        udelay (6000);	return;}/******************************************************************* ** ** *******************************************************************/static void arca_prn_work_rush(void){	unsigned char port2;	port2 = crun_i | motor_steps[cmotor_step % 4];  //must hold motor state	while (!__prn_cmotor_ready())		udelay(500);	REG8(PRN_CMOTOR_PORT2) = port2;        udelay (6000);	return;}/******************************************************************* ** ** *******************************************************************/static int arca_prn_home_position(void){	int r=0;	if (!__prn_home_position()) {		prn_cmotor_test_acc(1);		r = prn_cmotor_test_const(230, 1, 1);		prn_cmotor_test_dec(1);			}	prn_cmotor_test_acc(0);	prn_cmotor_test_const(29, 0, 2);	prn_cmotor_test_const(29, 0, 0);	prn_cmotor_test_dec(0);	prn_cmotor_test_acc(1);	r = prn_cmotor_test_const(50, 1, 1);	prn_cmotor_test_dec(1);	if (r == 50) {		printk ("Error: motor can not reset home position!\n");		return -EIO;	}	cmotor_const_param = 3;	printk("cmotor const parameter = %d\n", cmotor_const_param);	return 0;}/* * Two motor's primitives. */                    DECLARE_WAIT_QUEUE_HEAD (prn_wait_queue);/******************************************************************* ** ** *******************************************************************/static volatile unsigned char cstep_const = 0;static void prn_cmotor_const(unsigned char direction){	unsigned char port1 = 12;	unsigned char port2;	int step = (direction) ? 1 : -1;	cmotor_step += step;	port2 = crun_i | motor_steps[cmotor_step % 4];	REG8(PRN_CMOTOR_PORT1) = port1;	REG8(PRN_CMOTOR_PORT2) = port2;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人午夜精品影院观看视频 | 日韩一区二区在线看| 91免费看`日韩一区二区| 欧美一区二区三区爱爱| 久久综合网色—综合色88| 亚洲在线免费播放| 麻豆freexxxx性91精品| 日韩欧美国产一二三区| 亚洲欧洲成人自拍| 99久久免费国产| 欧美一区二区三区人| 国产精品国产三级国产普通话99| 亚洲成人tv网| 色综合久久88色综合天天6| 亚洲自拍偷拍av| 欧美aⅴ一区二区三区视频| 日韩一区二区三区在线| 一区二区三区不卡视频| 欧美日韩视频第一区| 日韩一区二区在线观看视频 | 黄色日韩三级电影| 国产女人18水真多18精品一级做| 全国精品久久少妇| 亚洲综合免费观看高清完整版在线| 欧美精品一区二区三区蜜桃 | 国产精品一二三区| 麻豆精品视频在线观看免费| 亚洲一级二级在线| 一区二区三区高清在线| 国产精品嫩草影院com| 国产亚洲成av人在线观看导航| 欧美一区二区三区精品| 欧美精选在线播放| 欧美日韩免费一区二区三区| 欧美在线看片a免费观看| 色综合久久六月婷婷中文字幕| 成人app软件下载大全免费| 丰满少妇在线播放bd日韩电影| 狠狠色狠狠色综合日日91app| 蜜乳av一区二区| 亚洲超碰精品一区二区| 天天综合网天天综合色| 日韩精品高清不卡| 日韩电影在线免费| 日本午夜精品一区二区三区电影 | 国产一区二区三区黄视频 | 紧缚捆绑精品一区二区| 久久99在线观看| 国产一区二区在线观看视频| 国内成人免费视频| 国产成人在线视频播放| av高清久久久| 一本大道av伊人久久综合| 在线视频国产一区| 欧美亚洲国产一区在线观看网站| 欧美午夜精品理论片a级按摩| 欧美色图激情小说| 在线电影欧美成精品| 精品国产欧美一区二区| 欧美国产日本韩| 亚洲精品国产精品乱码不99 | 国产欧美日韩麻豆91| 国产精品久久久久久久裸模| 亚洲欧美成人一区二区三区| 偷偷要91色婷婷| 久久99深爱久久99精品| 成人免费观看视频| 欧美性视频一区二区三区| 日韩一级黄色片| 日本一区二区电影| 亚洲综合在线电影| 麻豆精品国产传媒mv男同| 丁香一区二区三区| 欧美日韩成人在线| 欧美韩日一区二区三区四区| 一区二区三区欧美久久| 久久99国产精品久久99果冻传媒| 成人av电影在线| 在线电影欧美成精品| 国产欧美日本一区二区三区| 亚洲福中文字幕伊人影院| 九九国产精品视频| 日本精品裸体写真集在线观看| 欧美一卡2卡3卡4卡| 国产精品情趣视频| 蜜桃av一区二区在线观看| 99久久精品国产一区| 4438x成人网最大色成网站| 国产精品理论片在线观看| 日韩高清在线电影| 91麻豆国产福利在线观看| 欧美精品一区二区三| 一区二区三国产精华液| 狠狠色丁香久久婷婷综合_中| 91精品福利在线| 亚洲国产成人一区二区三区| 奇米在线7777在线精品| 色欧美日韩亚洲| 亚洲精品在线免费播放| 亚洲6080在线| 色国产精品一区在线观看| 久久―日本道色综合久久| 亚洲第一电影网| av亚洲精华国产精华精华| 精品日韩欧美在线| 日产国产高清一区二区三区| 色综合天天视频在线观看| 国产日韩欧美一区二区三区乱码| 日韩国产成人精品| 欧美三级韩国三级日本一级| 亚洲色图清纯唯美| 粉嫩av一区二区三区在线播放| 日韩一区二区三区观看| 图片区小说区区亚洲影院| 色香色香欲天天天影视综合网| 国产精品麻豆欧美日韩ww| 国产一区不卡在线| 精品国产乱码久久久久久牛牛| 日韩精品成人一区二区在线| 欧美视频一区二| 亚洲黄网站在线观看| 成人黄色777网| 中文字幕av在线一区二区三区| 狠狠色丁香久久婷婷综| 日韩视频123| 免费xxxx性欧美18vr| 8v天堂国产在线一区二区| 一区二区欧美视频| 欧美亚洲动漫制服丝袜| 亚洲精品国产视频| 欧美在线你懂得| 亚洲永久免费视频| 91国偷自产一区二区三区观看 | 亚洲午夜av在线| 欧美中文字幕一区二区三区| 亚洲黄色片在线观看| 色婷婷av一区二区三区软件| 一区二区三区四区在线播放| 91看片淫黄大片一级在线观看| 亚洲欧美色图小说| 欧美在线免费播放| 午夜私人影院久久久久| 欧美一区二区三级| 国产在线播放一区| 国产欧美日韩在线| 99re在线精品| 亚洲第一福利视频在线| 国产a区久久久| 亚洲日本成人在线观看| 91福利在线播放| 男女性色大片免费观看一区二区 | 亚洲手机成人高清视频| 色婷婷狠狠综合| 日欧美一区二区| 日韩免费一区二区三区在线播放| 精品一区二区三区视频 | 老司机精品视频一区二区三区| 欧美精品一区二区在线观看| 丁香啪啪综合成人亚洲小说| 亚洲乱码日产精品bd| 欧美喷潮久久久xxxxx| 欧美a级一区二区| 中文字幕免费不卡| 欧美亚洲一区二区三区四区| 久久国产欧美日韩精品| 中文字幕欧美三区| 欧美日本精品一区二区三区| 国产在线精品一区二区| 亚洲精品国产一区二区三区四区在线| 欧美精品一卡二卡| 高清beeg欧美| 亚洲国产视频一区二区| 久久久久九九视频| 欧美三级电影网| 国产精品中文字幕欧美| 亚洲欧美另类图片小说| 日韩欧美二区三区| jlzzjlzz亚洲日本少妇| 石原莉奈一区二区三区在线观看| 久久青草国产手机看片福利盒子 | 欧美午夜精品久久久久久超碰 | 欧美日韩一本到| 蜜桃免费网站一区二区三区| 国产精品无人区| 欧美日韩国产综合视频在线观看| 国产高清成人在线| 偷拍亚洲欧洲综合| 日本一区二区成人| 日韩欧美国产不卡| 欧美天堂一区二区三区| 国产激情一区二区三区四区| 偷拍一区二区三区| 亚洲日本欧美天堂| 国产亚洲一区二区三区四区 | 亚洲成a人v欧美综合天堂下载| 久久亚洲私人国产精品va媚药| 欧美艳星brazzers| 成人黄色国产精品网站大全在线免费观看 | 欧美日韩在线亚洲一区蜜芽| 成人综合激情网|