在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于VxWorks操作系統實現PC/104-CAN適配卡的驅動系統設計

電子設計 ? 來源:單片機與嵌入式系統應用 ? 作者:解月工,秦龍勇, ? 2020-09-08 17:51 ? 次閱讀

來源:單片機嵌入式系統應用,作者:解月工,秦龍勇,謝拴勤,彭衛東

1 PC/104-CAN適配卡的硬件結構

PC/104-CAN適配卡主要由CAN控制器(SJA1000)、光電隔離(6N137),收發驅動器(82C250)及譯碼電路組成。編程主要了解的是控制器SJA1000。CAN適配卡原理如圖1所示。

基于VxWorks操作系統實現PC/104-CAN適配卡的驅動系統設計

2 CAN地址譯碼和中斷選擇

系統104主板的CPU為486DX,其對接口板訪問有兩種方式:內存映射和I/O訪問。I/O尋址采用專門的指令,每次只能傳送單個字節。內存映射方式可以訪問較大的地址空間并且指令豐富,便于實現快速交換數據。本文討論的CAN卡采用存映射模式工作,與486DX接口是104總線,它與 ISA總線兼容。對于Intel X86體系的CPU,ISA可以映射的空間為0xC8000~0xEFFFF。使用比較器和地址選擇開關組成可選端口地址譯碼電路,通過開關選通內存映射基地址(C8000H、C9000H、CA000H、…、EF000H),以避免與其它器件沖突。CAN偏移地址分配如下:

00~FFH SJA1000的寄存器

100H~1FFH 對該范圍內的任意地址進行寫操作,均可導致CAN硬件復位。

SJA1000的INT引腳通過跳線選擇IRQ3~7、IRQ9~12或IRQ15中的一個,避免與其它的適配卡沖突。

3 PC/104-CAN適配卡驅動實現

3.1 VxWorks驅動概述

VxWorks操作系統有兩種方式實現驅動。第一種方式是,把設備驅動程序作為獨立任務實現,直接在頂層任務中實現硬件操作,完成特有專用的驅動程序。第二種方式是,VxWorks的I/O系統將設備程序作為內核過程實現。這種方式便于實現I/O子系統的層次模型,便于文件系統一起把設備作為特殊文件處理,提供統一的管理、統一的界面和統一的使用方法,并把設備、文件及網絡通信組織成為一致的更高層次的抽象,為用戶提供統一的系統服務和用戶接口。我們和這種驅動方式。

作為I/O系統和硬件設備之間的連接層,VxWorks驅動就是屏蔽硬件操作,為I/O系統提供服務。實現一個完整的驅動,必須了解VxWorks下I /O的三個基本元素:File、Driver和Dervice。File是為用戶提供訪問設備的統一接口;Driver是實現具體的基本控制函數,也就是實現I/O系統所需要的接口;而Device則是一個抽象的硬件設備,是一系列的結構體、變量和宏定義對實際物理設備的定義。一般而言,實現一個驅動應該有三個基本的步驟:①用編程語言完成對實際物理設備的抽象;②完成系統所需要的各類接口及自身的特殊接口;③將驅動集成到操作系統中。之后還有一些調試工作。

3.2 VxWorks I/O系統驅動程序框架

VxWorks為各種設備(包括字符設備、塊設備、虛擬設備及網絡設備)提供統一的訪問接口,包括七種基本的I/O函數:open(filename、flags、mode),create(filename、flags),read(fd、&buf、 nBytes),write(fd、&buf、nBytes),ioctl(fd、command、arg),close(fd)及 remove(filename)。I/O系統所起的作用就是,把用戶請求分配到與設備對應的驅動例程中去。VxWorks系統中有一個驅動程序列表,其形式如表1所列。

表1 設備驅動列表(調試時可利用iosDrvShow()查看)

I/O系統的可動態調用iosDrvInstall()函數將設備的驅動例程(即XXOpen()、XXClose()、XXRead()等)加入到設備驅動列表中,如圖2所示。

同樣,系統中有一個設備列表,每個設備對應于設備列表中的一項,每一項包括設備名稱和設備驅動號,同時包括一個設備描述的結構。該結構第一個變量是DEV_HDR類型的變量DEV_HDR。

DEV_HDR的定義如下:

Typedef struct

{

DL_NODE node; /*設備列表節點*/

short drvNum; /*驅動號碼*/

char *name; /*設備名*/

}DEV_HDR;

系統調用iosDevAdd(),可以將設備加入到設備列表中。系統中將驅動和設備聯系起來的就是文件描述符列表,每個文件描述符列表除了包括驅動號、設備ID外,還包括文件名、可用標志和指向DEV_HDR的指針。系統每次成功執行open(),返回一個文件描述符,這樣對于設備的 read()、write()及ioctl()就可以通過文件描述符進行。

文件描述符表(調試時調用iosFdShow()查看)如下:

I/O系統的整體結構如圖3所示。系統啟動時(一般掛接在usrroot()),XXDrv()和XXDevCreade()便將設備及其驅動加入相應的列表中。

3.3 設備驅動程序的訪問過程

下面以CAN驅動程序為例,說明驅動程序的訪問過程。(假定設備名“/can/1”并且以CAN設備驅動程序為例,上述中的XX在這里用Can代替。)

①fd=open(“/can/1”,O_RDWR,0644)

②I/O系統在設備列表中尋找設備名為/can/1的設備項,找到相應的設備驅動號。

③I/O系統在文件描述符中保留一個文件描述符空間。

④I/O系統在設備驅動列表中找到對應的CanOpen(CAN_DEV*PCAN_DEV,UBYTE*remainder,int flags),該驅動例程返回設備描述符的指針。

⑤I/O系統將設備描述符的指針存儲在文件描述符列表的Device ID,同時將對應的設備驅動號存儲在文件描述符的Driver num項。最后I/O系統返回該描述符項的索引(即為fd)。

⑥這樣應用程序中的read()和write()等函數調用就可以根據fd找到相應的設備驅動號,進而找到相應的驅動例程。

4 CAN驅動程序的實現

CAN驅動程序的實現即是完成下面七個函數的編寫。下面簡要介紹其完成的功能,并用偽指令進行說明。

int drv_num; ;/*驅動號碼*/

typedef struct {

DEV_HDR pCANHDR; /*這個數據結構必須放在設備描述符的最初部分*/

/*其余與驅動有關數據*/

}CAN_DEV; /*CAN設備描述符*/

CAN_DEV can_chan_dev;

STATUS CanDrv(void){

完成驅動的一些初始化;

intconnect(); /*連接所選的IRQ與中斷處理函數*/

sysIntEnablePIC(); /*486DX允許中斷*/

drv_num=iosDrvInstall(CanOpen,NULL,CanOpen,CanClose,CanRead,CanWrite,CanIoctl);/*將設備驅動例程裝入設備列表中*/

}

/*iosDrvInstall()將設備的CAN驅動例程加入設備驅動列表中,7個參數為7個驅動例程的進入點(entry point),如果沒有某個例程,則傳遞NULL。*/

STATUS CanDevCreate(){

完成一些設備初始化

iosDevAdd (&Can_chan_dev.pCANHDR,“can0”,drv_num);/*將設備放入設備驅動列表中*/

}

int CanOpen(CAN_DEV *pCan_Dev,UBYTE *remainder,int flags){

CAN卡硬件復位

CAN卡關中斷

CAN卡進入軟件復位模式

設置CAN卡工作寄存器,如接收碼寄存器和屏蔽碼寄存器等

CAN卡開中斷和進入操作模式

Return((int)pCan_Dev); /*注意必須返回設備描述結構指針*/

}

int CanRead(int CAN_DEV_ID,UBYTE * buf,int nBytes){

等待信號量(該信號量由中斷處理例程釋放)

從接收緩沖區讀取數據

釋放接收緩沖

返回接收數據數量

}

int CanWrite(int CAN_DEV_ID,UBYTE* buf,int nbyte){

查詢發送緩沖是否可用

向發送緩沖區寫數據

命令發送

查詢發送完成標志

返回發送數據數量

}

void interrupt_handle_routin(int arg){

處理中斷事件

發送(釋放)信號量

}

限于篇幅,其它函數略。

5 CAN驅動調試

硬件驅動的調試是件十分麻煩的事,經驗十分重要。這里簡要介紹幾個幫助調試的函數。

①可以調用iosDrvShow()、iosDevShow()及iosFdShow()查看相關內容,判斷并將驅動及設備中入相應列表。

②使用logMsg()現實相關內容,以定位錯誤。

初期調試,示波器和信號燈是非常有用的,可以確定硬件的工作狀況,從而有助于發現程序中的錯誤。

6 小結

筆者采用兩種方式完成了CAN卡驅動。相對于第一種(筆者亦完成),第二種方式——VxWorks的I/O系統將設備程序作為內核過程實現,大大減少了系統的開銷,實時性和可靠性有了很大的提高,并且為用戶提供了統一的接口,使用十分方便。

開發驅動程序,輔助工具是非常有用的。Windows下的開發工具就比較多,而在VxWorks下開發驅動的工具相對較少。Windriver 是一款不錯的開發工具,可以開發VxWorks下的驅動程序(也可以開發其它操作系統下的驅動程序)。正確、熟練地使用這些輔助工具,會使開發工作事半功倍。

責任編輯:gt

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 驅動器
    +關注

    關注

    53

    文章

    8271

    瀏覽量

    147067
  • 控制器
    +關注

    關注

    112

    文章

    16445

    瀏覽量

    179454
  • 操作系統
    +關注

    關注

    37

    文章

    6895

    瀏覽量

    123745
收藏 人收藏

    評論

    相關推薦

    什么是VxWorks操作系統

    VxWorksVxWorks操作系統是美國WindRiver公司于1983年設計開發的一種實時操作系統。VxWorks擁有良好的持續發展能力、高性能的內核以及良好的用戶開發環境,在實時操作系統
    發表于 06-07 14:17

    VxWorks系統CompactPCI總線怎么控制?

    ,硬件平臺為PC104+架構。這里提出一種VxWorks操作系統下ComPactPCI總線驅動程序的設計及
    發表于 08-29 06:13

    求一種CAN適配卡驅動程序的設計方案

    CAN總線技術CAN適配卡驅動程序的設計與實現基于WinCE環境的CAN
    發表于 04-23 06:43

    如何利用VxWorks操作系統實現PC/104-CAN適配卡驅動系統設計

    求一種基于VxWorks操作系統實現PC/104-CAN適配卡
    發表于 04-28 06:17

    VxWorksPC/104-CAN驅動程序設計

    詳細介紹實時多任務操作系統VxWorks環境下驅動程序的設計原理;針對驅動程序實現的困難,給出VxWor
    發表于 04-16 09:40 ?12次下載

    基于USB的CAN適配卡的設計與實現

    本文論述了CAN 總線系統CAN 適配卡的重要作用,在分析其他CAN 適配卡
    發表于 08-05 09:16 ?16次下載

    VxWorks操作系統下CF驅動程序的開發

    描述了如何在VxWorks操作系統下進行CF訪問和創建CFIDE驅動程序的方法,在系統
    發表于 08-21 08:35 ?27次下載

    Linux操作系統實現了在PC104 上的裁減和移植

    論文簡要分析了Linux 操作系統啟動過程,介紹了Busybox、MiniGUI 等優秀的嵌入式專用軟件,以及以PC104 主板和CF(CompactFlash)構建帶圖象用戶界面(GUI)的嵌入式Linux
    發表于 06-24 15:37 ?31次下載

    基于CP2102高速USB2.0-CAN適配卡的設計

    基于CP2102高速USB2.0-CAN適配卡的設計 基于橋接芯片CP2102,設計了USB2.0-CAN適配卡。系統采用USB和
    發表于 04-22 18:34 ?3416次閱讀
    基于CP2102高速USB2.0-<b class='flag-5'>CAN</b><b class='flag-5'>適配卡</b>的設計

    基于WinCE環境的CAN適配卡驅動程序的設計與實現

    基于WinCE環境的CAN適配卡驅動程序的設計與實現 WinCE是一種為多種嵌入式系統和產品設計的緊湊、高效、可升級的
    發表于 10-26 09:04 ?1059次閱讀

    VxWorks操作系統指南

    1.VxWorks操作系統概述 4 1.1.VxWorks 操作系統簡介 4 1.2.VxWorks操作
    發表于 05-27 16:45 ?73次下載

    PC104總線實現VxWorks板載支持包BSP

    設計開發了嵌入式實時操作系統VxWorks 的一種基于PC104 總線的板載支持包, 完成了相關的外圍驅動程序設計和調試工作。
    發表于 09-07 16:09 ?54次下載
    <b class='flag-5'>PC104</b>總線<b class='flag-5'>實現</b><b class='flag-5'>VxWorks</b>板載支持包BSP

    基于WinCE環境的CAN適配卡驅動程序的設計與實現

    本文簡要介紹了嵌入式實時操作系統WinCE環境下驅動程序的設計原理和CAN總線技術并詳細分析了依托PC/104總線的
    發表于 03-29 14:25 ?3次下載

    基于VxWorks操作系統下光纖通道通信軟件的實現

    基于VxWorks操作系統下光纖通道通信軟件的實現
    發表于 08-31 17:08 ?4次下載
    基于<b class='flag-5'>VxWorks</b><b class='flag-5'>操作系統</b>下光纖通道通信軟件的<b class='flag-5'>實現</b>

    VxWorks操作系統下CompactPCI總線驅動程序的設計

    VxWorks操作系統下CompactPCI總線驅動程序的設計(電源技術應用 期刊)-該文檔為VxWorks操作系統下CompactPCI總
    發表于 08-31 16:09 ?17次下載
    <b class='flag-5'>VxWorks</b><b class='flag-5'>操作系統</b>下CompactPCI總線<b class='flag-5'>驅動</b>程序的設計
    主站蜘蛛池模板: 性欧美videofree丝袜 | 夜夜想夜夜爽天天爱天天摸 | 女人张开腿让男人桶免费网站 | 乱人伦一区二区三区 | 国产午夜精品片一区二区三区 | h免费在线观看 | 狠狠干狠狠操视频 | 日本国产高清色www视频在线 | 黄 色 录像成 人播放免费99网 | 伊人天天操| 日本一区二区三区在线观看视频 | 免费啪视频观在线视频在线 | 性久久久久久久久 | 国产三级日本三级日产三 | 欧美一区二区三区视频在线观看 | 99久久999久久久综合精品涩 | 亚洲免费影视 | chinese国产一区二区 | 在线播放真实国产乱子伦 | 1024国产高清精品推荐 | 九九re热 | 狠狠色依依成人婷婷九月 | 亚洲五月综合网色九月色 | 大量喷潮free| 中文字幕一区二区视频 | 色老成人精品视频在线观看 | 亚洲第一伊人 | 四级毛片在线播放 | 狠狠色狠狠色综合网 | aa在线免费观看 | 色综合一区二区三区 | 美国69bjfree18vide视频 | 欧美交片| 欧美三级中文字幕hd | 亚洲三级在线看 | 性欧美在线 | 久久99国产精品免费观看 | wwwxx在线观看 | 色你懂的 | 国产婷婷色一区二区三区 | 九色综合九色综合色鬼 |