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

MAX 1202在嵌入式系統中的驅動程序設計及應用

2014-07-25 08:59:46王進華
網絡安全與數據管理 2014年24期
關鍵詞:嵌入式設備

陳 晨,王進華

(福州大學 電氣工程與自動化學院,福建 福州 350108)

0 引言

科技的進步使智能化設備越來越多地應用到工業生產、農業種植、醫療衛生、航天設備甚至是居民的日常生活中,智能化設備要處理一些環境中的物理量就需要使用相關傳感器將其轉化成電量,如電壓、電流等。但是這些量要送給處理器處理,則必須要通過模/數轉換器進行轉換。

本文中采用MAX1202模/數轉換器和友善之臂的Micro2440開發板,開發板使用三星公司的s3c2440的ARM9微處理器。在Linux系統中開發MAX1202驅動程序并編寫應用程序進行驅動程序的測試。

1 芯片介紹

MAX1202是一款8通道12位串行A/D轉換器。串行接口工作頻率最高可以達到2 MHz[1]。工作采用單端+5 V供電或雙端±5 V供電。內部有一個8通道的多路轉換器、高帶寬的跟蹤/保持電路以及高轉換速度和低功耗的串行接口,芯片提供了符合SPI通信標準的SPI接口,以便于編程實現數據的轉換。

其典型應用電路如圖1所示。

圖1 MAX1202典型應用電路

2 驅動程序設計

Linux驅動程序使用module_init宏中所定義的初始化函數注冊該驅動及初始化硬件設備;使用module_exit宏中定義的注銷函數注銷設備,釋放相關資源。

結構struct file_operations列出了設備驅動程序可供應用程序調用的所有函數。其中的成員都是函數指針,指向該函數的入口執行位置,當應用程序調用open、read、write等函數時,驅動程序會通過該結構找到對應應該執行的M1202函數,進而根據傳入的參數執行,以響應應用程序的調用。驅動程序的編寫主要就在于file_operations結構體中各驅動函數的實現,并不是每一個函數都要實現[2],對于不需要實現的函數可以賦值為空,也可以在函數實現中直接返回0,或直接調用系統默認的實現函數。MAX1202的file_operations結構體定義如下:

2.1 模塊初始化函數M1202_init

在驅動加載時,系統進程會通過module_init(M1202_init)宏找到所定義的驅動初始化函數M1202_init(),進行驅動程序的加載。主設備號可以自已定義,向函數MKDEV(M1202_major,0)傳遞主次設備號產生dev_t類型的devno結構[3];也可以由alloc_chrdev_region(&devno,0,1,M1202_name) 函數自動分配主設備號;本例中自己定義主設備號,然后由register_chrdev_region(devno,1,M1202_name)函數在Linux中為驅動程序獲取設備編號;接著就是向Linux內核注冊字符設備,指出該驅動可提供給應用程序的接口結構。實現代碼如下:

代碼中省去了錯誤調試信息。

2.2 設備打開函數M1202_open

s3c2440芯片配備了2組SPI接口[4],Micro2440開發板引出了一組SPI1,對應是PA7、PA8、PA9、PA10引腳,這是一組可以復用的端口,既可以用中斷、普通端口,也可以用于SPI通信。MAX1202在外部時鐘模式下的工作時序如圖2所示。

圖2 MAX1202外部時鐘模式下的工作時序

查看MAX1202在外部時鐘模式下的工作時序可以發現,在控制字送入的8個時鐘后,芯片即開始了邊輸出邊轉換的過程,相比較內部時鐘模式的轉換完成后再讀取輸出結果而言,有著更快的轉換效率,故采用外部時鐘模式。在控制字輸出后,轉換結果緊跟著輸出,為了減少頻繁對寄存器的操作,降低編程的難度,采用普通輸出端口輪流輸出高低電平的方法模擬主SPI設備的時鐘輸出。 使用s3c2410_gpio_cfgpin(S3C2410_GPG11,S3C2410_GPG11_OUTP);將GPG11端配置成輸出端口用于輸出MAX1202工作時所需的片選信號;類似地用s3c2410_gpio_cfgpin()函數配置GPG6、GPG7端為輸出端,分別用于產生MAX1202的控制字輸入與時鐘輸入;使用s3c2410_gpio_cfgpin(S3C2410_GPG5,S3C2410_GPG5_INP);將GPG5端口配置成輸入端口,用于讀取MAX1202的Dout端的輸出結果。在MAX1202正式工作前需將片選端CS端置為1,相應地有s3c2410_gpio_setpin(S3C2410_GPG3,1);函數;另外三個端口s3c2410_gpio_setpin函數配置為0。這些就是open函數所需要完成的端口配置。

2.3 寫函數M1202_write

設備打開后,每次轉換之前,需要向MAX1202寫控制字,以設置MAX1202選通的工作通道、時鐘模式、信號輸入模式等。MAX1202控制字格式如表1所示。

表1 MAX1202控制字格式

Bit7:起始位一般選擇1,用于標識控制字的開始;

Bit6~Bit4:是8路通道的選擇,在單端模式下,依據8421編碼,000對應第0通道CH0,001對應第1通道CH1,010對應第2通道CH2,以此類推;

Bit3:為信號的單雙極性選擇位,這里選擇1,單極性;

Bit2:為信號輸入方式選擇位,這里選擇1,單端輸入;

Bit1~Bit0:時鐘和斷電模式選擇位,這里選擇11,外部時鐘。

驅動屬于內核的一部分,而應用程序屬于用戶空間,內核空間和用戶空間的數據不能共享,數據的傳輸需要使用特定的函數copy_from_user()和copy_to_user()。因此,由應用程序傳入的控制字信息需要使用copy_from_user()傳入內核空間。使用循環移位和與操作,輪流讀取8位控制字的每一位,由s3c2410_gpio_setpin(S3C2410_GPG6,X)函數將各位值輸出到MAX1202得DIN端,在時鐘的下降沿由MAX1202讀取,X代表了要傳輸的一位值。

2.4 讀函數M1202_read

在外部時鐘模式下,控制字輸入完后即可在緊接著的16個時鐘周期內讀取轉換結果,這16位轉換結果的最低4位為無效位,均為0,雖然無效,但必須在時鐘的作用下讀取出來,不然會影響到下一次的轉換結果,故函數讀取16位后左移4位用于消除低4位的無效位。while函數的執行條件控制讀取次數為16次,s3c2410_gpio_getpin(S3C2410_GPG5)用于從MAX1202的DOUT端讀入當前時鐘下的輸出值。讀取結束后,要使用copy_to_user()函數將得到的結果傳遞到用戶空間,以供顯示或處理。

2.5 模塊卸載函數M1202_exit

模塊卸載函數首先要刪除字符設備,然后釋放占用的驅動設備號,以供其他的設備使用。

3 MAX1202在嵌入式系統中的應用

3.1 設備驅動的加載

Linux下的驅動有靜態加載和動態加載兩種方式[5]。靜態加載將驅動程序編譯到內核里,系統啟動后直接可以由應用程序調用,但每次修改驅動程序都必須重新編譯內核,較麻煩。動態加載是在系統啟動后使用insmod命令,把編譯好的M1202.ko文件加載到系統中,不需要時可以使用rmmod命令卸載。但是在重新開機之后,該驅動就沒了,需要重新加載。故靜態加載適合于驅動開發完成后的產品量化;而動態加載適合于驅動開發過程中頻繁的修改。

在開發板中驅動的動態加載方法:

在Linux中,設備被當做文件一樣處理,任何可用設備在/dev/目錄下都會有一個對應的設備文件,使用mknod命令創建設備節點,在應用程序中即可像操作文件一樣操作該設備。

3.2 數據采集

驅動加載并且創建了設備節點后就可以編寫應用程序進行電壓數據的采集。

使用open函數以只讀的方式打開已經創建了的M1202節點即打開了MAX1202硬件。傳入控制字0x8F給write函數,開啟通道0的轉換,使用單極性單端輸入外部時鐘模式,read函數將轉換結果保存到指針num所指向的地址中,然后就可以打印或者處理轉換結果,最后像關閉文件一樣使用close()函數關閉設備。使用交叉編譯指令#arm-linux-gcc╞o M1202test M1202test.c編譯后生成應用程序文件M1202test,通過串口導入Micro2440中或將應用程序文件放到網絡根文件系統中,#chmod+xM1202test增加文件的可執行權限,#./M1202test執行可執行文件,即可對通道0引腳的數據進行采集轉換。

部分應用程序如下:

在實際使用中可以使用for(int i=0,i<8,i++)和ctlword=ctlword|(i<<4); 改變控制字的Bit6-Bit4位,循環采集引腳0-7端輸入的電壓,或者根據需要使用其中部分引腳。經測試,A/D轉換結果較好,在轉換誤差范圍內。

4 結論

隨著智能化設備的發展,嵌入式系統將涉及生活中的方方面面。本文詳細介紹了MAX1202在嵌入式Linux系統中的驅動程序的開發方法,對于相關驅動程序的開發有一定的參考價值,且該MAX1202的A/D實現方法也可以應用到一些工程實際中去。

[1]蔣雙梅,高敦堂,都思丹.8通道12位串行A/D轉換器MAX1202及其應用[J].微電子學,2000,30(6):437-440.

[2]韋東山.嵌入式Linux應用開發完全手冊(第1版)[M].北京:人民郵電出版社,2008.

[3]付興武,張軍,王洋.基于SPI總線協議的字符設備驅動程序[J].計算機系統應用,2013,22(2):146-150.

[4]楊小容,陳建政.串口AD嵌入式Linux驅動實現[J].中國測試,2010,36(2):84-87.

[5]黃智偉,鄧月明,王彥.ARM9嵌入式系統設計基礎教程(第1版)[M].北京:北京航空航天大學出版社,2008.

猜你喜歡
嵌入式設備
諧響應分析在設備減振中的應用
TS系列紅外傳感器在嵌入式控制系統中的應用
電子制作(2019年7期)2019-04-25 13:17:14
基于VB6.0+Access2010開發的設備管理信息系統
嵌入式系統通信技術的應用
電子制作(2018年18期)2018-11-14 01:48:16
基于MPU6050簡單控制設備
電子制作(2018年11期)2018-08-04 03:26:08
搭建基于Qt的嵌入式開發平臺
嵌入式軟PLC在電鍍生產流程控制系統中的應用
電鍍與環保(2016年3期)2017-01-20 08:15:32
500kV輸變電設備運行維護探討
工業設計(2016年12期)2016-04-16 02:52:00
如何在設備采購中節省成本
原來他們都是可穿戴設備
消費者報道(2014年7期)2014-07-31 11:23:57
主站蜘蛛池模板: 亚洲色婷婷一区二区| 亚洲天堂日本| 91久久精品日日躁夜夜躁欧美| 激情在线网| 2021国产乱人伦在线播放| 无码aaa视频| 精品乱码久久久久久久| 精品亚洲国产成人AV| 中文字幕啪啪| 在线综合亚洲欧美网站| 毛片卡一卡二| 香蕉eeww99国产精选播放| 免费国产在线精品一区| 久久国产精品无码hdav| 久久精品最新免费国产成人| 日韩av资源在线| 狠狠v日韩v欧美v| 国产精品刺激对白在线| 性视频一区| 在线观看国产一区二区三区99| 国产在线拍偷自揄观看视频网站| 91国内外精品自在线播放| 久久综合一个色综合网| 亚洲午夜片| 99r在线精品视频在线播放| 农村乱人伦一区二区| 国产午夜无码片在线观看网站| 18禁黄无遮挡网站| 欧美成人精品一区二区| 国产人免费人成免费视频| 国模在线视频一区二区三区| 久久国产热| 国产91av在线| 欧美综合中文字幕久久| 成人免费午夜视频| 色有码无码视频| 亚洲国产成人无码AV在线影院L| 欧美a在线看| 国产成人一区二区| 美女潮喷出白浆在线观看视频| a级毛片免费播放| 5555国产在线观看| 国产精品55夜色66夜色| 激情六月丁香婷婷四房播| 一级毛片免费的| 亚洲国产成人麻豆精品| 国产美女丝袜高潮| 在线综合亚洲欧美网站| 一区二区三区四区日韩| 久久人人爽人人爽人人片aV东京热 | 91麻豆精品国产91久久久久| 第九色区aⅴ天堂久久香| 日韩精品毛片| 亚洲男人天堂网址| 91精品伊人久久大香线蕉| 成年人国产网站| 国产aaaaa一级毛片| 日本在线欧美在线| 成人福利免费在线观看| 国产在线观看人成激情视频| 国产在线第二页| 亚洲有无码中文网| 乱色熟女综合一区二区| AV片亚洲国产男人的天堂| 小蝌蚪亚洲精品国产| 亚洲精品天堂在线观看| 欧美午夜网| 扒开粉嫩的小缝隙喷白浆视频| 亚洲午夜福利精品无码不卡| 国产精品冒白浆免费视频| 热久久这里是精品6免费观看| 亚洲最黄视频| 97国内精品久久久久不卡| 内射人妻无码色AV天堂| 国产在线98福利播放视频免费| 久无码久无码av无码| 波多野结衣AV无码久久一区| 毛片免费网址| 国产精品999在线| 欧美日韩国产在线播放| 中文字幕佐山爱一区二区免费| 日本道综合一本久久久88|