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

串口AD嵌入式Linux驅動實現

2010-07-14 07:56:56楊小容陳建政
中國測試 2010年2期
關鍵詞:嵌入式設備系統

楊小容,陳建政

(西南交通大學牽引動力國家重點實驗室,四川 成都 610031)

1 引 言

Linux操作系統的迅猛發展,與其具有的良好特性是分不開的。Linux是一種性能優良、源碼公開、多用戶、多任務操作系統,目前主要運用在大型服務器領域、網絡處理應用和嵌入式系統。隨著現代智能設備的不斷升級換代,基于ARM等嵌入式系統等的32位機智能系統在現代生活中的地位也越來越重要。為了加強在嵌入式系統領域的優勢,Linux2.6已經在內核中加入了提高中斷性能和調度響應時間的改進,包括采用可搶占內核、效率更高的調度算法和同步特性。另外,Linux2.6內核加入了包括S3C2440X在內的多種微控制器的支持,并開始支持多種流行的無MMU單元的微控制器,如Dragonball、ColdFire、Hitachi H8/300。掌握嵌入式Linux驅動開發及AD數據采集系統的開發,實現高速、可靠的數據采集理念,并可將其用于高速列車的分布式數據采集系統中。

2 硬件說明

2.1 ARM微處理器S3C2440

S3C2440是三星公司推出的采用RISC結構的16/32位微處理器。它基于ARM920T內核,采用五級流水線和哈佛結構,開發板布局簡潔明了,外設齊全,接口標準,擴展方便。最高頻率可達400MHz,低功耗,高性能,適合于PDA、便攜媒體播放器、衛星導航儀等多媒體終端。文件系統采用YAFFS文件系統,YAFFS類似于JFFS/JFFS2,是專門為NAND閃存設計的嵌入式文件系統,適用于大容量的存儲設備[1-2]。

S3C2440有2個SPI口,可實現串行數據傳輸,每個SPI接口各有2個移位寄存器分別負責接收和發送數據。發送數據和接收數據是同步進行的,傳送的頻率可由相應的控制寄存器設定。數據傳輸時,一個SPI系統作為“主機”控制數據流,其他SPI作為“從機”,主機控制數據的輸入和輸出。S3C2440的SPI口包括2條數據線及2條控制線:

主機輸出從機輸入(SPIMOSI):數據線將主機輸出數據作為從機輸入。

主機輸入從機輸出(SPIMISO):數據線將從機輸出作為主機輸入。傳輸時,只有單從機傳輸數據。

串行時鐘(SPICLK):控制線由主機驅動,用來調節數據流。主機傳輸數據波特率可變,傳輸一位,產生一個SPICLK周期。

從機選擇(NSS):控制線允許硬件開關從機。可與譯碼器結合控制多個外設。

該文采用 MISO,MOSI,SPICLK0 作為 SPI通信信號,NSS0作為TLC2543的片選信號。如圖1所示為S3C2440與TLC2543的接口電路圖。

圖1 S3C2440與TLC2543的連接圖

2.2 TLC2543引腳及原理

TLC2543是TI公司生產的一種12位開關電容逐次逼近A/D轉換器[2-5]。芯片共有11個模擬輸入通道(AIN0~AIN10)。芯片的三個控制端串行三態輸出數據端(DATA OUTPUT)、輸入數據端(DATA INPUT)、輸入/出時鐘(I/O CLOCK)能形成與微處理器之間數據傳輸較快和較為有效的串行外設接口(SPI)。片內具有一個14通道多路選擇器用于在11個模擬輸入通道和3個內部自測試(SELl-TEST)電壓中任選一個。可通過對其8位內部控制寄存器進行編程完成通道的選擇,并可對輸出結果的位數、MSB/LSB導前和極性進行選擇。如圖2是TLC2543時序圖(MSB FIRST),TLC2543在程序中定義16位輸出,但實際轉換結果仍為12位,只不過在數據傳送過程中4個LSB位被置為0。

TLC2543的片選信號CS變低時開始轉換和傳送過程,I/O CLOCK的前8個上升沿將8個輸入數據位鍵入輸入數據寄存器,同時它將前一次轉換的數據的其余11位移出DATA OUT端。TLC2543收到4個時鐘信號后,開始對選定的通道的模擬量進行采樣。并保持到第16個時鐘的下降沿,之后開始對采樣的模擬量進行轉換,大約需10 μs,轉換的數據保存在輸出數據寄存器中待下一個工作周期輸出。

3 設備驅動程序

設備驅動程序是操作系統內核和機器硬件之間的接口,它為應用程序屏蔽了硬件的細節,這樣在應用程序看來,硬件設備只是一個設備文件。應用程序可以和操作普通文件一樣,只需要進行文件的打開、讀寫和關閉等操作,就能控制底層的具體硬件設備[6-10]。在Linux操作系統下有三類主要的設備文件類型,即字符設備、塊設備和網絡設備。模數轉換芯片TLC2543屬于字符設備類(char device),這也是使用最多的設備類別。

3.1 A/D模塊的初始化函數

使用一個設備之前要首先對其進行初始化,A/D設備驅動的初始化函數AD_init_module(void)主要完成兩個部分的操作,第一是對A/D的PIO口進行初始化設置,并對SPI的工作方式、各控制寄存器和模式寄存器等配置參數;第二是完成A/D設備驅動程序向Linux內核注冊,為其動態的申請一個設備號。

圖2 TLC2543時序圖(MSB FIRST)

初始化工作首先要對S3C2440的SPI控制器編程,設置SPI工作方式,完成對控制寄存器SPCON設置、波特率SPPRE設置和GPIO口的設置等。由于在Linux下是不允許對設備的物理地址進行直接訪問的,必須轉換為虛擬地址后才能訪問,定義AD_devices=kmalloc(sizeof(structAD_dev),GFP_KERNEL),并動態分配內存 memset(AD_devices,0,sizeof(struct AD_dev))。

設置完各參數后還需要將設備驅動程序向Linux內核注冊,利用函數int register_chrdev(unsigned int major,constchar*name,struct file_operations*fops)其中:major是感興趣的主編號,name是驅動的名字(出現在/proc/devices),fops是缺省的 file_operations結構。這樣基本完成了設備驅動的初始化函數。

3.2 設備操作的具體實現函數

該驅動的工作流程如圖3所示。Linux內核是通過一個file_perations的結構體來組織對設備操作的具體實現函數,結構中的成分幾乎全是函數指針。包含了驅動程序提供給應用程序訪問硬件設備的各種方法。每個成員都對應一個系統調用,當用戶對設備文件進行操作時,系統調用通過設備文件的主設備號找到相應設備的驅動程序,然后找到file_operations中相應的函數指針,并由該函數進行以下的控制[2-5,11-12]。需要對SPI端口進行打開、關閉、接收、發送、傳輸數據操作,因此定義file_operations結構體如下:

int AD_open(struct inode*inode,struct file*filp);

int AD_release(struct inode*inode,struct file*filp);

static ssize_t AD_write (struct file*file,const char*buf,size_t count,loft_t*offset);

其中讀設備方法主要實現A/D轉換后的結果輸出到用戶空間中,寫設備方法則相反,它從用戶空間讀取數據,對A/D設備寫命令字進行控制。用戶利用SPI接口發送和接收數據時,系統就會分別調用AD_write和 AD_read函數及 AD_convert和 spi_tx_data函數。AD_read函數中需要注意參數buf和count。buf是用戶空間緩沖區,read調用的返回數據保存在這里。count是指buf空間的大小,用字節數表示。當S3C2440的狀態寄存器(在此使用的是GPH的數據寄存器GPHDAT)設置為TXD時進行A/D轉換,可以通過 copy_to_usr(buf,from,count)函數將接收的數據傳送給用戶程序。AD_write函數中的buf和count參數同AD_read函數中的說明,可通過copy_from_usr(to,buf,count)函數接收用戶需要發送的數據。

文件的打開(AD_open)和關閉(AD_release)函數只是將模塊使用計數加一、減一。open調用時如果返回-1則表示打開設備文件不成功,close調用時只需關閉open函數返回的文件描述字所連的設備即可。

對于A/D轉換及其數據傳輸,定義:

void AD_convert(void);

void spi_tx_data(unsigned char data);

A/D轉換函數AD_convert中首先設置寄存器為發送狀態,調用spi_tx_data通過中斷方式完成數據發送。S3C2440的SPI接口設置為中斷傳送模式進行串行數據傳輸:int request_irq(unsigned int irq,irqreturn_t(*handler)(int,void*,structpt_regs*),unsignedlongflags,constchar*dev_name,void*dev_id)。

3.3 設備注銷函數

與設備初始化函數相對應,設備注銷函數void AD_cleanup_module(void)主要完成釋放內存空間、端口等操作,其核心部分是由字符設備注銷函數unregister_chrdev (unsigned intmajor,constchar*name)組成的,該函數完成驅動程序向Linux內核的注銷,當設備驅動程序注銷以后,內核收回所分配的設備號。

4 驅動程序的編譯與加載

完成了驅動程序的編寫,接下來就要對生成的.c文件進行編譯。采用Linux中的交叉編譯工具arm-linux-gcc編譯驅動程序為目標文件[1,7-10]。驅動代碼完成后,需要編寫一個makefile:

執行make命令后,生成ad.ko。啟動開發板后,在minicom終端下進入開發板/tmp目錄,執行rz命令,將ad.ko發送到目標板上。隨后執行動態加載命令:

#insmod ad.ko

這時可以用命令lsmod查看動態加載模塊:

#lsmod

為了正確使用設備驅動程序,必須先創建設備文件,可以用mknod命令來把設備映射為一個設備文件,用戶的應用程序就可以像操作標準文件那樣來訪問硬件設備了:

#mkmod/dev/ad c major minor

c是指字符設備,major是主設備號,minor為次設備號。

至此,完成了SPI設備TLC2543的驅動程序的開發。配合Linux環境下的數據采集程序將其用于高速動車組,這是傳統的單片機數據采集系統無法比擬的。

5 結束語

應用帶SPI接口的串行A/D轉換器占用較少的微處理器I/O資源,硬件連接簡單,軟件易于實現,程序運行效率高。帶有SPI接口的串行A/D轉換器和ARM微處理器的結合可廣泛應用于實現數據采集功能的掌上設備及其他嵌入式的系統,如醫療儀器、通信設備、抄表設備等領域。

[1]劉 淼.嵌入式系統接口設計與Linux驅動程序開發[M].北京航空航天大學出版社,2006.

[2]沃爾瓦諾.嵌入式微計算機系統:實時接口技術[M].李 曦,等譯.北京:機械工業出版社,2003.

[3]魏永明.Linux設備驅動程序[M].2版.北京:中國電力出版社,2002.

[4]孫天澤,袁文菊,張海峰.嵌入式設計及Linux驅動開發指南[M].北京:電子工業出版社,2005.

[5]潘志東,劉增華.串行A/D轉換器TLC2543原理及應用[J].電測與儀表,2001,38(3):40-43.

[6]倪繼利.Linux內核分析及編程[M].北京:電子工業出版社,2006.

[7]馮國進.嵌入式Linux驅動程序設計從入門到精通[M].北京:清華大學出版社,2008.

[8]孫 瓊.嵌入式Linux應用程序開發詳解[M].北京:人民郵電出版社,2007.

[9]羅苑堂,楊宗德.嵌入式Linux應用系統開發實例精講[M].北京:電子工業出版社,2007.

[10]Robbins A.實戰Linux編程精髓[M].楊明軍,譯.北京:中國電力出版社,2005.

[11]宋寶華.Linux設備驅動開發詳解[M].北京:人民郵電出版社,2005.

[12]李勝朝,黃先祥,謝 建.嵌人式Linux系統中字符設備驅動程序的開發[J].計算機工程,2007,33(4):5-8.

猜你喜歡
嵌入式設備系統
諧響應分析在設備減振中的應用
Smartflower POP 一體式光伏系統
工業設計(2022年8期)2022-09-09 07:43:20
WJ-700無人機系統
ZC系列無人機遙感系統
北京測繪(2020年12期)2020-12-29 01:33:58
基于MPU6050簡單控制設備
電子制作(2018年11期)2018-08-04 03:26:08
搭建基于Qt的嵌入式開發平臺
連通與提升系統的最后一塊拼圖 Audiolab 傲立 M-DAC mini
嵌入式軟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
主站蜘蛛池模板: 高潮毛片无遮挡高清视频播放| 中文字幕欧美日韩| 中文字幕有乳无码| a天堂视频| 久久99国产精品成人欧美| 99在线小视频| 亚洲三级a| 国产精品.com| 国产极品嫩模在线观看91| 粉嫩国产白浆在线观看| 欧美亚洲日韩不卡在线在线观看| 欧美日韩国产精品综合| 怡红院美国分院一区二区| 18黑白丝水手服自慰喷水网站| 日本午夜精品一本在线观看| 国产精品第页| 无码有码中文字幕| 久久熟女AV| 制服丝袜 91视频| AV熟女乱| 亚洲精品另类| 四虎永久免费地址| 亚洲视频无码| 国产成人精品亚洲日本对白优播| 久久综合色天堂av| 欧美成人综合在线| 婷婷色狠狠干| 精品日韩亚洲欧美高清a| 国产办公室秘书无码精品| 国产一级在线观看www色| 91麻豆久久久| 高潮爽到爆的喷水女主播视频 | 欧美三级视频网站| 国产成人精品综合| 亚洲中文字幕97久久精品少妇| 欧美一级黄片一区2区| 亚洲色图欧美激情| 亚洲国产成人麻豆精品| 欧洲亚洲欧美国产日本高清| 无码高潮喷水在线观看| 久久精品国产999大香线焦| 中文字幕乱码二三区免费| 欧美日本在线观看| 性视频一区| 国产精品任我爽爆在线播放6080 | 999国产精品| 国产精品久久久精品三级| 国产成人久久综合777777麻豆| 伊人蕉久影院| 一级毛片在线播放| 国产打屁股免费区网站| 国产欧美在线观看视频| 男人的天堂久久精品激情| 欧美日韩国产一级| 免费中文字幕一级毛片| 园内精品自拍视频在线播放| 婷婷综合色| 久久无码av一区二区三区| 波多野结衣国产精品| 欧美一区二区三区欧美日韩亚洲 | 99久久精品无码专区免费| 欧美a在线视频| 国产欧美中文字幕| 国产精品99r8在线观看| 午夜性爽视频男人的天堂| 欧美激情视频一区| 乱人伦中文视频在线观看免费| 久久精品66| 欧美人与性动交a欧美精品| 精品国产乱码久久久久久一区二区| 国产一区成人| 国产男女免费视频| 日韩第九页| 99re热精品视频中文字幕不卡| 三级毛片在线播放| 久热中文字幕在线| 中文字幕久久波多野结衣| 中文字幕色站| 国产高清免费午夜在线视频| 国产丝袜91| 免费人成视网站在线不卡| 亚洲午夜福利在线|