RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于VxWorks嵌入式實(shí)現(xiàn)多串口驅(qū)動(dòng)的開發(fā)與通信設(shè)計(jì)

牽手一起夢 ? 來源:網(wǎng)絡(luò)整理 ? 作者:佚名 ? 2020-01-16 09:37 ? 次閱讀

VxWorks操作系統(tǒng)是美國Wind River公司于1983年設(shè)計(jì)開發(fā)的一種嵌入式實(shí)時(shí)操作系統(tǒng)(RTOS),良好的持續(xù)發(fā)展能力、高性能的內(nèi)核以及友好的用戶開發(fā)環(huán)境,使其在嵌入式實(shí)時(shí)操作系統(tǒng)領(lǐng)域居于領(lǐng)先地位,廣泛應(yīng)用于現(xiàn)代的各種嵌入式計(jì)算機(jī)系統(tǒng)中,比如軍事指揮系統(tǒng)、武器控制系統(tǒng)工業(yè)控制系統(tǒng)中。而在這些系統(tǒng)中,往往不是單個(gè)計(jì)算機(jī)的控制,而是多個(gè)計(jì)算機(jī)以及其他設(shè)備組成通信網(wǎng)絡(luò)共同完成控制作用,因此,對于每一個(gè)嵌入式計(jì)算機(jī)除了連接必需的外設(shè)之外,還需要考慮計(jì)算機(jī)之間的通信。計(jì)算機(jī)間常用的通信方式是利用串行口來實(shí)現(xiàn)的。本文在VxWorks多串口通信的實(shí)現(xiàn)過程中未采用常見的標(biāo)準(zhǔn)VxWorks虛擬設(shè)備ttyDrv驅(qū)動(dòng)方式,而是在用戶的驅(qū)動(dòng)程序中直接對硬件進(jìn)行初始化,以中斷方式進(jìn)行串口通信。

1、環(huán)境及配置

VxWorks嵌入式開發(fā)采用圖1所示的主機(jī)一目標(biāo)機(jī)方式。

基于VxWorks嵌入式實(shí)現(xiàn)多串口驅(qū)動(dòng)的開發(fā)與通信設(shè)計(jì)

其他硬件與本文關(guān)系不大,這里主要介紹串口卡,該卡是DIAMOND SYSTEM公司生產(chǎn)的EMERALD-MM-8型8串口擴(kuò)展卡(以下簡稱EMM8),是基于2片ST16C554芯片的8串口集成板卡,每一路串口均可單獨(dú)配置成符合RS-232C/RS-422A/RS-485協(xié)議規(guī)范,最高速率可達(dá)115.2kb/s。通用異步收發(fā)器UART)ST16C554用來擴(kuò)展4路串口通道。每路通道各有一組16B的收發(fā)FIFO和移位寄存器,用來緩沖數(shù)據(jù)和串并轉(zhuǎn)換。每個(gè)通道有12個(gè)8b內(nèi)部寄存器,用來存放收發(fā)數(shù)據(jù)以及配置該串口的工作模式,需要在初始化時(shí)對各寄存器進(jìn)行設(shè)置。本文根據(jù)工程的要求,將卡上的硬件跳線設(shè)好,如:各串口使用RS-232C協(xié)議,按照datasheet進(jìn)行硬件跳線。其中J9的配置較為重要,如圖2所示。

基于VxWorks嵌入式實(shí)現(xiàn)多串口驅(qū)動(dòng)的開發(fā)與通信設(shè)計(jì)

D、C、B、A 四位表示base address,從data sheet中查表可知其跳線情況,以本項(xiàng)目為例,base address為0x300,則D、C、B、A分別為out、out、in、in,為1100。

2、3、4…15為該卡可用的中斷號,要使用哪個(gè)中斷就必須將其跳為in。本項(xiàng)目由于中斷資源不足,只能用一個(gè)中斷號即7號中斷,因此只將7設(shè)為in。

CK為頻段范圍跳線,對ST16C554來說必須為in。

另外,EMM8在系統(tǒng)啟動(dòng)時(shí)會從板上的EEPROM 中讀取各個(gè)端口的基本配置信息,主要是端口映射地址及分配的中斷號,這些信息可以在啟動(dòng)后編程修改,但一般是固定的,因此只要在EEPROM 中配置一次并保存即可。

2、多串口驅(qū)動(dòng)開發(fā)

2.1 I/O系統(tǒng)與串口設(shè)備驅(qū)動(dòng)層次結(jié)構(gòu)

I/O系統(tǒng)與串口設(shè)備驅(qū)動(dòng)層次如圖3所示。

基于VxWorks嵌入式實(shí)現(xiàn)多串口驅(qū)動(dòng)的開發(fā)與通信設(shè)計(jì)

圖3中最底層就是要編寫的驅(qū)動(dòng)程序。在這里主要完成對具體硬件的各種操作,以及與上層的接口。硬件驅(qū)動(dòng)層上面是ttyDrv和tyLib。這一層比較特殊,是Vxworks專門為串口設(shè)備準(zhǔn)備的一個(gè)虛擬驅(qū)動(dòng)庫,它把跟具體硬件無關(guān)的操作集成在了這一層中。這樣用戶只編寫與硬件有關(guān)的驅(qū)動(dòng)和跟這一層的接口函數(shù)即可。從總的結(jié)構(gòu)講,這2層都屬于設(shè)備驅(qū)動(dòng)的范疇。再上一層是I/O系統(tǒng)層,Vxworks的I/O系統(tǒng)向上提供了7個(gè)基本的I/O接口,供應(yīng)用程序調(diào)用;向下提供與各種設(shè)備驅(qū)動(dòng)程序的接口。I/O系統(tǒng)把應(yīng)用程序跟驅(qū)動(dòng)程序有機(jī)地連接起來。最頂層就是用戶根據(jù)應(yīng)用需要編寫的應(yīng)用程序。ttyDrv是一個(gè)虛擬設(shè)備驅(qū)動(dòng),用于處理I/O系統(tǒng)與底層實(shí)際設(shè)備驅(qū)動(dòng)程序(可以是用戶設(shè)計(jì)的驅(qū)動(dòng)程序)之間的通信。使用ttyDrv控制串口是比較常見的串口驅(qū)動(dòng)實(shí)現(xiàn)方式,實(shí)際上,直接對硬件進(jìn)行初始化,以中斷方式進(jìn)行串口通信也是可行的方式,且更加靠近底層,可以更自由、高效的控制串口。

2.2 EMM8驅(qū)動(dòng)開發(fā)

首先是對各串口的初始化和中斷配置,初始化包括設(shè)置波特率以及數(shù)據(jù)格式。

在實(shí)際的工程應(yīng)用中,需要8個(gè)串口共同使用一個(gè)中斷(中斷資源不足),實(shí)現(xiàn)8串口的全雙工同時(shí)收發(fā)。難點(diǎn)在于使用同一個(gè)中斷且不能丟數(shù)據(jù),對于驅(qū)動(dòng)使用同中斷問題,關(guān)鍵是接收數(shù)據(jù)的中斷服務(wù)程序ISR。經(jīng)過探索,不論是否使用單中斷,讀EMM8卡上I/O RegisterMap表中的一個(gè)中斷狀態(tài)寄存器(interrupt statusregister),可以指出當(dāng)時(shí)是哪一個(gè)串口收到數(shù)據(jù),讀出該串口的數(shù)據(jù)即可。但是這種實(shí)現(xiàn)方法經(jīng)過測試在接收時(shí)丟數(shù)據(jù)。后經(jīng)研究發(fā)現(xiàn),中斷狀態(tài)寄存器并不一定在某一個(gè)時(shí)刻只有一個(gè)端口位發(fā)生跳轉(zhuǎn)。即CPU收到中斷后,有可能是幾個(gè)串口“同時(shí)”收到數(shù)據(jù),這是因?yàn)橹袛?a target="_blank">控制器將同一個(gè)CPU中斷分給了不同的串口。從CPU端看來只有一個(gè)中斷,但從各串口來講,這個(gè)中斷有可能是幾個(gè)串口“同時(shí)”產(chǎn)生的。因此要對中斷狀態(tài)寄存器進(jìn)行輪詢,由發(fā)生跳轉(zhuǎn)的串口位接收該串口的數(shù)據(jù)。修改后,經(jīng)過編寫用例測試,可以穩(wěn)定地使用單中斷接收數(shù)據(jù)且不影響數(shù)據(jù)的發(fā)送。

2.3 驅(qū)動(dòng)測試

首先是各串口的功能測試,使用“串口調(diào)試助手”軟件工具通過PC機(jī)與各目標(biāo)機(jī)串口通信,收發(fā)數(shù)據(jù),然后通過屏幕顯示得到的數(shù)據(jù),對比規(guī)定的預(yù)期結(jié)果,檢測數(shù)據(jù)收發(fā)是否正確。經(jīng)多次驗(yàn)證,工作穩(wěn)定,通信正確。

綜合測試:使用2臺PC104分別安裝STV2050CPU模塊和EMM8多串口模塊各1塊,2臺PC通過網(wǎng)口(交換機(jī))連接2臺PC104,2個(gè)EMM8通過8根RS-232雙頭串口線連接。2臺PC通過網(wǎng)口使用tornado的shell工具下載啟動(dòng)程序。2臺PC104分別稱為1主機(jī)和2主機(jī)。測試方法是:1主機(jī)同時(shí)發(fā)送8串口的數(shù)據(jù),2主機(jī)8串口接收并轉(zhuǎn)發(fā)回1主機(jī)。1主機(jī)接收返回的數(shù)據(jù),判斷是否通信錯(cuò)誤。經(jīng)檢驗(yàn)正確通信300000次無錯(cuò),多次驗(yàn)證。完成對EMM8多串口通訊模塊全雙工收發(fā)的測試。

經(jīng)過以上測試,表明本文所述的多串口卡通信實(shí)現(xiàn)方法有效,所開發(fā)模塊穩(wěn)定可靠。

3、結(jié)束語

本文介紹了VxWorks嵌入式系統(tǒng)中的多串口卡通信的實(shí)現(xiàn)過程,因篇幅有限,不能列出詳盡代碼。本文以EMM8為例,采用驅(qū)動(dòng)直接訪問硬件的方法,較為簡潔、高效地解決了單中斷多串口全雙工通信的問題,滿足了項(xiàng)目需求,并經(jīng)過了測試和驗(yàn)收。為日后類似問題的解決提供了一些參考和經(jīng)驗(yàn)。

責(zé)任編輯:gt

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5082

    文章

    19104

    瀏覽量

    304785
  • 操作系統(tǒng)
    +關(guān)注

    關(guān)注

    37

    文章

    6801

    瀏覽量

    123280
  • 串口
    +關(guān)注

    關(guān)注

    14

    文章

    1551

    瀏覽量

    76421
收藏 人收藏

    評論

    相關(guān)推薦

    嵌入式系統(tǒng)論文集錦

    的設(shè)計(jì)與實(shí)現(xiàn).HTTP在嵌入式系統(tǒng)中的應(yīng)用及擴(kuò)展.Ipv6高級套接口的研究和實(shí)現(xiàn).ISaGRAF在SUPMAX500組態(tài)軟件中的應(yīng)用.IXP1200中微引擎和StrongArm通信的技
    發(fā)表于 08-01 22:03

    本人從事vxWorks bsp及驅(qū)動(dòng)開發(fā),狂愛嵌入式系統(tǒng)架構(gòu),望各...

    本人從事vxWorks bsp及驅(qū)動(dòng)開發(fā),狂愛嵌入式系統(tǒng)架構(gòu),望各路達(dá)人互相學(xué)習(xí),共同進(jìn)步
    發(fā)表于 12-28 15:02

    嵌入式軟件專家-珠海

    嵌入式軟件專家(工作地點(diǎn):珠海)職位要求:1、七年以上使用嵌入式Linux和RTOS(掌握VxWorks/eCos/ucOS-II/T-Kernel中任何一種即可)開發(fā)
    發(fā)表于 03-06 15:13

    嵌入式VxWorks招聘

    本帖最后由 mcuris 于 2014-6-6 17:26 編輯 職位描述:基于PowerPC、ARM、X86等處理器平臺的嵌入式操作系統(tǒng)VxWorks上的BSP、驅(qū)動(dòng)程序和中間件開發(fā)
    發(fā)表于 06-06 14:00

    如何去實(shí)現(xiàn)一種串口卡通信?求過程

    本文介紹了VxWorks嵌入式系統(tǒng)中的串口卡通信實(shí)現(xiàn)過程。
    發(fā)表于 06-03 07:08

    嵌入式實(shí)時(shí)操作系統(tǒng)VxWorks串口通信實(shí)現(xiàn)

    嵌入式實(shí)時(shí)操作系統(tǒng)VxWorks串口通信實(shí)現(xiàn)
    發(fā)表于 03-29 12:27 ?19次下載

    嵌入式DHCP Server如何在vxWorks

    嵌入式DHCP Server如何在vxWorks中的軟件實(shí)現(xiàn)
    發(fā)表于 03-29 12:27 ?23次下載

    基于VxWorks嵌入式系統(tǒng)復(fù)合通信模式

    基于VxWorks嵌入式系統(tǒng)復(fù)合通信模式
    發(fā)表于 03-29 12:30 ?12次下載

    基于VxWorks嵌入式系統(tǒng)復(fù)合通信模式

    嵌入式系統(tǒng)與VxWorks實(shí)時(shí)操作系統(tǒng)應(yīng)用愈加廣泛的背景下,結(jié)合嵌入式系統(tǒng)對于各類實(shí)時(shí)通信方式的不同需要,提出基于控制應(yīng)用的復(fù)合通信模式;
    發(fā)表于 05-15 13:45 ?9次下載

    嵌入式DHCP Server在vxWorks中的軟件實(shí)現(xiàn)

    隨著嵌入式時(shí)代的來臨,嵌入式的應(yīng)用越來越廣。首先介紹DHCP協(xié)議的工作原理,然后詳細(xì)描述嵌入式DHCP服務(wù)器在vxWorks中的軟件實(shí)現(xiàn)過程
    發(fā)表于 01-11 09:34 ?33次下載

    基于嵌入式操作系統(tǒng)VxWorks中的網(wǎng)絡(luò)通信

    基于嵌入式操作系統(tǒng)VxWorks中的網(wǎng)絡(luò)通信
    發(fā)表于 08-31 15:57 ?3次下載
    基于<b class='flag-5'>嵌入式</b>操作系統(tǒng)<b class='flag-5'>VxWorks</b>中的網(wǎng)絡(luò)<b class='flag-5'>通信</b>

    嵌入式VxWorks實(shí)時(shí)操作系統(tǒng)中串口通信實(shí)現(xiàn)

    嵌入式VxWorks實(shí)時(shí)操作系統(tǒng)中串口通信實(shí)現(xiàn)
    發(fā)表于 08-31 16:03 ?7次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>VxWorks</b>實(shí)時(shí)操作系統(tǒng)中<b class='flag-5'>串口</b><b class='flag-5'>通信</b>的<b class='flag-5'>實(shí)現(xiàn)</b>

    嵌入式Linux串口擴(kuò)展的驅(qū)動(dòng)設(shè)計(jì)方案解析

    本方案介紹WK2X系列UARTs在嵌入式Linux(Android)下擴(kuò)展串口方案,尤其是嵌入式Linux串口擴(kuò)展的
    發(fā)表于 08-31 15:35 ?1442次閱讀
    <b class='flag-5'>嵌入式</b>Linux<b class='flag-5'>串口</b>擴(kuò)展的<b class='flag-5'>驅(qū)動(dòng)</b>設(shè)計(jì)方案解析

    嵌入式VxWorks實(shí)時(shí)操作系統(tǒng)中串口通信實(shí)現(xiàn)

    嵌入式VxWorks實(shí)時(shí)操作系統(tǒng)中串口通信實(shí)現(xiàn)(通信網(wǎng)絡(luò)基礎(chǔ)課后答案第三章)-
    發(fā)表于 09-30 11:15 ?13次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>VxWorks</b>實(shí)時(shí)操作系統(tǒng)中<b class='flag-5'>串口</b><b class='flag-5'>通信</b>的<b class='flag-5'>實(shí)現(xiàn)</b>

    想學(xué)嵌入式開發(fā)怎么學(xué)?看這份超詳細(xì)的嵌入式學(xué)習(xí)路線

    linux系統(tǒng)開發(fā)3、嵌入式linux驅(qū)動(dòng)開發(fā)嵌入式目前主要面向的幾個(gè)操作系統(tǒng)是,LINUX,WINCE、
    發(fā)表于 11-03 09:51 ?13次下載
    想學(xué)<b class='flag-5'>嵌入式開發(fā)</b>怎么學(xué)?看這份超詳細(xì)的<b class='flag-5'>嵌入式</b>學(xué)習(xí)路線
    RM新时代网站-首页