歡迎來到坤馳科技官方網站!
掃描二維碼

全國咨詢電話:
400-000-4026

當前位置:首頁 » 技術支持 » 高速數據采集卡之PCI總線驅動

高速數據采集卡之PCI總線驅動

文章出處:坤馳科技網責任編輯:坤馳科技市場部作者:坤馳科技人氣:-發表時間:2015-10-06 09:10:00

  北京坤馳科技有限公司主要提供高速數據采集卡、模塊、系統與解決方案,網址www.queetest.cn

  PCI總線是現在非常流行的計算機總線,學會它的驅動設計方法很重要。相信曾經想學習PCI總線驅動的人有這么一個經歷,就是去看那些講解PCI總線驅動的書籍和資料的時候,會被里面繁雜的內容所擊敗,又是什么配置空間又是什么枚舉的,還沒開始真正的去寫PCI的驅動,到這里就已經開始打退堂鼓了。其實,只要你認真下去,雖然有些東西看不明白,但是對于你寫PCI的驅動來說,似乎“不那么重要”。因為,Linux內核對PCI總線已經有了完美的支持,你所需要做的內容是非常小的一部份。

  Linux下的PCI總線,在系統上電的時候會逐一的掃描系統中存在的設備(包括設備和橋),總線號中斷號都是這個時候分配給設備的,如果你是初學者,這個過程如果不是很明白,你大可以先略過,去找一個帶有PCI總線的開發板,接上PCI的設備,讓系統重啟掃描一遍,再配合下面會給出的PCI總線驅動框架,你就會明白很多。

  眾所周知,Linux2.6內核引入了總線驅動模型這一概念,如此,很多基于總線的設備驅動就分成了總線驅動和設備驅動兩部分。其實PCI總線驅動跟2.6內核里面的platform總線有類似之處,只不過platform總線的匹配方式是名字匹配,也就是設備名和驅動名一致。PCI總線的匹配方式不只一種,常見的就是廠商號和設備號。當你加載PCI驅動的時候,驅動程序會把系統中已經存在的設備的廠商號和設備號與驅動程序中的對比,如果一致,則會注冊PCI總線驅動并進行下一步操作。

  對于PCI總線上電掃描過程,推薦去看一篇博客,http://blog.csdn.net/linuxdrivers/article/details/5849698,他講的詳細一點。

  下面是我寫的一個PCI總線的驅動程序,注意是總線驅動程序,這里并沒有實現具體的設備驅動。基于PCI總線的設備有很多種,但就PCI總線驅動這一塊來說,都大同小異,實現了PCI總線驅動之后,再去繼續做具體的設備驅動。

  程序如下(在2.6.31至3.1.4內核都可以運行成功):

  #include

  #include

  #include

  #include

  #include

  #include

  #include

  #include

  #include

  #include

  //設備相關

  #defineMY_VENDOR_ID0x168c//廠商號

  #defineMY_DEVICE_ID0x002a//設備號

  #defineMY_PCI_NAME"MYPCIE"//自己起的設備名

  staticintdebug=1;

  module_param(debug,int,S_IRUGO);

  #defineDBG(msg...)do{\

  if(debug)\

  printk(msg);\

  }while(0)

  structpcie_card

  {

  //端口讀寫變量

  intio;

  longrange,flags;

  void__iomem*ioaddr;

  intirq;

  };

  /*設備中斷服務*/

  staticirqreturn_tmypci_interrupt(intirq,void*dev_id)

  {

  structpcie_card*mypci=(structpcie_card*)dev_id;

  printk("irq=%d,mypci_irq=%d\n",irq,mypci-
  returnIRQ_HANDLED;

  }

  /*探測PCI設備*/

  staticint__initmypci_probe(structpci_dev*dev,conststructpci_device_id*ent)

  {

  intretval=0;//,intport,intmask;

  structpcie_card*mypci;

  if(pci_enable_device(dev))

  {

  printk(KERN_ERR"IOError.\n");

  return-EIO;

  }

  /*分配設備結構*/

  mypci=kmalloc(sizeof(structpcie_card),GFP_KERNEL);

  if(!mypci)

  {

  printk("In%s,kmallocerr!",__func__);

  return-ENOMEM;

  }

  /*設定端口地址及其范圍,指定中斷IRQ*/

  mypci-
  if(mypci-{

  printk("IRQis%d,it'sinvalid!\n",mypci-
  gotoout_mypci;

  }

  mypci-
  mypci-
  mypci-
  DBG("PCIbaseaddr0isio%s.\n",(mypci-

 

 

  若您有高速數據采集板卡定制需求,請聯系我們:400-000-4026
 

  關于坤馳科技:
  坤馳科技是專注于
高速數據采集與信號處理、高速數據存儲與記錄的高科技公司。坤馳科技為用戶提供成熟的標準高速數據采集產品與技術,也可為用戶提供定制化的高速信號采集解決方案。目前坤馳科技服務過的研究所、科研單位已達近百家。高速數據采集產品線涵蓋PCIExpress、cPCI、PXIe、VPX、USB等總線,包含高速AD、DA平臺、FPGA、DSP處理平臺,SATA/SSD、Flash存儲平臺等。
  全國咨詢電話:400-000-4026
 

  公司官方網站:http://www.afneew.live  

 

okooo澳客网