国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于PCI總線的RS232串口通信設計與實現(xiàn)

2020-10-20 06:18:06田成富汪鵬志
價值工程 2020年28期

田成富 汪鵬志

摘要:在針對國防工業(yè)、導航、通信等領域中,廣泛使用串行接口UART與外圍設備進行通信。提出了一種基于PCI總線的8路異步傳輸標準的設計方案,該方案采用專用芯片XR17D158作為從設備掛接在MPC8280的PCI總線,實現(xiàn)PCI-232 接口的硬件結構方案,并在VxWorks系統(tǒng)下開發(fā)設備驅動程序。本文重點分析了所用芯片的功能、硬件設計、寄存器配置,并給出了VxWorks操作系統(tǒng)下驅動程序的具體實現(xiàn)方法。

Abstract: In the field of defense industry, navigation, communication, power and so on, it widely uses serial interface Universal Asynchronous Receiver/Transmitter (UART) to communicate with peripheral equipment. This paper presents a design plan for 8 asynchronous transmission standard based on PCI bus, which adopts the special chip xr17d158 as a slave device mount to peripheral component interconnect(PCI) bus of MPC8280, acieve the hardware structure scheme of the PCI-232 interface, and develops the device driver in the VxWorks system. This paper focuses on the function, hardware design, register configuration of the used chip, and gives the implementation method of the driver in the VxWorks operating system.

關鍵詞:UART;PCI總線;VxWorks系統(tǒng)

Key words: UART;PCI;VxWorks system

中圖分類號:TN958???????????????????????????????????? 文獻標識碼:A????????????????????????????????? 文章編號:1006-4311(2020)28-0160-03

0? 引言

伴隨著通信行業(yè)的不斷發(fā)展,越來越多的計算機或設備通過不同通信接口實現(xiàn)互連互通,實現(xiàn)信息共享和設備的集中控制與管理,其中串口通信具有結構簡單、線路成本低、實時性強、可靠性高等優(yōu)點,被廣泛應用到各個領域[1]。因此多串口擴展已成為通信設備接入的重要手段。PCI總線作為基于PCI電氣規(guī)范開發(fā)的高性能工業(yè)總線,廣泛應用于工業(yè)控制、通信及網(wǎng)絡等領域。由于大部分I/O設備不具備PCI總線功能,開發(fā)具有多端口通用串口和PCI總線的接口卡成為技術發(fā)展的必然要求。本系統(tǒng)采用專用集成芯片XRl7D158開發(fā)了基于PCI總線的8路RS-232高速串行通訊卡,為通信設備提供額外的高性能串行接口,適用于連接各類串行設備,實現(xiàn)數(shù)據(jù)的高效交互。

1? 系統(tǒng)硬件設計

本文采用Exar公司推出的一種兼容3.3V和5V的專用芯片XRl7D158[2],該芯片支持8路UART通道轉換PCI總線的功能,通過多路串行接口擴展可減少系統(tǒng)開銷、節(jié)約印制板空間。該通信模式滿足PCI2.3規(guī)范,工作頻率33MHz,32位的數(shù)據(jù)總線能充分利用CPU帶寬,實現(xiàn)大量數(shù)據(jù)的同步傳輸。為滿足多接口實時并行上傳下載信息,每個通道都擁有可編程觸發(fā)電平的64字節(jié)發(fā)送/接收緩沖FIFO,通過參數(shù)配置可分別實現(xiàn)921.6kbps波特率的傳輸速率?;贛PC8280主控與XR17D158的硬件接口框圖如圖1所示。

圖中信號按功能劃分可分為:地址/數(shù)據(jù)線、接口控制信號、系統(tǒng)信號三種。

①地址/數(shù)據(jù)線:PCI_AD31-0為地址/數(shù)據(jù)多路復用的輸入/輸出信號;PCI_C/BE3-0為總線命令和字節(jié)使能多路復用信號;PCI_PAR為奇偶校驗信號,用于對PCI_AD31-0和PCI_C/BE3-0信號進行奇偶校驗。

②控制信號:PCI_FRAME為幀周期信號,表示一次數(shù)據(jù)傳輸?shù)拈_始與持續(xù)時間;PCI_TRDY為主設備準備就緒信號,PCI_IRDY為從設備準備就緒信號,表示芯片數(shù)據(jù)傳輸就緒,需要與PCI_TRDY配合使用;PCI_DEVSEL為設備選擇信號,表示選定該從設備;PCI_IDSEL為初始化設備選擇信號,表示參數(shù)讀寫配置期間,從設備被選定;PCI_INTA為中斷線,用以請求一個中斷事件。

③系統(tǒng)信號:PCI_CLK為時鐘信號;PCI_RST為復位信號。

2? XR17D158寄存器配置

XR17D158具有三種不同的寄存器組[3]:PCI局部總線配置寄存器、設備配置寄存器,串口配置寄存器其功能特性如圖2所示。

2.1 PCI局部總線配置寄存器? 主要包含設備號、廠家號、版本號、奇偶校驗、存儲基地址、中斷引腳等相關信息。系統(tǒng)上電后,主控MPC8280根據(jù)PCI總線上讀取的XR17D158插卡信息為從設備XR17D158分配相應的存儲地址與空間、端口地址和中斷號等參數(shù),實現(xiàn)即插即用的自動參數(shù)配置。其中基地址寄存器BAR作為重要配置參數(shù)存儲在0x10地址空間,其高20位BAR[31-12]作為設備配置寄存器和串口配置寄存器的基地址。中斷線寄存器位于0x3C地址空間,主要存儲芯片掛接的物理中斷號。XR17D158的相關信息也可保存在外接EEPROM中,系統(tǒng)上電后XRl7D158檢測EEPROM是否有效,并讀取EEPROM中相關信息用來標識PCI卡。其中,局部總線配置寄存器大部分具有只讀功能。

2.2 設備配置寄存器? 主要存儲中斷配置、定時/計數(shù)控制與狀態(tài)、軟件復位、休眠、工作模式、復用功能輸入輸出配置以及設備標識和版本號等相關信息。設備配置寄存器地址由基地址寄存器BAR和偏移量組成,偏移量范圍為0x80-0x93。XR17D158的8路串口可分別工作在8x和16x采樣率的模式,通過配置工作模式寄存器8xMODE,可選擇各串口的采樣率。通過對REGB寄存器的位操作,控制XR17D158中IIC總線的輸入輸出,實現(xiàn)對外接EEPROM的讀寫操作。

2.3 串口配置寄存器? 主要包含兼容16550規(guī)范的控制/狀態(tài)寄存器和64深度的發(fā)送/接收緩沖FIFO,每路串行接口都有獨立的UART配置寄存器作為串行數(shù)據(jù)傳輸控制和狀態(tài)信息指示,對于串口UARTn而言,其寄存器偏移量為0x200*n(n=0~7)。主要實現(xiàn)各串行通信的波特率設置、中斷使能與狀態(tài)指示、數(shù)據(jù)發(fā)送與接收、工作模式設置與檢測等功能。設備配置寄存器和串口配置寄存器共占4K的PCI總線存儲器地址空間。

當外部輸入時鐘為14.7456MHz時,通過配置可編程波特率發(fā)生器(BRG),利用公式(1)可實現(xiàn)最大波特率921.1kps傳輸。本文為實現(xiàn)115200波特率的傳輸速率,選擇4倍預分頻系數(shù),即預分頻系統(tǒng)寄存器MCR[7]=1;16X采樣率,即采樣模式寄存器8xMODE[x]=0;分頻因子2,即分頻因子寄存器DLM=0x00、DLL=0x02。

(1)

XR17D158支持在映射的存儲器地址進行PCI突發(fā)模式讀/寫操作。①讀操作主要由接收移位寄存器RSR和接收保持寄存器RHR組成。RSR用于檢測每一位數(shù)據(jù)的有效性,當檢測到停止位時,表明一個有效數(shù)據(jù)接收完成,并將完整數(shù)據(jù)載入RHR中,將中斷狀態(tài)寄存器ISR或線路狀態(tài)寄存器LSR置位,以便主控設備對RHR中數(shù)據(jù)進行處理。因此,XR17D158可采用中斷方式和查詢方式從PCI總線接收數(shù)據(jù),其設計流程如圖3所示。②寫操作由輸出移位寄存器TSR和發(fā)送保持寄存器THR組成,當有效數(shù)據(jù)由主機寫入THR后,再由發(fā)送控制邏輯加上起始位、奇偶校驗位和終止位存入TSR,并按設定的波特率將數(shù)據(jù)逐位移出。

查詢接收方式設計流程:

①先失能串口中斷IER=0,禁止所有中斷,使串口工作在查詢模式;

②讀取線路狀態(tài)寄存器LSR[0]位,判斷數(shù)據(jù)是否從PCI總線上接收數(shù)據(jù)保存在接收保持寄存器RHR;

③讀取設備號DVID,判斷設備號是否為XR17D158特有的設備號0x28,如此重復。因此采用查詢方式時需要創(chuàng)建任務定時對線路狀態(tài)和設備號進行查詢判斷。

中斷接收方式設計流程:

①先使能串口FIFO接收中斷IER[0]=1,同時清除中斷標志位ISR=0;

②讀取全局中斷寄存器INT0,判斷哪個通道觸發(fā)中斷;

③讀取全局中斷寄存器INT1-3,判斷中斷源觸發(fā)類型;

④當滿足FIFO中斷時,讀取緩沖區(qū)數(shù)據(jù)。并清除中斷狀態(tài)。以中斷方式接收數(shù)據(jù)時,當中斷產(chǎn)生后,程序直接進入中斷入口函數(shù)執(zhí)行,該方式具有效率高,及時性強等優(yōu)點。

3? 軟件設計

3.1 驅動程序設計

本設計采用具有多任務、可擴展、組件化的VxWorks操作系統(tǒng),與Linux操作系統(tǒng)相比具有實時性強、及時處理多任務調度的優(yōu)點[4]。內(nèi)核采用操作系統(tǒng)自帶MPC8280的板級支持包移植而來,其軟件設計基本流程如圖4所示。

在PCI總線上有MPC8280和XR17D158兩種設備,各設備具有獨一的設備號,因此調試階段可調用pciDeviceShow()函數(shù),打印PCI總線上所有設備號等信息。在實際軟件設計過程中,通過調用pciFindDevice (D158_VID, D158_DID, index, &bus, &dev, &func)查詢掛接的XR17D158設備[5]。調用sysPciConfigRead (bus, dev, func, 0x3c, 1, &bIntNum)和sysPciConfigRead (bus, dev, func, 0x10, 4, &uMemBase)獲取芯片掛接的物理中斷號和分配的基地址。其中物理中斷號用于中斷向量和中斷服務程序的掛接,基地址用于定位各串行接口的寄存器組,實現(xiàn)對波特率和控制參數(shù)的配置,XR17D158的PCI配置空間的初始化基本完成。

XR17D158作為具有PCI總線的多串行接口芯片,在驅動設計中可將底層函數(shù)封裝后以標準串口驅動進行調用,具有較好的靈活性,主要實現(xiàn)的函數(shù)如下:

①cmsIoctl()通過傳入?yún)?shù)對串口驅動進行控制,包括波特率設置與獲取、工作模式設置與獲取、回調函數(shù)與參數(shù)設置、數(shù)據(jù)長度與格式的定義;

②cmsPollInput()輪詢讀取串口中數(shù)據(jù),便于應用程序調用read()接口讀取數(shù)據(jù);

③cmsPollOutput()采用輪詢方式發(fā)送串口數(shù)據(jù);

④cmsTxStartup()用于中斷函數(shù)使能發(fā)送;

⑤cmsCallbackInstall()用于傳遞安裝中斷回調函數(shù)與參數(shù)。

XR17D158的驅動函數(shù)以標準串口模式封裝后,對XR17D158的操作可以按標準串口進行操作,具體步驟如下:

①初始化XR17D158中相關寄存器和配置函數(shù),調用ttyDrv()安裝驅動程序到I/O系統(tǒng);

②根據(jù)系統(tǒng)所指定的串口號(/tyCo/x),調用ttyDevCreate()為系統(tǒng)添加指定串口;

③串口初始化完成后,調用open()函數(shù)打開對應串口;

④根據(jù)open()函數(shù)返回的文件句柄,調用read()和write()函數(shù)對串口進行讀寫操作,串口的初始化由傳入ioctl()函數(shù)的參數(shù)決定,主要配置如下:1)調用ioctl(fd, FIOBAUDRATE, baud)配置串口的波特率;2)調用ioctl(fd, FIOSETOPTIONS,? OPT_RAW)配置串口數(shù)據(jù)傳輸模式;3)調用ioctl(fd,? SIO_HW_OPTS_SET, CREAD | CS8 | CLOCAL)配置串口一幀數(shù)據(jù)的格式。

3.2 測試驗證

利用外部設備以115200bps的速率向8路串口發(fā)送測試數(shù)據(jù),時間間隔為100ms。通過示波器對其中一路傳輸數(shù)據(jù)觀察如圖5所示。

圖中CH1為XRl7D158接收數(shù)據(jù)波形,CH2為INTA的中斷信號??芍?,當INTA為低電平時觸發(fā)中斷,XR17D158開始接收串口數(shù)據(jù)。一幀數(shù)據(jù)用時80us,其中包含一位起始位、八位有效數(shù)據(jù)位、一位停止位,滿足波特率115200bps的傳輸速率。通過對8路串行通道,2小時的測試驗證,未出現(xiàn)誤碼和丟包現(xiàn)象,滿足通信設備對串口穩(wěn)定性的運行要求。

4? 結論

本文利用XRl7D158芯片實現(xiàn)PCI總線和8路串口之間的通信,彌補傳統(tǒng)主控器中串行通信接口少的局限性,利用一卡多用實現(xiàn)多路設備的高頻率通信避免一般通信設備轉接復雜,設計繁瑣等缺陷?;赬Rl7D158設計的適配卡具有結構緊湊,通信距離長,最多可支持8路設備接口,解決了大部分I/O設備沒有PCI總線接口的問題,在現(xiàn)實中具有廣闊的應用前景。

參考文獻:

[1]何秋婭,徐學軍.基于VxWorks的串口服務器研究與實現(xiàn)[J].計算機應用與軟件,2015,32(9):223-226.

[2]安彥波.工業(yè)機器人開放式控制系統(tǒng)的研究[D].哈爾濱工業(yè)大學,2010:38-40.

[3]馮毅.基于WinDriver的多路串行設備驅動開發(fā)[J].電子技術,2014,6:61-63.

[4]鄺安玄,劉明,朱守園.VxWorks下串口設備驅動設計與實現(xiàn)[J].航空計算技術,2018,48(4):78-81.

[5]孫廣明,唐建.基于高可靠CPCI接口的4通道串口設計[J].電子設計工程,2017,25(23):90-93.

基金項目:船舶工業(yè)國防科技預研基金資助項目(6141B04050101)。

作者簡介:田成富(1986-),男,河南周口人,工程師,碩士,研究方向為無線通信、網(wǎng)絡通信。

奉新县| 轮台县| 运城市| 阿拉善盟| 香港| 江油市| 东莞市| 辛集市| 微山县| 精河县| 读书| 沭阳县| 沈丘县| 大竹县| 晴隆县| 盐津县| 城口县| 刚察县| 福海县| 香格里拉县| 佛学| 德兴市| 鱼台县| 铜梁县| 依兰县| 玛曲县| 高密市| 托克逊县| 连江县| 天等县| 游戏| 安平县| 东乌珠穆沁旗| 卓尼县| 和顺县| 浮梁县| 射洪县| 英吉沙县| 彩票| 广汉市| 马山县|