- 相關(guān)推薦
在Windows2000下用多線(xiàn)程實(shí)現1394串行總線(xiàn)通信
摘 要:基于Windows2000環(huán)境開(kāi)發(fā)了1394主控機與1394設備機間進(jìn)行串行總線(xiàn)通信的軟硬件系統,其中采用了多線(xiàn)程技術(shù),并利用臨界區實(shí)現線(xiàn)程間共享資源的同步,從而有效地解決了串行通信中的實(shí)時(shí)響應問(wèn)題,降低了數據的丟失率,提高了系統的可靠性。
關(guān)鍵詞:多線(xiàn)程;1394總線(xiàn);線(xiàn)程同步
1 引言
為了便于LS-1394物理層、鏈路層芯片設計課題的研究,我們采用FPGA和ISA總線(xiàn)開(kāi)發(fā)了基于TI公司的TSB41AB3和TSB12LV01的ISA-1394的1394總線(xiàn)接口卡,并在Windows2000環(huán)境下開(kāi)發(fā)了一套利用多線(xiàn)程技術(shù)實(shí)現1394主控機與1394設備機之間進(jìn)行串行通信的軟件系統。
2 硬件部分
硬件部分主要包括:1394主控機、1394設備機、PCI-1394卡、ISA-1394卡。其中,PCI-1394卡是TI公司的1394總線(xiàn)接口芯片控制卡,該卡插在1394主控機的PCI插槽中;ISA-1394卡是利用一塊型號為EPM7256AETC144-5的FPGA、一塊TI公司的TSB12LV01鏈路層芯片和一塊TSB41AB3物理層芯片自行設計的1394總線(xiàn)接口芯片控制卡,該卡插在1394設備機的ISA插槽中。1394主控機和1394設備機之間通過(guò)1394接口進(jìn)行串行通信,傳輸介質(zhì)為1394線(xiàn)纜。硬件結構圖如圖1所示。
3 軟件部分
軟件設計主要包括1394主控機端和1394設備機端兩大部分,由于1394主控機端有現成的demo應用程序,所以軟件設計主要針對1394設備機端。1394設備機端的編程環(huán)境是WinDriver 5.0 和VC 6.0。
3.1軟件設計思想
1394串行總線(xiàn)有兩種通信方式:等時(shí)通信和異步通信。異步通信采用的是請求/應答模式,數據傳輸可靠性較高,因此這里主要討論異步通信。1394串行總線(xiàn)異步通信的原理為:發(fā)送數據包時(shí),等待發(fā)送器空閑,將數據包寫(xiě)到1394鏈路層芯片的發(fā)送FIFO中發(fā)送出去;接收數據包時(shí),一旦有數據包到達,接收器會(huì )將數據包放到1394鏈路層芯片的接收FIFO,接收到數據包后必須立即發(fā)送一個(gè)應答包,否則,對方會(huì )重發(fā)此數據包,直到重發(fā)次數到。需注意的是,用戶(hù)必須自行訪(fǎng)問(wèn)接收FIFO查看是否有數據包并及時(shí)地取出數據包,否則就會(huì )使接收FIFO溢出,丟失數據,造成通信出錯。
在串行通信程序設計中,通常采用定時(shí)查詢(xún)或中斷來(lái)解決上述問(wèn)題,其中采用中斷的方法比定時(shí)查詢(xún)法擁有更高的工作效率和可靠性,因此本系統采用中斷法來(lái)完成1394串行總線(xiàn)的數據通信。
為了實(shí)現數據處理和數據接收及發(fā)送的分離,本系統引入了多線(xiàn)程技術(shù)。在應用程序的主線(xiàn)程之外再創(chuàng )建一個(gè)用戶(hù)線(xiàn)程,即中斷處理線(xiàn)程,在中斷處理線(xiàn)程中實(shí)現數據包的接收和發(fā)送。如果接收中斷到來(lái),中斷處理線(xiàn)程就負責取出接收FIFO中的數據,放到用戶(hù)定義的接收緩沖區rBuf中;如果發(fā)送中斷到來(lái),中斷處理線(xiàn)程就負責從用戶(hù)定義的發(fā)送緩沖區sBuf中取出數據放到發(fā)送FIFO中發(fā)送出去。主線(xiàn)程負責調用解釋處理程序對rBuf中的數據包進(jìn)行解釋處理,或者調用其它程序給sBuf中寫(xiě)請求數據包。
由于多個(gè)線(xiàn)程可以訪(fǎng)問(wèn)同一進(jìn)程中的公共數據,所以使用多線(xiàn)程的過(guò)程中需要注意的問(wèn)題是如何防止兩個(gè)或兩個(gè)以上的線(xiàn)程同時(shí)訪(fǎng)問(wèn)同一個(gè)數據,以免破壞數據的完整性。在本系統中,當中斷處理線(xiàn)程從發(fā)送緩沖區sBuf取數據包,此時(shí)若有一個(gè)線(xiàn)程正給發(fā)送緩沖區sBuf寫(xiě)數據包,這樣就存在訪(fǎng)問(wèn)發(fā)送緩沖區sBuf資源的沖突,即所謂的線(xiàn)程不同步問(wèn)題。針對該問(wèn)題,系統中采用臨界區來(lái)加以解決。它可保證在某一個(gè)時(shí)間只有一個(gè)線(xiàn)程可以訪(fǎng)問(wèn)sBuf,通過(guò)在不同的線(xiàn)程中設置一個(gè)共享的臨界區對像,無(wú)論哪個(gè)線(xiàn)程占有臨界區對像,都可以訪(fǎng)問(wèn)受保護的sBuf,這時(shí)候其它的線(xiàn)程需要等待,直到該線(xiàn)程釋放臨界區對像為止。臨界區被釋放后,另外的線(xiàn)程可以強占這個(gè)臨界區,以便訪(fǎng)問(wèn)sBuf。
3.2軟件結構
基于多線(xiàn)程技術(shù)的1394串行總線(xiàn)通信系統軟件結構如圖2所示。
各模塊的功能如下:
1)主線(xiàn)程:響應用戶(hù)的輸入,提供前端的人機交互界面;完成線(xiàn)程的創(chuàng )建、終止及線(xiàn)程間的同步;接收線(xiàn)程發(fā)來(lái)的消息,并調用相應的線(xiàn)程處理程序;
2)中斷處理線(xiàn)程:當接收中斷到來(lái)時(shí),接收GRF中的數據包放到接收緩沖區rBuf,并向主線(xiàn)程發(fā)送接收到數據包的消息,當發(fā)送中斷到來(lái)時(shí),從發(fā)送緩沖區sBuf中取出數據包寫(xiě)到ATF中;
3)解釋處理程序:從接收緩沖區rBuf中取出數據包進(jìn)行解釋處理后放到dataBuf,并構造響應包放到發(fā)送緩沖區sBuf中;
4)初始化程序:初始化串口資源及程序設置;
5)其他程序:從數據緩沖區dataBuf中取數據進(jìn)行進(jìn)一步處理,或者給發(fā)送緩沖區sBuf中寫(xiě)請求數據包。
該軟件采用多線(xiàn)程技術(shù),使前端人機交互部分、中間處理部分和后臺的串口通信部分并行處理,讓耗時(shí)的I/O通信在后臺運行,在大數據量通信的情況下對改善程序的響應速度是相當有效的。
3.3程序內容
1394設備機端的程序主要由ISA接口卡的驅動(dòng)程序、初始化程序、中斷處理程序及解釋處理程序四大主要部分組成。
3.3.1驅動(dòng)程序
由于WinDriver具有強大的設備驅動(dòng)開(kāi)發(fā)能力,支持用戶(hù)模式下直接對硬件進(jìn)行訪(fǎng)問(wèn),并且WinDriver提供的驅動(dòng)程序開(kāi)發(fā)向導DriverWizard可以自動(dòng)生成驅動(dòng)程序框架,大大降低了設備驅動(dòng)程序的開(kāi)發(fā)難度,減少了開(kāi)發(fā)時(shí)間,所以ISA接口卡的驅動(dòng)程序在WinDriver下開(kāi)發(fā)。驅動(dòng)程序主要完成對ISA接口卡的I/O地址讀寫(xiě)及對硬件中斷的處理。該ISA卡的I/O端口地址為:0x300~0x510;中斷號為9。
3.3.2初始化程序
【在Windows下用多線(xiàn)程實(shí)現1394串行總線(xiàn)通信】相關(guān)文章:
用Borland C 3.1實(shí)現外設與Windows應用程序實(shí)時(shí)通信03-21
在VC 中用ActiveX控件實(shí)現與單片機的串行通信03-19
用Windows終端仿真程序實(shí)現微機遠程文件傳送03-18
TMS320C54XX系列DSP與PC機間串行通信的實(shí)現03-18
MPC8272總線(xiàn)與DSP HPI總線(xiàn)接口的FPGA實(shí)現03-07
談DSP HPI總線(xiàn)與MPC8272總線(xiàn)接口的FPGA實(shí)現03-08
異步串行通信接口的IP核設計03-18