999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

VxWorks下多串口卡驅動程序設計

2012-08-13 05:57:00鄧春梅董貴山王亞棟
通信技術 2012年1期
關鍵詞:設備系統

鄧春梅, 董貴山, 王亞棟

(①四川衛士通信息安全平臺技術有限公司,四川 成都610041;②中國電子科技集團公司第三十研究所十部, 四川 成都 610041)

0 引言

在嵌入式安全平臺的研制項目中,需要解決好多通路并發的串行高速數據傳輸及安全處理問題。如果采用8位的基于8250的通用串口芯片,難以滿足大批量,多通道串口數據的同步接收和發送,為此,需要采用高速串口芯片。本文以 OXFORD 半導體有限公司生產的 OX16PCI958高速串口芯片為對象,研究了在vxworks嵌入式實時系統下高速串行通信驅動的實現技術。OX16PCI958串口芯片,是由PCI接口擴展而出的,是一個帶有32字節,可擴展八路串行通道FIFO的通用異步收發器,通過配置能適應 RS-232/RS-422協議規范應用的需要,能同時支持I/0和內存映射訪問,每路通道最高速率可達115.2 kb/s。標準的VxWorks操作系統缺乏對此高速串口芯片的驅動支持,本文提出了專用的多通道高速串口驅動程序設計,解決了此問題。

1 VxWorks串口驅動程序的架構

1.1 基本框架

在VxWorks系統中,串行設備的驅動程序不是直接安裝在I/O系統中,而是通過虛擬設備ttyDrv來使用。串行設備不但需要支持 I/O系統也需要支持目標機代理接口,同時它還必須支持在中斷或者輪詢2種方式下工作[1]。

如圖1所示的串行設備驅動程序的工作方式。其中,與設備無關的部分已經在虛擬設備ttyDrv中實現,驅動程序開發人員只需要根據系統給出的接口,實現驅動程序并將其安裝到ttyDrv。

圖1 串行設備驅動程序的工作方式

虛擬設備ttyDrv負責管理真實驅動程序與 I/O系統之間的通信[2]。一方面,虛擬設備 ttyDrv將系統的I/O請求作必要處理后,傳遞給設備驅動程序,再通過設備驅動程序來實現實際的 I/O操作;另一方面,虛擬設備ttyDrv將自己的入口點函數掛接在I/O系統上,初始化設備描述符并將其添加到設備列表中。當I/O系統中有請求包到達時,I/O系統會調用ttyDrv提供的相應的函數響應請求。圖2的ttyDrv數據流給出了該過程的數據流向。

1.2 驅動程序函數模塊注冊

[3],函數ttyDrv()調用函數iosDrv Install()將tyRead()、tyWrite()、ttyOpen()、ttyIoctl()等函數加入到驅動程序表中,以供I/O系統調用。

1.3 專用串口設備的創建

首先初始化設備描述符,然后調用函數tyDevInit()初始化select功能,初始化tyLib,創建信號量,創建輸出輸入緩沖區,最后調用函數iosDevAdd()將設備加到設備列表中并設置設備的工作模式為中斷方式。

1.4 設備讀、寫操作實現

當應用程序調用函數write()執行寫操作的時候,數據請求包首先會通過I/O系統傳給ttyDrv,然后運行函數tyWrite(),將用戶緩沖區的內容復制到輸出環形緩沖區,并調用函數xxTxStartUp初始化發送循環,開啟中斷準備發送,最后通過調用中斷服務程序xxIntTx發送字符并清除中斷。I/O系統發送數據操作流程如圖3。

當串口接收到數據時會調用接收中斷服務程序xxRcvInt,將接收的字符寫入指定的緩沖區。然后由回調函數tyIRd()將數據傳給高層協議。當用戶調用read()函數進行讀操作時, I/O系統調用函數tyRead(),將輸入環形隊列中的內容讀入用戶緩沖區。I/O系統接收數據操作流程如圖4。

1.5 其他功能函數擴展

當應用程序調用函數ioctl()的時候,tty Ioctl()函數直接將命令傳到由用戶編寫的stl6c958ioctl()函數,如果所需要的功能在stl6c958ioctl()中未實現,則調用函數tyIoctl(),如果tyIoctl()調用也失敗,ttyIoctl()才會返回失敗。

2 VxWorks下多通道串口驅動程序設計

2.1 基本設計需求

基本設計需求如下:①基于 OX16PCI958串口芯片;②支持多任務并發訪問每路串口通道;③支持中斷共享方式,能正確區分是否有效中斷,提高CPU利用率;④支持端口設置,如波特率配置從50BPS---115200BPS、8位有效數據位、奇偶校驗、流控;⑤支持應用程序與芯片間數據的正確交互。

2.2 設計要點

(1)多任務并發訪問設計

為保障驅動程序對多任務并發通信訪問的支持,在驅動程序內部采用了任務鎖(TaskLock)、中斷鎖(IntLock)來保證對臨界資源的唯一修改權,同時確保了必須的連續寄存器操作指令不被打斷。在具體的程序設計中每個通道都有一個獨立的數據結構ST16C958_CHAN與之對應,使每個通道間互不干擾,可并發訪問。

(2)中斷共享設置

中斷是CPU和外部設備進行通信的有效方法,它可以避免因反復查詢外部設備的狀態而浪費CPU時間,從而提高了 CPU的工作效率。首先在sysSerial.c文件的sysSerSerialHwInit()函數中調用函數pciConfigInByte(),參數設為PCI_CFG_DEV_INT_LINE,從寄存器中獲取中斷線,然后調用函數pciIntConnect()掛接中斷回調函數 ST16C958Int(),最后調用函數sysIntEnablePIC()使能共享中斷。在中斷回調函數中必須正確處理共享于同一中斷信號線上的其它設備所產生的中斷。

(3)端口設置

當用戶使用 ioctl()函數訪問虛擬設備 ttyDrv時, I/O系統調用ttyIoctl()函數, ttyIoctl()則接著訪問函數ST16C958Ioctl(),ST16C958Ioctl ()函數中主要實現波特率的設置、查詢,工作模式的設置及查詢等。

(4)應用程序串口訪問數據交互設計

1)初始化,首先操作系統要能夠正確識別該接口芯片、建立虛擬設備節點、映射基地址及掛接中斷,這就需要修改VxWorks系統config目錄下與嵌入式平臺的CPU相對應的文件夾中的sysSerial.c和sysSerail.h兩個文件,在 sysSerialHwlnit()函數中對接口芯片進行初始化,獲取基地址,設置讀寫及中斷回調函數, 設置初始狀態, 建立虛擬設備節點與驅動程序的關鍵數據結構ST16C958_ CHAN (如圖5所示)的對應關系。芯片內的每個關鍵寄存器的正確設置,關系到是否能讓芯片正確運轉,如PCI設置寄存器,異步收發中斷狀態寄存器,異步收發時鐘寄存器,EEPROM控制寄存器等。最后在syslib.c文件中的 sysHwInit()函數中調用 sysSerialHwInit()函數實現串口芯片的初始化,而這個過程是在Vxworks系統內核初始化之前完成的。

2)數據收發,當應用程序調用 write 函數發送數據時,IO請求包將會通過I/O系統傳給ttyDrv,使tyWrite()開始運行。tyWrite開始執行后,將會把用戶數據拷貝到 ttyDrv的環形緩沖區中,并調用ST16C958Startup()開始一個發送周期。每一次中斷,設備都會通過中斷服務程序發送一個或多個字節。ST16C958Startup()的任務包括初始化發送循環,開啟中斷準備發送。當硬中斷回調函數ST16C958Int()發現有數據需要發送時,則調用ST16C958PTxChar ()從高層協議驅除字符并將其傳送出去同時清除響應中斷,如果此時高層協議不再傳送數據,則重置傳送中斷,完成一個傳送周期,等待ST16C958Startup()開啟另一個傳送循環。當有數據收中斷產生時,ST16C958PRxChar()函數就從設備中接收數據并傳送到高層協議。

typedef struct{ /* ST16C958_CHAN */

SIO_DRV_FUNCS * pDrvFuncs;/* 驅動程序所需的

函數 */

STATUS (*getTxChar) ();/* 傳送函數指針 */

STATUS (*putRcvChar) ();/* 接收函數指針 */

void * getTxArg;

void * putRcvArg;

UINT16 int_vec;/* 中斷向量 */

UINT16 channelMode; /* 模式中斷或輪詢 */

UCHAR (*inByte) (int); /* 從硬件讀取一個字節

函數指針 */

void (*outByte)(int,char); /* 向硬件寫入一個

字節函數指針 */

ULONG lcr; /* 在線控制寄存器 */

ULONG lst; /* 在線狀態寄存器 */

ULONG mdc; /* MODEM控制寄存器*/

ULONG msr; /* MODEM狀態寄存器 */

ULONG ier; /* 中斷使能寄存器 */

ULONG iid; /* 中斷狀態寄存器*/

ULONG brdl; /* 波特率寄存器*/

ULONG brdh; /*波特率寄存器*/

ULONG data; /* 數據寄存器 */

ULONG options;

ULONG fcr; /* FIFO狀態寄存器*/

ULONG spr;

} ST16C958_CHAN;

2.3 實驗效果

通過測試,證明該驅動程序能夠在50~115 200 b/s的速率下正確傳送數據,且在多任務同時訪問不同的串口虛擬通道時,每個串口通道都能夠以 50~115 200 b/s的速率正確工作,且相互間互不干擾。

3 結語

本文針對基于vxworks的嵌入式安全平臺缺乏對高速多通道串口芯片驅動支持的問題,提出了vxworks下基于0X16PCI958芯片的多串口的驅動程序設計,實現了八通道串口通信驅動能力,并通過任務鎖、中斷鎖及數據結構的合理運用達到了較好的效果。進一步,通過對串口配置寄存器的設置進行優化,并通過驅動模塊內部嵌入密碼運算過程,可以實現穩定的數據傳輸,并可實現該安全平臺的高速串行數據通信和加解密處理。本文的研究成果,對廣泛采用vxworks系統的嵌入式安全平臺的研制,有較高的實用價值。

參考文獻

[1] Wind River Inc.Tornado BSP Developer's Kit for VxWorks User's Guide[EB/OL].(1999-02-11)[2011-10-01]. http://www.vxdev.com/html/42/756.htm.

[2] Wind River Inc. VxWorks BSP Reference[EB/OL].(2000-10-11)[2011-10-01].http://www-kryo.desy.d e/.../vxWorks/.../VxWorks_BSP.

[3] 周啟平,張楊.VxWorks下設備驅動程序及BSP開發指南[M].北京:中國電力出版社,2004.

猜你喜歡
設備系統
諧響應分析在設備減振中的應用
Smartflower POP 一體式光伏系統
工業設計(2022年8期)2022-09-09 07:43:20
WJ-700無人機系統
ZC系列無人機遙感系統
北京測繪(2020年12期)2020-12-29 01:33:58
基于PowerPC+FPGA顯示系統
半沸制皂系統(下)
基于VB6.0+Access2010開發的設備管理信息系統
基于MPU6050簡單控制設備
電子制作(2018年11期)2018-08-04 03:26:08
連通與提升系統的最后一塊拼圖 Audiolab 傲立 M-DAC mini
500kV輸變電設備運行維護探討
工業設計(2016年12期)2016-04-16 02:52:00
主站蜘蛛池模板: 国产自产视频一区二区三区| 国产91丝袜在线播放动漫 | 在线观看国产小视频| 青青草一区| 国产激爽爽爽大片在线观看| 69视频国产| 亚洲AV无码一区二区三区牲色| 午夜爽爽视频| 日韩麻豆小视频| 国产成人久久综合一区| 久久6免费视频| 波多野结衣第一页| 欧美天堂久久| 99在线国产| 国产精品成人啪精品视频| 玖玖精品在线| 黄色一级视频欧美| 中文字幕亚洲电影| 精品视频一区二区三区在线播| 无码乱人伦一区二区亚洲一| 91视频区| 老司国产精品视频| 国产黄网站在线观看| 日韩在线2020专区| 久久96热在精品国产高清| 美女国内精品自产拍在线播放| 青青青国产视频手机| 91热爆在线| 极品私人尤物在线精品首页 | 亚洲激情区| 国产福利拍拍拍| 69视频国产| 欧美日韩在线成人| 国产a v无码专区亚洲av| 国产凹凸一区在线观看视频| 99久久国产综合精品女同 | 国产噜噜噜视频在线观看| 亚洲天堂精品在线观看| 四虎在线高清无码| 综合色区亚洲熟妇在线| 国产在线视频欧美亚综合| 久久国产精品77777| 国产精品美女免费视频大全| 99久久精品无码专区免费| 女人一级毛片| 麻豆精品视频在线原创| 毛片免费在线视频| 国产流白浆视频| 91探花国产综合在线精品| 中日无码在线观看| 无码又爽又刺激的高潮视频| 成人噜噜噜视频在线观看| 亚洲日韩国产精品无码专区| 国产一二视频| 国产区福利小视频在线观看尤物| 97在线视频免费观看| 亚洲男女在线| 波多野结衣视频一区二区| 最新亚洲人成无码网站欣赏网 | 国产激爽大片高清在线观看| 国产国语一级毛片在线视频| 日韩成人在线网站| 亚洲精品欧美日韩在线| 国产乱子伦一区二区=| 三级欧美在线| 免费在线看黄网址| 国产午夜无码片在线观看网站| 免费高清a毛片| 国产jizzjizz视频| 亚洲欧美一区在线| 国产成人免费观看在线视频| 国精品91人妻无码一区二区三区| 国产经典免费播放视频| 99热这里只有精品免费国产| 九九九精品成人免费视频7| 免费在线一区| 真实国产精品vr专区| 国产97公开成人免费视频| 五月婷婷丁香综合| 亚洲成人福利网站| 亚洲精品你懂的| 毛片视频网址|