基于FPGA的PCI總線串口卡設(shè)計(jì)
接收模塊通過狀態(tài)機(jī)來完成數(shù)據(jù)接收,其狀態(tài)機(jī)包含4個(gè)狀態(tài):空閑狀態(tài)(idle)、移位狀態(tài)(shift)、奇偶校驗(yàn)狀態(tài)(parity)和停止位狀態(tài)(stop),如圖6所示。其工作過程如下:當(dāng)系統(tǒng)復(fù)位時(shí),狀態(tài)機(jī)進(jìn)入空閑狀態(tài),等待接收開始位;當(dāng)開始位被確定有效后,狀態(tài)機(jī)進(jìn)入移位狀態(tài)。在移位狀態(tài)中,接收模塊為每個(gè)數(shù)據(jù)位的移入等待16個(gè)內(nèi)部時(shí)鐘周期,接收完特定的數(shù)據(jù)位后,若奇偶校驗(yàn)使能有效,則跳轉(zhuǎn)到奇偶校驗(yàn)狀態(tài);否則,進(jìn)入停止位狀態(tài),而后進(jìn)入空閑狀態(tài),重復(fù)上述過程。本文引用地址:http://cafeforensic.com/article/191527.htm
1.2.4 發(fā)送模塊
發(fā)送模塊包括發(fā)送緩存寄存器和發(fā)送移位寄存器。在發(fā)送數(shù)據(jù)開始時(shí),清空發(fā)送緩存寄存器和發(fā)送移位寄存器后,發(fā)送緩存寄存器接收發(fā)送來的數(shù)據(jù),然后從發(fā)送緩存寄存器向發(fā)送移位寄存器發(fā)送數(shù)據(jù)。首先發(fā)送起始位到發(fā)送移位寄存器,同時(shí)啟動(dòng)發(fā)送數(shù)據(jù)計(jì)數(shù)器,記錄發(fā)送數(shù)據(jù)的個(gè)數(shù),直到發(fā)送移位寄存器接收到滿足需求的數(shù)據(jù)。若奇偶校驗(yàn)使能有效,則跳轉(zhuǎn)到奇偶校驗(yàn)狀態(tài);否則,進(jìn)入停止位狀態(tài),完成1幀數(shù)據(jù)的發(fā)送。只要發(fā)送緩存寄存器不為空,則繼續(xù)傳輸下一幀數(shù)據(jù)。其狀態(tài)機(jī)的實(shí)現(xiàn)與接收模塊的類似。
2 系統(tǒng)軟件設(shè)計(jì)
2.1 驅(qū)動(dòng)程序
WinDriver是一套PCI驅(qū)動(dòng)程序開發(fā)包。它改變了傳統(tǒng)驅(qū)動(dòng)程序開發(fā)的方法與思路,極大地簡(jiǎn)化了驅(qū)動(dòng)程序的編制。同時(shí),WinDriver又沒有犧牲驅(qū)動(dòng)程序的性能,是一套高效、快捷的PCI驅(qū)動(dòng)程序開發(fā)軟件包[4]。WinDriver可在VC/C++、Delphi、BC++、VB等多種開發(fā)環(huán)境中使用,本設(shè)計(jì)選用VC++作為驅(qū)動(dòng)程序的開發(fā)環(huán)境,通過WinDriver生成VC++代碼,根據(jù)設(shè)計(jì)的需要修改生成的代碼以完成此PCI設(shè)備的驅(qū)動(dòng)。驅(qū)動(dòng)程序流程圖如圖7所示。
2.2 應(yīng)用程序
應(yīng)用程序負(fù)責(zé)調(diào)用、連接驅(qū)動(dòng)程序,實(shí)現(xiàn)與驅(qū)動(dòng)程序的通信。連接到驅(qū)動(dòng)程序后,向驅(qū)動(dòng)程序注冊(cè),同時(shí)啟動(dòng)串口監(jiān)測(cè)工作線程,等待事件發(fā)生。當(dāng)驅(qū)動(dòng)程序接收到中斷后,通過發(fā)送消息通知應(yīng)用程序,處理發(fā)生的事件。處理后退出應(yīng)用程序,結(jié)束等待事件線程。應(yīng)用程序流程圖如圖8所示。
本文介紹了一種基于FPGA的PCI總線串口卡設(shè)計(jì)方法,簡(jiǎn)單說明了其硬件的設(shè)計(jì)和驅(qū)動(dòng)程序、應(yīng)用程序的編寫方法。該設(shè)計(jì)符合通用的PCI規(guī)范,支持即插即用功能,傳輸速率高,抗干擾能力強(qiáng)??梢詮V泛應(yīng)用于各類測(cè)試設(shè)備、工廠自動(dòng)化等,具有很高的實(shí)用價(jià)值。
參考文獻(xiàn)
[1] 徐志春.基于PCI總線的多串口通信適配卡設(shè)計(jì)[J].微計(jì)算機(jī)信息,2007,23:294-296.
[2] 王友波,劉明業(yè).PCI總線接口控制器的FPGA設(shè)計(jì)[J].北京理工大學(xué)學(xué)報(bào),2004,24(5): 423-426.
[3] 楊大柱.基于FPGA的UART電路設(shè)計(jì)與仿真[J]. 微計(jì) 算機(jī)信息, 2007,23(5-2):212-213.
[4] 劉映杰,張?jiān)诜?劉瑋,等.用WinDriver開發(fā)PCI設(shè)備驅(qū)動(dòng)程序[J]. 信息技術(shù),2004, 28 (2):78-80.
評(píng)論