亚洲一区二区水蜜桃-久久精品美女高潮av-亚洲精品丝袜日韩-亚洲欧美日韩高清在线-在线视频中文字幕第三页-国产成人xxxx视频-国产成人精品免费视频下载-久久婷婷夜色精品国产-五月婷婷丁香花综合,亚洲欧美另类自拍区,久久久久久99日本,久久视频精彩在这里

網(wǎng)站首頁

HOME

關于我們

ABOUT US

產(chǎn)品展示

PRODUCT

新聞中心

NEWS

成功案例

CASE

下載中心

DOWNLOAD

人才招聘

RECRUIT

在線留言

MESSAGE

聯(lián)系我們

CONTACT US

    技術文章
    聯(lián)系我們
    西安航普電子有限責任公司
    電話:029-81870107
    郵箱:hangpudianzi@163.com
    網(wǎng)址:m.altjc.com
    公司地址:西安市電子四路西京三號2號樓17層
     
     
    技術文章
    VxWorks 下PMC-FPGA板卡驅動的開發(fā)與研究
    更新時間:2017-09-07 12:58:12    點擊:1315次
    摘 要: 討論了嵌入式實時操作系統(tǒng)VxWorks的I/O系統(tǒng)及驅動程序實現(xiàn)的原理,并根據(jù)PMC-FPGA轉接卡的開發(fā),詳細分析了VxWorks下PCI9030設備驅動程序的實現(xiàn)過程及相 關代碼。同時就該驅動程序對系統(tǒng)性能及實時性的提高作了必要的分析和討論。
      關鍵詞: VxWorks I/O系統(tǒng) PMC-FPGA PCI9030


      隨著通信技術、計算機技術的飛速發(fā)展,嵌入式實時操作系統(tǒng)越來越廣泛地應用到無線通信、交通、工業(yè)控制、軍事、航空航天、衛(wèi)星通信等各個領域。由于這些領域對實時性、可靠性要求很高,從而使得實時操作系統(tǒng)迅速發(fā)展起來。其中VxWorks是目前公認的最出色的一種實時操作系統(tǒng)。VxWorks具有可裁減的微內(nèi)核;高效的任務管理;優(yōu)先級搶占和時間片輪轉調(diào)度;準確的上下文切換;快速靈活的任務間通信等優(yōu)點。它已成為實際的嵌入式實時操作系統(tǒng)的工業(yè)標準和軍用標準[1]。嵌入式系統(tǒng)特別強調(diào)“量身定做”的原則,基于某一種特殊用途,可以針對這項用途開發(fā)出截然不同的一項系統(tǒng),這就是所謂的客制化[2]。通常需要根據(jù)系統(tǒng)的功能、成本、尺寸及用戶需求等方面來定制合適的硬件系統(tǒng),這就要求用戶開發(fā)自己的硬件驅動程序。驅動程序的開發(fā)是系統(tǒng)開發(fā)的重要組成部分,其性能、實時性、可靠性、指令的簡練性關系著應用系統(tǒng)的性能和可靠性,所以驅動程序的開發(fā)顯得至關重要。
      本文針對以PCI9030為接口控制芯片的PMC-FPGA(PCI Mezzanine Card)轉接卡的開發(fā),論述了VxWorks下設備驅動程序結構及PMC-FPGA板卡驅動程序的實現(xiàn)。
    1 VxWorks下I/O系統(tǒng)及驅動程序
    1.1 I/O系統(tǒng)簡介

      VxWorks下I/O系統(tǒng)為各種設備提供一個簡單、統(tǒng)一、獨立的設備接口,VxWorks下I/O系統(tǒng)的獨特設計使其比其他I/O系統(tǒng)更快、更靈活。這是實時系統(tǒng)的一個重要特征。[3]I/O系統(tǒng)的功能是將用戶的I/O請求路由到合適的驅動程序中的對應函數(shù)。它通過一個文件描述符表來實現(xiàn)這一功能。VxWorks設備驅動程序基本上通過I/O系統(tǒng)進行訪問,設備驅動程序被作為內(nèi)核過程來實現(xiàn),進一步提高了系統(tǒng)的實時性。I/O系統(tǒng)把設備作為特殊文件進行處理,提供了統(tǒng)一的管理、統(tǒng)一的界面和統(tǒng)一的使用方法,并把設備、文件、網(wǎng)絡通信組織成為一致的層次抽象。圖1描述了I/O系統(tǒng)與驅動程序間的層次關系。


      VxWorks下I/O系統(tǒng)中三個主要的元素是:驅動程序、設備和文件[3]。文件是用戶訪問設備的統(tǒng)一接口;驅動程序是實現(xiàn)I/O系統(tǒng)所需的七個具體基本函數(shù);設備是實際物理設備的抽象定義。
    1.2 驅動程序的執(zhí)行邏輯
      VxWorks下I/O系統(tǒng)提供七個基本的I/O函數(shù):creat( ), delete( ), open( ), close( ), read( ), write( )及ioctl(),并將用戶的I/O請求路由到設備對應的子程序。這主要是通過找到驅動列表中對應的驅動號來實現(xiàn)。驅動列表如表1所示。


      在驅動程序中通過調(diào)用iosDrvInstall()函數(shù)將驅動程序中的子程序(myOpen( ), myRead( )等)注冊到系統(tǒng)的設備驅動列表中并返回一個驅動號,如表1中所示的驅動號3。
    然后編寫創(chuàng)建設備子程序,通常命名為xxCreate(),這要定義一個雙向鏈表的DL_NODE結構和一個設備描述符的結構,結構中第一個變量是DEV_HDR類型,稱為設備頭。調(diào)用iosDevAdd()函數(shù),將設備添加到設備列表中(見圖2)。其中有管道設備、串口設備及PCI9030設備,pmcfpga是設備名稱。


      在iosLib.h()頭文件中,對設備頭DEV_HDR定義如下:
      typedef struct 
      { DL_NODE node;           /* 設備表結點 */
       short drvNum;          /* 設備的驅動號 */
       char * name;          /* 設備名 */
      } DEV_HDR;
      此外還要定義一個稱為設備描述符表的數(shù)據(jù)結構來將設備和驅動聯(lián)系起來(見表2)。這個設備描述符表中除了包含設備頭DEV_HDR、設備信息(包括設備號、廠商號、總線號、功能號、中斷號等)外,還可包含其他一些與設備無關的變量,如文件偏移量、布爾代碼設置的標志等。定義如下:
      typedef struct PCI9030Device
      {DEV_HDR;
       PCI9030_INFO;
      }PCI9030_DEVICE;


      從表2中可以看出設備名是pmcfpga, 驅動號為3,文件描述符號是2。通過調(diào)用iosDrvInstall()將驅動程序添加到驅動程序表并返回一個驅動號,再調(diào)用iosDevAdd()將設備描述符添加到設備列表并用設備名字(drvName)和驅動程序號(drvNum)對DEV_HDR初始化。
      驅動程序裝載完畢后,用戶執(zhí)行open(“/ pmfpga”, 參數(shù)2,參數(shù)3),I/O系統(tǒng)根據(jù)文件名找到設備及驅動號,并通過驅動表找到對應的驅動子程序入口函數(shù)myOpen(),同時返回文件描述符號fd。以后就可根據(jù)fd執(zhí)行其他函數(shù)的操作,如:close (fd)、read (fd, 參數(shù)2,參數(shù)3)等。圖3給出了設備、驅動程序連接的邏輯示意圖。
    2 PCI9030設備的訪問
    2.1 PCI9030簡介

      本設計的PMC轉接卡選用PLX公司的PCI9030作PCI總線的接口控制芯片,執(zhí)行PMC總線標準,主要應用于目前較為流行的一些只有PMC接口的單板機上,例如:VMIC公司生產(chǎn)的VMIVME系列;MEN公司生產(chǎn)的PowerPC單板機等。在PMC轉接卡上可以掛上FPGA、 DSP等數(shù)字處理能力較強的芯片以實現(xiàn)高速控制器,提高數(shù)字處理速度和運算速度,從而進一步滿足系統(tǒng)實時性的要求。PMC轉接卡內(nèi)部邏輯結構如圖4所示。

     


      這里FPGA作為PCI9030接口芯片的外設掛到PCI局部總線上,主板上的CPU要從PMC接口通過PCI9030才能訪問到外設,因此需要實現(xiàn)從PCI總線通過PCI9030到局部總線的訪問,所以驅動程序的關鍵是實現(xiàn)PCI局部總線到PCI總線的地址映射。
    2.2 訪問PCI9030外設的實現(xiàn)
      PCI9030有一個64字節(jié)的目標設備讀FIFO和一個128字節(jié)的PCI目標寫FIFO,用來實現(xiàn)PCI主設到局部總線的訪問,并允許5個地址空間去訪問局部地址空間,它們分別是space0、space1、space2、space3和Expansion ROM。每個PCI地址空間到局部地址空間的映射關系由三個寄存器來決定: Local Address Range(局部基地址范圍)——LASxRR 及EROMRR; Local Base Address(局部基地址)——LASxBA及EROMBA; PCI Base Address(PCI基地址)——PCIBAR2、PCIBAR3、 PCIBAR4、 PCIBAR5及PCIERBAR[4]。每一個空間的映射是一一對應的,規(guī)定space0映射到PCI BASE2, space1映射到PCI BASE3,以此類推。圖5為地址映射示意圖。


      PCI9030復位初始化時需定義一次地址空間的映射,具體實現(xiàn)方法是在E2PROM中配置好三個寄存器的值:①Range:指定PCI總線訪問局部總線空間范圍的PCI地址位。除去最低一個字節(jié),左起第一個為1的數(shù)對應的位就是該空間范圍。例如:配置Range=FFF00008,去掉第一個字節(jié),左起第一個1在bit20, 所以空間范圍是220=1MB。②Remap(Local Base Address):根據(jù)自己的硬件設計決定設備在局部總線的基地址,bit0必須置為1,表明允許對應的局部空間地址映射。③Descriptor:指定局部總線的特征,包括總線寬度、讀延時、寫延時的延時時鐘數(shù)、是否預取等。
      驅動程序的設備初始化子程序給PCI Base Address 寄存器寫入全1,即FFFFFFFF,然后讀回的寄存器的值就是CPU根據(jù)E2PROM中的配置分配的PCI的基地址范圍值。在VxWorks中通過調(diào)用以下兩個函數(shù)來實現(xiàn):
      pciConfigInLong(busNo,deviceNo,funcNo,PCI_CFG_BASE_ADDRESS_2,& baseAddress);
      pciConfigOutLong(busNo,deviceNo,funcNo,PCI_CFG_BASE_ADDRESS_2,& baseAddress);
      當需要訪問某一設備時,只需要訪問該設備占用的局部地址空間所對應的PCI地址空間即可,一般用PCI基地址加偏移量的方式訪問,例如:PCI_READ(MEMBase2,0x04,buffer)。此外PCI9030 還提供了四個片選信號,以便對多個外設進行訪問,這四個片選信號是CS0、CS1、CS2、CS3,對應四個片選基地址寄存器:CS0BASE, CS1BASE、CS2BASE、CS3BASE, 當片選基地址寄存器表達的基地址與某一局部空間基地址相同且設定的地址范圍也相同時,這一片選信號上所掛的設備就落在該局部空間[4]。本次設計中所用的FPGA芯片使用了CS0片選信號,設計的CS0BASE基地址和范圍落在space0,這樣通過PCI BASE2 ADDRESS 就可訪問到FPGA。
    2.3 PCI9030的中斷及控制寄存器
      PCI9030提供了兩個局部中斷引腳LINTi1和LINTi2以及中斷控制寄存器INTCSR(軟中斷)[7],用來觸發(fā)PCI中斷輸入引腳INTA#輸出有效信號,向CPU申請中斷。同時PCI中斷引腳寄存器PCIIPR必須在E2PROM中設置為1h, 表明通過INTA#申請中斷。BIOS能夠將INTA#路由到一個中斷控制器的中斷請求(IRQ)輸入,為系統(tǒng)分配一個與標準的中斷控制器8259的IRQ相應的中斷號,并由BIOS將此中斷號寫到PCI中斷線(PCI Interrupt Line)寄存器PCIILR中。因此在寫驅動程序時,讀取PCIILR中的值是將中斷服務子程序ISR連接到中斷控制器的關鍵。三種中斷形式的設置可在中斷控制寄存器INTCSR中配置。也可通過設置中斷控制寄存器INTCSR[6]來禁止INTA#中斷。
      通過E2PROM編程器或PLX公司的PlxMon軟件對E2PROM編程,可寫入幾個重要寄存器的值,其中包括配置寄存器(PCI配置首區(qū)[5])、局部配置寄存器等的值。系統(tǒng)上電后自動將這些數(shù)據(jù)從E2PROM傳到PCI9030內(nèi)部寄存器。在PCI配置寄存器00h中放置兩個重要參數(shù)Device ID(設備ID)和Vendor ID(廠商ID), 它們是表明設備身份的關鍵,在VxWorks中利用這兩個參數(shù)來調(diào)用如下函數(shù):
      pciFindDevice(PCI_VENDOR_ID, CI_DEVICE_ID, index,&busNo, &deviceNo, &funcNo) ;
      找到設備并讀取busNo(總線號)、deviceNo(設備號)、
    funcNo(功能號)等參數(shù)后,再利用這三個參數(shù)找到PCI基地址和中斷號,最后作地址映射,將基地址加到內(nèi)存管理單元MMU中。這是PCI9030設備初始化的重要步驟。
    3 VxWorks下的PCI9030驅動程序結構及流程
    3.1驅動程序的框架

      前面提到在VxWorks下有七個基本I/O函數(shù),所以寫PCI9030驅動程序時首先要寫PCI9030的I/O接口子程序PCI9030Open()、PCI9030Close()、PCI9030Read()等。 此外還需要寫三個重要的程序[3]:
      PCI9030Drv()。該程序的主要工作是執(zhí)行必要的硬件初始化;通過調(diào)用iosDrvInstall()函數(shù)裝載驅動程序到I/O系統(tǒng),連接I/O接口子程序PCI9030Open()、PCI9030Close()、PCI9030Read()等到I/O系統(tǒng);連接中斷等。
      PCI9030Create()。該程序的主要工作是將設備添加到I/O系統(tǒng),通過調(diào)用iosDevAdd()函數(shù)來實現(xiàn)。
      中斷服務子程序ISR。該程序完成寫入中斷響應后需要執(zhí)行的操作。
    3.2 程序流程圖
      圖6和圖7分別為設備驅動程序PCI9030Drv()的流程圖及設備所需接口函數(shù)的框圖。

     


    3.3 部分程序代碼
      (1)sysPCI9030Init()子程序。
      void sysPCI9030Init (void)
      {設備初始化……
      pciIntConnect(INUM_TO_IVEC(((int) btRes->irq)+INT_NUM_IRQ0),(VOIDFUNCPTR)myISR,IntParameter);
                            /*連接到中斷服務子程序*/ } 
      (2)PCI9030Drv()程序,裝載驅動程序到驅動表并連接I/O接口函數(shù)。
      int PCI9030Drv()
      {
      int pci9030DrvNum; /*定義驅動號*/
      pci9030DrvNum=iosDrvInstall((FUNCPTR)PCI9030open,0,
        (FUNCPTR)PCI9030open, (FUNCPTR)PCI9030close,
        (FUNCPTR)PCI9030read, (FUNCPTR)PCI9030write,0); 
      ……
      } 
      本文針對PMC-FPGA轉接板的開發(fā)設計,研究了在VxWorks下的驅動程序的編寫及PCI接口控制芯片PCI9030的應用,論述了VxWorks下PCI9030驅動程序的設計方法。由于VxWorks操作系統(tǒng)的微內(nèi)核可裁減及高效的多任務管理方式,為提高系統(tǒng)的實時性作了很大貢獻。又因VxWorks有豐富高效的接口函數(shù),使編程更加簡單方便。I/O系統(tǒng)將設備程序作為內(nèi)核過程實現(xiàn),實時性、可靠性都得到很大提高。在硬件設計中,采用FPGA可編程邏輯門陣列芯片,通過編程實現(xiàn)硬件邏輯運算,大大提高了運算速度,進一步提高了系統(tǒng)的實時性。這里設計的PMC-FPGA轉接板也為高速控制器的設計提供了硬件條件,對控制系統(tǒng)中實時性、快速性的實現(xiàn)具有現(xiàn)實意義。

    上一篇: 具有PCI和并行接口的數(shù)據(jù)采集系統(tǒng)設計
    下一篇: VxWorks操作系統(tǒng)下ComPactPCI總線驅動程序設計
    ?
    版權所有 ? 西安航普電子有限責任公司 未經(jīng)許可

    嚴禁復制 陜ICP備08100257號 建站/推廣/維護/安全:西安利友科技

    国产色系视频在线观看-色综合久久一区二区三区-【乱子伦】国产海角-久久午夜无码鲁丝片午夜精品 国产成人精品一区二区三区无码-DVD日韩免费观看 思思久久99热免费精品6 -桃色视屏-巨色网站 | 嗯∽啊~轻点禁 揉胸视频在线看-巨型怪物h粗暴3d-加勒比无码北条麻妃-伊人大香蕉在线观看 | 乱伦 的搜索结果 - 91n-邪恶网站在线观看网址-www:自拍偷拍视频-日本熟妇色情毛茸茸 | 中国老熟女刮子视频-91xxxa片-台湾成人论坛网-森泽佳奈隔壁高傲人妻 | 伊人222成人综合网-亚洲熟女屁股眼交300-亚洲成a v人片在线观看-无码午夜人妻一区二区三区不卡视频 | 人伦片无码中文字幕-国产中文99视频在线观看-男男Gay叫床啪啪无码-国产剧日韩免费观看 精品国产原创超清无码网站 | BD迅雷电影在线 菠萝菠萝蜜视频免费1-免费看大美女大奶子裸体的网站-欧美一区二区三区视频-国产亲子乱婬一级A片 | 今天高清无码视频-亚洲国产精品久久久久性色 三级古装片-越C越紧的名器-干赵丽颖日B免费观看 | 欧洲人妻-HD超清在线观看 国产成人真人在线-西西888WWW大胆无码-Chinese大学生啪啪HD | 高H喷水荡肉少妇爽多p视频-草逼13p-jizz在线jizz-四十路の完熟豊満无码 | 友田真希大战黑人40分钟-狼国综合自拍亚洲-亚洲第22页-九九爱大香蕉 | 爽妇导航-北条麻妃潮喷-BD英语高清在线 亚洲天堂视频在线观看-自拍偷拍视频网址 | 足球直播 足球免费在线高清直播 足球视频在线观看无插件-女人自慰全程无遮挡-91国视频在线观看-国产99视频免费精品是看6 | 一本色道久久综合亚洲精东小说-乡下借宿的丰满人妻-丰满巨乳淫巨大爆乳-日本熟妇坐脸 | 2021年精品国产福利在线-珍贵张柏芝下毛37张-国产精品小狐狸-HD全集免费播放 久久精品国产亚洲av麻豆色欲 | 蜜美杏中字HD在线观看-欧美美女被猛插内射的软件-久久综合桃花网中文字幕-性少妇厨房BBwBBwBBw | 亚洲中久无码不卡永久在线观看-国产精品嫩草AV城中村-日韩欧美视频免费看-皇后颤抖双乳呻吟求欢 粗暴av-懂色AV粉嫩AV蜜乳AV-巨人黑人ⅴideos极品另类-太紧了中文字幕 | 北岛玲摸逼网视频-成人操屄HD-中出高潮视频-BD英语最新电影在线观看 欧美一级大片 | 色琪琪久久se色-国产舔女人-a级毛片无码免费真人久久-成人视频在线观看 欧美日本一区二区三区桃色 | 久久精品有码网站-eeuss鲁片一区二区三区-熟女中出在线视频-91在线精品国产丝袜超清 | 2021亚洲国产精品无码-北条麻妃五十路-国产美女裸体无遮挡多久免费视频-免费追剧在线观看 久久91精品国产一区二区 | jizzjizzjizz护士高潮-欧美性生交XXXXX-gogogo免费手机高清在线 日韩高清A片-PGD-736誘惑女教师痴女在线观看 | 女人真实自慰120秒-老熟女久久久-无码国产精品一区二区v麻豆 1080高清完整版-ww中文字幕欧美亚 | 日韩色欲一区二区三区精品-国产女人JJIZZ多水喷水免费-中文字幕久久国产精品-无码精品人妻一二三区红粉影视亚洲A∨ | 聚色窝视频-日日夜夜蜜臀-美女操出水-国产变性人做爱视频 | 日韩无码少妇-久免费嘿嘿嘿-伊色网-DVD全集在线观看 午夜一对一视频聊天 | 一本之道国产免费AV-www.久久精品-鲁一鲁一鲁一鲁一澡-国产强 暴 疼 哭 处 | 国产精品亚洲av一级久久曰-BRAZZERS欧美最新极品-黑人做爰理伦片-空姐出白浆,亚洲 | 2019一本道免费看-大香蕉9999-成人毛片18女精品国产3D动漫-在线搭讪无毛美女 | 黑人videos巨大hd粗暴的剧情简介-人妻熟妇91Porn 九色-大香蕉中文第三页-中文字幕150页 | 懂色av懂色av粉嫩av-操逼吃奶-国产偷 久久一级精品Av片-老司机色色色色 | 国产精品久久久久久久小唯西川-精品人妻无码专区中文字幕-三全在线观看免费完整版中文高清-亚洲色图库无码中出 | 男女69play网站-骚穴影视大全-高清版完整版未删减 日韩欧美精品视频一区在线-少罗美女干屄漫画视频 | 成人精品自拍偷拍-女人阴蒂被舔全过程a片免费-97国产综合色产在线视频 -中文字幕-第1页 - 色屁屁影院 - x300x.com | 自拍偷拍高清无码-美女自卫网站-女人操逼视频-中国性裸体熟女 | 亚洲你XX我XX网站-怡红院成永久免费人视频新的-肏屄毛片啊啊啊-亚洲精品久久久久毛片A级绿茶 | 男女性合交呀网站-高清免费电影就在-影音先锋北条麻妃-丝袜熟女北岛玲丁香 | 天天色宗合-BD韩语电影全集观看 日韩精品免费专区-乖玉势不粗你受得h-草草影院地址 | 亚洲精品大雄-操中出-日本裸体熟妇HD-久久与欧美视频 | 91TS人妖同性专区-嗯嗯嗯嗯嗯啊啊啊啊啊APP-美女宫逼网站-神马韩国性感一区二区三区 | 黑人videos巨大hd粗暴的剧情简介-人妻熟妇91Porn 九色-大香蕉中文第三页-中文字幕150页 |