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

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

?? ul_c450.c

?? linux下的RS485的驅動 值得一看
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*******************************************************************  uLan Communication - uL_DRV - multiplatform uLan driver  ul_c450.c	- chip driver for 16450  (C) Copyright 1996-2004 by Pavel Pisa - project originator        http://cmp.felk.cvut.cz/~pisa  (C) Copyright 1996-2004 PiKRON Ltd.        http://www.pikron.com  (C) Copyright 2002-2004 Petr Smolik    The uLan driver project can be used and distributed   in compliance with any of next licenses   - GPL - GNU Public License     See file COPYING for details.   - LGPL - Lesser GNU Public License   - MPL - Mozilla Public License   - and other licenses added by project originator  Code can be modified and re-distributed under any combination  of the above listed licenses. If contributor does not agree with  some of the licenses, he/she can delete appropriate line.  WARNING: if you delete all lines, you are not allowed to  distribute code or sources in any form. *******************************************************************//*******************************************************************//* Chip driver for 16450 */#include "serial_reg.h"#define u450_inb(base,port)	 ul_inb(base+port*U450_BYTES_PER_REGS)#define u450_outb(base,port,val) ul_outb(base+port*U450_BYTES_PER_REGS,val)#define U450_MCR_IE_C	0x0D	/* receive */#define U450_MCR_OE_C	0x0E	/* transmit */#define U450_MCR_OEQ_C	0x02	/* transmit ? */#define U450_MSR_RxD_C	UART_MSR_CTS /* RxD line readback */#define U450_MSR_TxD_C	UART_MSR_DSR /* TxD line readback */#define U450_MSR_DTxD_C	UART_MSR_DDSR /* TxD line changed */#define U450_LCR_UL	0x3B	/* receive/transmit */#define U450_LCR_ULC	0x2B	/* transmit control character */#define U450_LCR_ULB	0x7B	/* transmit line break */#define U450_LSR_C	0x04	/* controll character received */#define U450_LSR_ERR	0x1A	/* error in receiver */#ifdef CONFIG_OC_UL_DRV_SYSLESS #define U450_FIX_RDI_GARBAGE(udrv,ret_code) \ do { if(ret_code==5) u450_inb(udrv->port,UART_RX); } while(0) #else /* CONFIG_OC_UL_DRV_SYSLESS */#define U450_FIX_RDI_GARBAGE(udrv,ret_code) do{;}while(0)#endif /* CONFIG_OC_UL_DRV_SYSLESS *//*Definitions to allow support converters with different pins routing*/#ifdef CONFIG_OC_UL_DRV_U450_VARPINS#define U450_CHOPT_MSRSWAP	0x2000#define U450_MCR_CODES chip_buff[4]#define U450_MSR_CODES chip_buff[5]#define U450_MCR_IE(udrv)	((uchar)(udrv->U450_MCR_CODES>>0))#define U450_MCR_OE(udrv)	((uchar)(udrv->U450_MCR_CODES>>8))#define U450_MCR_OEQ(udrv)	((uchar)(udrv->U450_MCR_CODES>>16))#define U450_MSR_RxD(udrv)	((uchar)(udrv->U450_MSR_CODES>>0))#define U450_MSR_TxD(udrv)	((uchar)(udrv->U450_MSR_CODES>>8))#define U450_MSR_DTxD(udrv)	((uchar)(udrv->U450_MSR_CODES>>16))#define U450_SET_MCR_CODES(udrv,ie,oe,oeq) \	(udrv->U450_MCR_CODES=(ie)<<0|(oe)<<8|(oeq)<<16)#define U450_SET_MSR_CODES(udrv,rxd,txd,dtxd) \	(udrv->U450_MSR_CODES=(rxd)<<0|(txd)<<8|(dtxd)<<16)#else /*CONFIG_OC_UL_DRV_U450_VARPINS*/#define U450_MCR_IE(udrv)	U450_MCR_IE_C#define U450_MCR_OE(udrv)	U450_MCR_OE_C#define U450_MCR_OEQ(udrv)	U450_MCR_OEQ_C#define U450_MSR_RxD(udrv)	U450_MSR_RxD_C#define U450_MSR_TxD(udrv)	U450_MSR_TxD_C#define U450_MSR_DTxD(udrv)	U450_MSR_DTxD_C#endif /*CONFIG_OC_UL_DRV_U450_VARPINS*//*** Test interrupt request state ***/int u450_pool(ul_drv *udrv){  unsigned u;  u=u450_inb(udrv->port,UART_IIR);  return (u&UART_IIR_NO_INT)?0:((u&UART_IIR_ID)|1);};/*** Wait end of transmit ***/int u450_weot(ul_drv *udrv, int ret_code){  int ret;  unsigned u;  uchar lsr_val;  uchar uc;  if(!udrv->chip_buff[0]||     !(u450_inb(udrv->port,UART_MCR)&U450_MCR_OEQ(udrv)))   {    UL_FRET;    u450_outb(udrv->port,UART_LCR,U450_LCR_UL);    return UL_RC_PROC;  };  u450_outb(udrv->port,UART_IER,UART_IER_RDI);  lsr_val=u450_inb(udrv->port,UART_LSR);  ret=UL_RC_WIRQ;  if(!(~lsr_val&(UART_LSR_THRE|UART_LSR_TEMT)))  {    LOG_CHIO(" TMI");//    ret=UL_RC_PROC; /* was commented out */  }  if(lsr_val&U450_LSR_ERR)     ret=UL_RC_EFRAME;	/* frame error */  if(lsr_val&UART_LSR_DR)  {    if((u=udrv->chip_buff[1])) udrv->chip_buff[1]=0;     else if((u=udrv->chip_buff[0])) udrv->chip_buff[0]=0;    uc=u450_inb(udrv->port,UART_RX);    if((u^uc)&0xff||!u)    {      LOG_CHIO(" TE%c!",u?'0':'1');      ret=UL_RC_EBADCHR;    }else{      LOG_CHIO(".");      if(ret>=0&&!udrv->chip_buff[0])	ret=UL_RC_PROC;    };   } else {    U450_FIX_RDI_GARBAGE(udrv,ret_code);  }  if(ret!=UL_RC_WIRQ)  {    u450_outb(udrv->port,UART_LCR,U450_LCR_UL);    UL_FRET;  };  LOG_CHIO(" weot ret %d ",ret);  return ret;};/*** Switch from receive to transmit ***/  int u450_sw_R2T_1(ul_drv *udrv, int ret_code);  int u450_sw_R2T_2(ul_drv *udrv, int ret_code);  int u450_sw_R2T_3(ul_drv *udrv, int ret_code);int u450_sw_R2T(ul_drv *udrv, int ret_code){  udrv->chip_buff[0]=udrv->chip_buff[1]=0; /* A_wait */  UL_FCALL2(u450_weot,u450_sw_R2T_1);  return UL_RC_PROC;};int u450_sw_R2T_1(ul_drv *udrv, int ret_code){  uchar uc;  if(ret_code<0) {UL_FRET;return ret_code;};  u450_outb(udrv->port,UART_MCR,U450_MCR_IE(udrv));  u450_outb(udrv->port,UART_IER,UART_IER_THRI);  u450_outb(udrv->port,UART_TX,0);  UL_FNEXT(u450_sw_R2T_2);  uc=u450_inb(udrv->port,UART_LSR);  if(uc&UART_LSR_THRE) return UL_RC_PROC;    else return UL_RC_WIRQ;}; int u450_sw_R2T_2(ul_drv *udrv, int ret_code){  uchar uc, uc1; /* A_wait1: */  uc=u450_inb(udrv->port,UART_MSR); /* Need to be disabled for LPC210x */  if(uc&U450_MSR_TxD(udrv))    udrv->chip_temp&=~0x400;  else    udrv->chip_temp|=0x400;  u450_outb(udrv->port,UART_IER,UART_IER_MSI);  uc1=u450_inb(udrv->port,UART_LSR);  if (!(~uc1&(UART_LSR_TEMT|UART_LSR_THRE))) {    UL_FRET;    return UL_RC_PROC;  } #ifdef CONFIG_OC_UL_DRV_SYSLESS  /* The next code seems to be required for LPC2148 UART */  if((!(uc&U450_MSR_TxD(udrv)))&&(uc1&UART_LSR_THRE)) {    UL_FRET;    return UL_RC_PROC;  } #endif /*CONFIG_OC_UL_DRV_SYSLESS*/  UL_FNEXT(u450_sw_R2T_3);  return UL_RC_WIRQ;}; int u450_sw_R2T_3(ul_drv *udrv, int ret_code){  uchar uc; #if 0  static int reported_bad_chip=0; #endif /* A_wait2: */  uc=u450_inb(udrv->port,UART_MSR);  if(uc&U450_MSR_DTxD(udrv))    udrv->chip_temp&=~0x400;  if((uc&U450_MSR_TxD(udrv))&&(udrv->chip_temp&0x400))    return UL_RC_WIRQ; #if 0  while(~u450_inb(udrv->port,UART_LSR)&	(UART_LSR_TEMT|UART_LSR_THRE))   if(!reported_bad_chip++)     LOG_FATAL(KERN_CRIT "uLan u450_sw_R2T_3 : problematic IC => looping in ISR\n"); #endif  UL_FRET;  return UL_RC_PROC;}; /*** Receive character into char_buff ***/  int u450_recch_1(ul_drv *udrv, int ret_code);  int u450_recch_2(ul_drv *udrv, int ret_code);int u450_recch(ul_drv *udrv, int ret_code){  udrv->char_buff=0;  if(u450_inb(udrv->port,UART_MCR)&U450_MCR_OEQ(udrv))  {    UL_FCALL2(u450_weot,u450_recch_1);    return UL_RC_PROC;  };  UL_FNEXT(u450_recch_2);  return UL_RC_PROC;}; int u450_recch_1(ul_drv *udrv, int ret_code){  u450_outb(udrv->port,UART_MCR,U450_MCR_IE(udrv));  if(ret_code<0) {UL_FRET;return ret_code;};  UL_FNEXT(u450_recch_2);  return UL_RC_PROC;};INLINE int u450_recch_sub(ul_drv *udrv,int lsr_val,int rec_char){ /* helper function to process received character */  if(lsr_val&U450_LSR_C) udrv->last_ctrl=rec_char|=0x100;    else udrv->last_ctrl&=0x7F;   udrv->char_buff=rec_char;  udrv->xor_sum^=rec_char;udrv->xor_sum++;  if(lsr_val&U450_LSR_ERR)  {    LOG_CHIO(" ER:%03X",udrv->char_buff);    return UL_RC_EFRAME; /* frame error */  };  LOG_CHIO(" R:%03X",udrv->char_buff);  return UL_RC_PROC;}; int u450_recch_2(ul_drv *udrv, int ret_code){  uchar lsr_val;  u450_outb(udrv->port,UART_IER,UART_IER_RDI);  lsr_val=u450_inb(udrv->port,UART_LSR);  if(!(lsr_val&UART_LSR_DR)) {    U450_FIX_RDI_GARBAGE(udrv,ret_code);    return UL_RC_WIRQ;  }   UL_FRET;  return u450_recch_sub(udrv,lsr_val,u450_inb(udrv->port,UART_RX));};/*** Send character from char_buff ***/  int u450_sndch_1(ul_drv *udrv, int ret_code);  int u450_sndch_2(ul_drv *udrv, int ret_code);int u450_sndch(ul_drv *udrv, int ret_code){  uchar uc;  uc=(udrv->char_buff&0x100)?U450_LCR_ULC:U450_LCR_UL;  if(u450_inb(udrv->port,UART_LCR)!=uc)  { /* change between control and data character format */   if((u450_inb(udrv->port,UART_MCR)&U450_MCR_OEQ(udrv)))   { /* wait to end of transmit */     UL_FCALL2(u450_weot,u450_sndch_1);     return UL_RC_PROC;   }else{ /* direction switch necessary */     udrv->chip_buff[0]=udrv->chip_buff[1]=0;     UL_FCALL2(u450_sw_R2T_1,u450_sndch_1);     UL_FCALL2(u450_weot,u450_sw_R2T_1);     return UL_RC_PROC;   };  };  if(!(u450_inb(udrv->port,UART_MCR)&U450_MCR_OEQ(udrv)))  { /* direction switch necessary */    udrv->chip_buff[0]=udrv->chip_buff[1]=0;    UL_FCALL2(u450_sw_R2T_1,u450_sndch_1);    UL_FCALL2(u450_weot,u450_sw_R2T_1);  } else UL_FNEXT(u450_sndch_1);  return UL_RC_PROC;};int u450_sndch_1(ul_drv *udrv, int ret_code){  uchar uc;  if(ret_code<0) {UL_FRET;return ret_code;};  u450_outb(udrv->port,UART_MCR,U450_MCR_OE(udrv));  if(udrv->char_buff&0x100)  { /* store last ctrl for connect line busy/ready */    udrv->last_ctrl=udrv->char_buff;    uc=U450_LCR_ULC;  }else{     uc=U450_LCR_UL;  };  udrv->chip_buff[1]=udrv->chip_buff[0];  udrv->chip_buff[0]=udrv->char_buff|0x1000;   udrv->xor_sum^=udrv->char_buff;udrv->xor_sum++;  u450_outb(udrv->port,UART_IER,UART_IER_THRI);  u450_outb(udrv->port,UART_LCR,uc);  /* control/data character */  u450_outb(udrv->port,UART_TX,(uchar)udrv->char_buff);  LOG_CHIO(" T:%03X",udrv->char_buff);  UL_FNEXT(u450_sndch_2);  return UL_RC_WIRQ;}; int u450_sndch_2(ul_drv *udrv, int ret_code){  uchar uc;  unsigned u;  uc=u450_inb(udrv->port,UART_LSR);  UL_FRET;  if(uc&U450_LSR_ERR)      return UL_RC_EFRAME;	/* frame error */  if(!(uc&UART_LSR_DR)) {      U450_FIX_RDI_GARBAGE(udrv,ret_code);      return UL_RC_PROC;		/* no char */   }  if((u=udrv->chip_buff[1])) udrv->chip_buff[1]=0;    else if((u=udrv->chip_buff[0])) udrv->chip_buff[0]=0;      else return UL_RC_PROC;  uc=u450_inb(udrv->port,UART_RX);  if((u^uc)&0xff||!u)  {    LOG_CHIO(" TE%c!",u?'2':'3');    return UL_RC_EBADCHR;  };  LOG_CHIO(".");  return UL_RC_PROC;}; /*** Wait for time or received character ***/  int u450_wait_1(ul_drv *udrv, int ret_code);  int u450_wait_2(ul_drv *udrv, int ret_code);int u450_wait(ul_drv *udrv, int ret_code){  udrv->char_buff=0;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧洲综合另类| 欧美一卡2卡3卡4卡| 国产精品萝li| 欧美丰满少妇xxxbbb| 美女高潮久久久| 欧美激情一区二区在线| 欧美剧情电影在线观看完整版免费励志电影 | 久久久不卡网国产精品二区| 精品亚洲国产成人av制服丝袜| 久久九九全国免费| 欧美日韩成人一区二区| 国产一区二区精品久久91| 欧美激情一区二区三区不卡| 欧美日韩在线精品一区二区三区激情| 日韩精品三区四区| 中文字幕欧美国产| 91精品国产一区二区三区| 91亚洲精品久久久蜜桃| 日韩av网站免费在线| 久久九九国产精品| 欧美刺激午夜性久久久久久久 | 麻豆精品一区二区| 亚洲福利一区二区三区| 久久精品一二三| 欧美视频中文一区二区三区在线观看| 国产99久久精品| 亚洲a一区二区| 国产精品色眯眯| 日韩色视频在线观看| 91老师片黄在线观看| 国产一区二区三区在线观看精品 | 亚洲视频免费在线观看| 欧美成人三级电影在线| 91精品欧美福利在线观看 | 欧美一区二区三区视频免费 | 亚洲欧美成aⅴ人在线观看| 欧美一级夜夜爽| 欧美偷拍一区二区| 不卡视频在线看| 久草精品在线观看| 久久精品国产亚洲a| 午夜伊人狠狠久久| 亚洲免费大片在线观看| 一个色妞综合视频在线观看| 欧美激情在线观看视频免费| 欧美一级精品大片| 欧美日韩在线播放| 91麻豆精东视频| 色94色欧美sute亚洲线路二| 国产成人免费视频网站| 久久国产精品99精品国产| 日日夜夜精品视频天天综合网| 国产精品第一页第二页第三页| 欧美一级精品在线| 精品国产百合女同互慰| 91精品视频网| 久久伊99综合婷婷久久伊| 日韩女优毛片在线| 欧美一卡2卡3卡4卡| 久久久九九九九| wwww国产精品欧美| 精品国精品国产| 国产午夜三级一区二区三| 亚洲精品在线观| 欧美电视剧在线观看完整版| 91麻豆精品国产自产在线| 欧美日韩国产免费一区二区| 日韩欧美国产系列| 日韩欧美电影一区| 日韩三级.com| 制服丝袜中文字幕一区| 国产精品中文字幕日韩精品| 亚洲图片欧美一区| 91丨九色丨黑人外教| 久久网站最新地址| 99久久精品国产网站| 免费观看30秒视频久久| 国产一区二区三区在线观看免费| 极品少妇xxxx精品少妇| 成人91在线观看| 国产黄色精品视频| 久久久国产精华| 免费人成在线不卡| 亚洲一二三专区| 激情丁香综合五月| 成人av小说网| 欧美伊人久久大香线蕉综合69| 欧美欧美欧美欧美| 精品女同一区二区| 欧美激情在线观看视频免费| 香蕉久久一区二区不卡无毒影院 | 国产精品一区二区久久不卡| 国产成人在线网站| 欧洲av在线精品| 日韩一二三四区| 中文字幕乱码亚洲精品一区| 亚洲国产aⅴ成人精品无吗| 男女性色大片免费观看一区二区 | 在线一区二区观看| 日韩一区二区三区四区| 亚洲色图.com| 麻豆传媒一区二区三区| 成人毛片在线观看| 日韩亚洲欧美在线观看| 欧美国产激情一区二区三区蜜月| 欧洲一区在线观看| 欧美大片一区二区三区| 悠悠色在线精品| 国产jizzjizz一区二区| 99re热这里只有精品视频| 欧美性感一区二区三区| 精品999在线播放| 亚洲午夜精品一区二区三区他趣| 国产麻豆一精品一av一免费| 欧美视频在线观看一区二区| 欧美日韩亚洲另类| 国产精品黄色在线观看| 国产成人在线免费观看| 日本v片在线高清不卡在线观看| 久久 天天综合| 欧美日韩国产电影| 国产精品三级电影| 国内精品伊人久久久久av影院| 色综合天天综合网国产成人综合天 | 国产91露脸合集magnet| av亚洲精华国产精华精| 日韩一区二区三区四区| 一区二区三区在线播放| 国产一本一道久久香蕉| 日韩免费视频线观看| 亚洲一区二区在线观看视频| 国产在线精品一区二区| 欧美精品在线观看播放| 中文字幕在线观看不卡| 成人禁用看黄a在线| 26uuu精品一区二区 | 日本特黄久久久高潮| 色综合天天综合网国产成人综合天 | 国产日韩欧美激情| 蜜臀av一级做a爰片久久| 在线观看中文字幕不卡| 国产精品国产馆在线真实露脸| 国产综合久久久久久久久久久久| 欧美精选在线播放| 一区二区三区.www| av在线一区二区| 国产日韩精品视频一区| 精品一二三四区| 久久男人中文字幕资源站| 日韩激情视频网站| 欧美日韩精品欧美日韩精品 | 欧美日韩精品专区| 亚洲电影一级黄| 色又黄又爽网站www久久| 中文字幕一区二区日韩精品绯色| 欧美精品少妇一区二区三区| 免费成人在线视频观看| 五月婷婷综合激情| 欧美国产精品久久| 欧美视频在线不卡| 九九精品视频在线看| 亚洲欧美日韩人成在线播放| 欧美酷刑日本凌虐凌虐| 成人高清av在线| 久久国产综合精品| 亚洲国产va精品久久久不卡综合| 91美女在线看| 成人av电影在线| 在线观看免费亚洲| xf在线a精品一区二区视频网站| 麻豆精品一区二区综合av| 欧美日韩在线播放三区四区| 免费成人在线观看视频| 日韩一级大片在线观看| 成人网在线免费视频| 欧美日韩精品一区二区三区 | 欧美精品一区二区三区蜜桃| 91麻豆自制传媒国产之光| 99精品视频免费在线观看| 国产高清久久久久| 狠狠久久亚洲欧美| 久久er99热精品一区二区| 三级欧美在线一区| 视频一区免费在线观看| 一区二区三区影院| 一区二区高清在线| 亚洲综合色区另类av| 日韩久久一区二区| 中文字幕第一区二区| 中文字幕一区视频| 国产精品美女久久久久久久网站| 亚洲男人天堂av| 亚洲午夜羞羞片| 色狠狠av一区二区三区| 欧美日韩一区三区| 国产精品不卡在线| 免费一级片91| 欧美高清www午色夜在线视频| 亚洲视频免费观看| 国产精品一二三四区|