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

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

?? virtex.c

?? 該文件是rt_linux
?? C
字號:
/*!****************************************************************************!*! FILE NAME  : vertex.c*!*! DESCRIPTION: Implements an interface towards virtex FPGA (mounted on one of our*!              evaluation boards) from userspace using ioctl()'s*!*!              The FPGA can be programmed by copying the bit-file to /dev/fpga.*!*!                cp fpga.bit > /dev/fpga*!*!                Kernel log should look like:*!                  69900 bytes written*!                  FPGA-configuration completed, no errors*!*!              Number of bytes written depends on the FPGA*!*!                From Xilinx data sheet:*!                XCV50    559,200 bits*!                XCV100   781,216 bits*!                XCV800 4,715,616 bits*!*!              Accepted file type is the design.bit generated by Alliance*!              Design Manager.*!              This software just sends the bitfile into the device without*!              checking device type etc.*!*!              Sync-header 0xff 0xff 0xff 0xff defines the start for the*!              byte stream, everything from that position is written to the FPGA.*!*!  *! Jul 19 2002  Stefan Lundberg    Initial version.*! $Log: virtex.c,v $*! Revision 1.1  2002/06/25 09:58:58  stefanl*! New FPGA driver for Platoon*!*!*! ---------------------------------------------------------------------------*!*! (C) Copyright 2002 Axis Communications AB, LUND, SWEDEN*!*!***************************************************************************//* $Id: virtex.c,v 1.1 2002/06/25 09:58:58 stefanl Exp $ *//****************** INCLUDE FILES SECTION ***********************************/#include <linux/module.h>#include <linux/sched.h>#include <linux/slab.h>#include <linux/errno.h>#include <linux/major.h>#include <linux/kernel.h>#include <linux/fs.h>#include <linux/string.h>#include <linux/init.h>#include <linux/config.h>#include <linux/hdreg.h>#include <linux/mm.h>#include <asm/etraxvirtex.h>#include <asm/system.h>#include <asm/svinto.h>#include <asm/uaccess.h>#include <asm/io.h>#include <asm/delay.h>#include "virtex.h"/******************* VIRTEX DEFINITION SECTION **************************/#define VIRTEX_DEBUG(x)#define VIRTEX_MAJOR 246  /* EXPERIMENTAL */static const char virtex_name[] = "virtex";/****************** FUNCTION DEFINITION SECTION *************************///// Read register interface for FPGA programming:////   FPGA_DONE is connected to S1CD_N G28//   FPGA_INIT_N is connected to S1IO_N G27//// Write register interface for FPGA programming:////  Bit:       15         14      13    12      9   8   7   0//        ____________________________________________________//       | fpga_write | program | cclk | reserved | cs | data |//       |____________|_________|______|__________|____|______|//// csp0 = cs_fpga1 = FPGA programming interface// csr0 = cs_fpga2 = register interface towards FPGA constructionstatic volatile short *port_csp0_word_addr;static volatile short *port_csr0_word_addr;static volatile unsigned char open_count;static volatile unsigned char bytes_written;static volatile unsigned long bytes_written_cnt;static volatile unsigned char sync_found;static volatile unsigned char sync_count;static volatile unsigned char sync_ff_count;#define WRITE_FPGA_PROG_REG(data) *port_csp0_word_addr=(data)#define SET_PROGRAM_BIT(data) (data)|(1<<14)#define SET_WRITE_BIT(data) (data)|(1<<15)#define CLR_WRITE_BIT(data) (data)&(~(1<<15))#define SET_CS_BIT(data) (data)|(1<<8)#define CLR_CS_BIT(data) (data)&(~(1<<8))#define SET_CCLK_BIT(data) (data)|(1<<13)#define CLR_CCLK_BIT(data) (data)&(~(1<<13))// Bit in read port G (always inputs)#define READ_INIT  (*R_PORT_G_DATA)&(1<<27)#define READ_DONE  (*R_PORT_G_DATA)&(1<<28)void start_virtex_program(void){  unsigned short reg_data=0;  printk("Start writing to FPGA\n");  reg_data = SET_CS_BIT(reg_data); // FPGA unselected  reg_data = SET_PROGRAM_BIT(reg_data);  WRITE_FPGA_PROG_REG(reg_data);  while(!READ_INIT); // Wait for init    reg_data = SET_WRITE_BIT(reg_data);  WRITE_FPGA_PROG_REG(reg_data);  reg_data = CLR_CS_BIT(reg_data); // FPGA selected, CS is active low  WRITE_FPGA_PROG_REG(reg_data);  return;}// According to datasheet, bytes should be reversed, it is unknown to me why.unsigned char bit_reverse(unsigned char data) {  unsigned char in=data;  unsigned short out=0;  unsigned int i=0;  for(i=0;i<8;i++) {    if(in&0x1) {      out|=0x1;    }    in=in>>1;    out=out<<1;  }  return(out>>1);  }void virtex_program(char* ptr,size_t count){  int c;  char *p;  unsigned char data;    unsigned short reg_data=0;//  short tmp_cnt;    c=count;  p=ptr;  if(!sync_found) {    c=count;    p=ptr;    while(c--) {      data=(unsigned char)*p++;      sync_count++;      if(sync_count>=256) {        printk("Sync not found, aborting\n");        return;      }      if(data==0xff) {        sync_ff_count++;      } else {        sync_ff_count=0;      }      if(sync_ff_count==4) {        sync_found=1;        VIRTEX_DEBUG(printk("Sync found at offset %d\n",sync_count));        p--;p--;p--;p--;        c++;c++;c++;c++;        break;      }    }  }  if(sync_found) {    if(bytes_written==0) {      start_virtex_program();    }    bytes_written=1;      reg_data = SET_PROGRAM_BIT(reg_data);    reg_data = SET_WRITE_BIT(reg_data);    reg_data = CLR_CS_BIT(reg_data);  //    tmp_cnt=0;        printk("*");    while(c--) {      data=(unsigned char)*p++;      data=bit_reverse(data);/* debug      tmp_cnt++;      if(tmp_cnt<=32 || c<=32 ) {        printk("0x%x ",data);       }      if(tmp_cnt==32 || c==0 ) {        printk("\n");       }*/      bytes_written_cnt++;      reg_data = CLR_CCLK_BIT(reg_data);      WRITE_FPGA_PROG_REG(reg_data|(data&0xff));      reg_data = SET_CCLK_BIT(reg_data);      WRITE_FPGA_PROG_REG(reg_data|(data&0xff));      reg_data = CLR_CCLK_BIT(reg_data);      WRITE_FPGA_PROG_REG(reg_data|(data&0xff));      }  }     return;}void stop_virtex_program(void){  unsigned short reg_data=0;  reg_data = SET_PROGRAM_BIT(reg_data);  reg_data = SET_WRITE_BIT(reg_data);  reg_data = CLR_CCLK_BIT(reg_data);  reg_data = SET_CS_BIT(reg_data); // release CS  WRITE_FPGA_PROG_REG(reg_data);  reg_data = CLR_WRITE_BIT(reg_data); // release write, important to do!  WRITE_FPGA_PROG_REG(reg_data);  printk("%d bytes written\n",bytes_written_cnt);  if(READ_DONE) {    printk("FPGA-configuration completed, no errors\n");  } else {    printk("Error, FPGA-configuration failed\n");  }  return;}static intvirtex_open(struct inode *inode, struct file *filp){  port_csp0_word_addr = port_csp0_addr;  if(open_count>=1) {    printk("FPGA Device busy, aborting\n");    return(-EBUSY);  }  open_count++;  bytes_written=0;  sync_found=0;  sync_count=0;  sync_ff_count=0;  bytes_written_cnt=0;  return(0);}static intvirtex_release(struct inode *inode, struct file *filp){  open_count--;  if(bytes_written!=0)stop_virtex_program();  return 0;}// FPGA programming interfacestatic ssize_t virtex_write(struct file * file, const char * buf,                                  size_t count, loff_t *ppos){  char *ptr;  VIRTEX_DEBUG(printk("Write FPGA count %d\n", count));    ptr=kmalloc(count, GFP_KERNEL);  if(!ptr) {    printk("FPGA device, kernel malloc failed (%d) bytes\n",count);    return -EFAULT;  }  if(copy_from_user(ptr, buf, count)) {    printk("copy_from_user failed\n");    return -EFAULT;  }    virtex_program(ptr,count);    kfree(ptr);  return count;}/* Main device API. ioctl's to write or read to/from registers. */int virtex_writereg(unsigned short theReg, unsigned short theValue){  port_csr0_word_addr[theReg]=theValue;  return(0);}unsigned short virtex_readreg(unsigned short theReg){  return(port_csr0_word_addr[theReg]);}static intvirtex_ioctl(struct inode *inode, struct file *file,	  unsigned int cmd, unsigned long arg){  if(_IOC_TYPE(cmd) != ETRAXVIRTEX_FPGA_IOCTYPE) {    return -EINVAL;  }    switch (_IOC_NR(cmd)) {    case VIRTEX_FPGA_WRITEREG:      /* write to an FPGA register */      VIRTEX_DEBUG(printk("virtex wr %d %d\n",                VIRTEX_FPGA_ARGREG(arg),               VIRTEX_FPGA_ARGVALUE(arg)));            return virtex_writereg(VIRTEX_FPGA_ARGREG(arg),                             VIRTEX_FPGA_ARGVALUE(arg));    case VIRTEX_FPGA_READREG:    {      unsigned char val;      /* read from an FPGA register */      VIRTEX_DEBUG(printk("virtex rd %d ",               VIRTEX_FPGA_ARGREG(arg)));      val = virtex_readreg(VIRTEX_FPGA_ARGREG(arg));      VIRTEX_DEBUG(printk("= %d\n", val));      return val;    }					        default:      return -EINVAL;    }return 0;}static struct file_operations virtex_fops = {	owner:    THIS_MODULE,	ioctl:    virtex_ioctl,	open:     virtex_open,        write:    virtex_write,	release:  virtex_release,};static int __initvirtex_init(void){  int res;    /* register char device */  res = register_chrdev(VIRTEX_MAJOR, virtex_name, &virtex_fops);  if(res < 0) {          printk(KERN_ERR "virtex: couldn't get a major number.\n");          return res;  }    port_csr0_word_addr = (volatile unsigned short *)                         ioremap((unsigned long)(MEM_CSR0_START |                                                MEM_NON_CACHEABLE), 16);     // see ~/platoon/rel2/platoon/os/linux/arch/cris/mm/init.c//              port_csp0_addr = (volatile unsigned long *)//                 ioremap((unsigned long)(MEM_CSP0_START |//                                         MEM_NON_CACHEABLE), 16);    open_count=0;    printk("VIRTEX(TM) FPGA driver v1.0, (c) 2002 Axis Communications AB\n");    return 0;}/* this makes sure that virtex_init is called during boot */module_init(virtex_init);/****************** END OF FILE virtex.c ********************************/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧洲精品成人久久奇米网| 日韩欧美黄色影院| 国产成人av资源| 国产精品99久久久久久似苏梦涵| 麻豆传媒一区二区三区| 欧美bbbbb| 久久99日本精品| 国产一区二区三区香蕉| 国产一区二区三区| 国产成人在线视频网站| 成人丝袜高跟foot| 99久久综合精品| 日本高清免费不卡视频| 欧美日韩夫妻久久| 精品欧美一区二区在线观看| 精品国产99国产精品| 中文字幕精品三区| 一区二区三区在线影院| 午夜一区二区三区在线观看| 日韩精品三区四区| 狠狠色综合色综合网络| 成人av在线一区二区| 欧美日韩在线播| 精品国产91洋老外米糕| 日韩美女视频一区| 日本人妖一区二区| 大白屁股一区二区视频| 欧美亚洲国产怡红院影院| 欧美一级欧美三级| 国产精品毛片高清在线完整版| 亚洲精品国产第一综合99久久 | 99精品视频在线免费观看| 91高清视频免费看| 精品欧美一区二区在线观看| 国产精品白丝在线| 久久99久久99小草精品免视看| 国产九色sp调教91| 欧美性色aⅴ视频一区日韩精品| 精品sm捆绑视频| 亚洲综合无码一区二区| 国内外成人在线视频| 色综合天天综合狠狠| 日韩免费在线观看| 亚洲国产成人porn| 国产suv精品一区二区三区| 欧美性猛交xxxx黑人交| 中文在线免费一区三区高中清不卡| 亚洲一区在线播放| a在线欧美一区| 欧美第一区第二区| 亚洲国产成人va在线观看天堂| 成人亚洲一区二区一| 精品区一区二区| 日本最新不卡在线| 欧美在线小视频| 欧美韩日一区二区三区四区| 精品一区二区成人精品| 欧美区一区二区三区| 一区二区三区日本| 色呦呦一区二区三区| 国产精品久久久久影视| 国产盗摄一区二区| 精品剧情v国产在线观看在线| 午夜电影一区二区| 欧美日韩一二三| 亚洲精品国产无天堂网2021| caoporn国产精品| 国产精品久久一卡二卡| 懂色av一区二区在线播放| 国产丝袜欧美中文另类| 成人永久aaa| 国产精品三级电影| 波多野结衣在线aⅴ中文字幕不卡| 2023国产一二三区日本精品2022| 久久99精品一区二区三区| 欧美一级二级三级乱码| 免费在线看成人av| 337p日本欧洲亚洲大胆精品| 国产一区福利在线| 国产精品对白交换视频 | 欧美系列日韩一区| 亚洲一区二区高清| 欧美一区二区三区日韩| 久久成人免费网| 国产日韩欧美在线一区| 岛国精品在线播放| 一区二区视频在线看| 欧美亚洲高清一区| 日韩精品午夜视频| 久久久亚洲综合| av日韩在线网站| 悠悠色在线精品| 欧美嫩在线观看| 国产制服丝袜一区| 中文字幕一区二区三区色视频| 日本精品一区二区三区高清| 午夜av一区二区三区| 久久久久久久久久久久电影| 粉嫩aⅴ一区二区三区四区五区| 亚洲丝袜美腿综合| 欧美片网站yy| 成人一二三区视频| 婷婷中文字幕一区三区| 久久亚洲影视婷婷| 91久久人澡人人添人人爽欧美| 日韩精品亚洲一区| 国产精品色在线观看| 欧美老肥妇做.爰bbww视频| 国产麻豆成人传媒免费观看| 日韩美女视频一区| wwwwww.欧美系列| 欧洲一区二区av| 懂色av一区二区三区免费观看| 亚洲精品视频在线| 久久久国产精华| 欧美另类z0zxhd电影| 成人激情免费网站| 蜜臀av一区二区在线免费观看| 中文字幕一区在线| 久久男人中文字幕资源站| 在线亚洲精品福利网址导航| 国内精品自线一区二区三区视频| 亚洲欧美日韩中文播放| 欧美不卡一二三| 欧美午夜精品一区二区三区| 国产成人啪免费观看软件| 美女网站色91| 五月激情丁香一区二区三区| 中文字幕欧美一| 久久精品水蜜桃av综合天堂| 欧美精品一卡两卡| 色又黄又爽网站www久久| 国产大片一区二区| 国产自产高清不卡| 美腿丝袜在线亚洲一区| 午夜精品久久久久影视| 洋洋av久久久久久久一区| 国产精品卡一卡二| 欧美国产综合一区二区| 欧美精品一区二区三区视频| 91精品欧美久久久久久动漫| 欧美色窝79yyyycom| 91免费视频观看| 91麻豆自制传媒国产之光| 成人免费观看视频| 国产99久久精品| 成人一区二区三区中文字幕| 国产精品一区二区男女羞羞无遮挡| 奇米影视一区二区三区| 秋霞av亚洲一区二区三| 日本少妇一区二区| 久久成人久久爱| 久久精品99久久久| 玖玖九九国产精品| 激情六月婷婷综合| 国产激情一区二区三区四区 | 午夜精品一区在线观看| 午夜免费久久看| 日本网站在线观看一区二区三区| 亚洲成a人片在线观看中文| 亚洲一区二区在线观看视频| 五月激情六月综合| 美女一区二区三区| 国产精品77777| 国产69精品久久久久777| 国产91精品精华液一区二区三区 | 亚洲国产美国国产综合一区二区| 亚洲精品国产无天堂网2021| 亚洲国产毛片aaaaa无费看| 视频一区视频二区中文| 狠狠色伊人亚洲综合成人| 成人涩涩免费视频| 欧美在线你懂得| 日韩一卡二卡三卡四卡| 国产偷国产偷亚洲高清人白洁| 国产精品区一区二区三| 一区二区久久久| 卡一卡二国产精品| 91在线无精精品入口| 欧美美女一区二区在线观看| 26uuu国产电影一区二区| 国产精品久久久久久亚洲伦| 一区二区三区欧美日韩| 久久99精品久久久久婷婷| 99久久er热在这里只有精品66| 精品视频在线免费看| 国产免费成人在线视频| 亚洲一区二区三区四区在线观看 | 欧美日韩综合一区| 26uuu精品一区二区三区四区在线| 国产精品免费看片| 日本成人中文字幕在线视频| 国产成人精品影院| 欧美精三区欧美精三区| 国产午夜精品久久久久久久 | 欧美色涩在线第一页| 久久久精品日韩欧美| 丝袜美腿亚洲一区二区图片| 丁香网亚洲国际| 91精品国产色综合久久久蜜香臀|