• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      S3C2440A外擴AD7705設(shè)備驅(qū)動設(shè)計與實現(xiàn)

      2012-10-31 11:21:06干開峰汪濟洲
      關(guān)鍵詞:外設(shè)驅(qū)動程序內(nèi)核

      干開峰 王 俊 汪濟洲

      (合肥學(xué)院機器視覺與智能控制技術(shù)重點實驗室,合肥 230601)

      S3C2440A外擴AD7705設(shè)備驅(qū)動設(shè)計與實現(xiàn)

      干開峰 王 俊 汪濟洲

      (合肥學(xué)院機器視覺與智能控制技術(shù)重點實驗室,合肥 230601)

      研究微處理器S3C2440A利用串行外設(shè)接口(SPI)外擴數(shù)模轉(zhuǎn)換器AD7705的應(yīng)用,以嵌入式 Linux操作系統(tǒng)構(gòu)建開發(fā)平臺,給出了 AD7705和S3C2440A的硬件連接以及AD7705驅(qū)動的實現(xiàn)方法,為數(shù)據(jù)采集的嵌入式設(shè)備的驅(qū)動開發(fā)提供了有效的實現(xiàn)方案。

      微處理器;數(shù)模轉(zhuǎn)換器;SPI;嵌入式Linux;驅(qū)動程序

      SPI(Serial Peripheral Interface—串行外設(shè)接口)總線系統(tǒng)是一種同步串行外設(shè)接口,它可以使MCU與各種外圍設(shè)備以串行方式進行通信以交換信息。SPI是一種高速的,全雙工,同步的通信總線,只需3~4根數(shù)據(jù)線和控制線即可擴展具有SPI接口的各種I/O器件,數(shù)據(jù)傳輸速度比I2C總線快,實現(xiàn)軟件相當簡單[1]。串行A/D轉(zhuǎn)換器具有體積小、功耗低、轉(zhuǎn)換速度快、精度高等優(yōu)點,串行接口的特點使其與微控制器直接相連,而S3C2440A芯片集成了SPI通信協(xié)議,被設(shè)計應(yīng)用于手持設(shè)備以及各種嵌入式集成系統(tǒng),將上述兩種實用的芯片利用SPI總線技術(shù)相結(jié)合來實現(xiàn)數(shù)據(jù)采集是可行的。

      1 主要構(gòu)成器件

      1.1 數(shù)據(jù)采集芯片AD7705

      AD7705是美國模擬器件公司推出的一款高速低功耗16位A/D轉(zhuǎn)換器,該器件可以接受直接來自傳感器的低電平的輸入信號,然后產(chǎn)生串行的數(shù)字輸出,利用Σ-Δ轉(zhuǎn)換技術(shù)實現(xiàn)16位無丟失代碼性能,非線性度為0.003%。AD7705具有2個全差分輸入通道,可編程增益為1~128,三線串行接口,具有模擬輸入端緩沖器。AD7705工作電壓為2.7~3.3V或4.75~5.25V,低功耗,3V電壓時,最大功耗為1mW,等待電流的最大值為8μA。AD7705還包括自校準和系統(tǒng)校準選項,以消除器件本身或系統(tǒng)的增益和偏移誤差[2]。

      AD7705芯片內(nèi)部具有8個寄存器,對芯片的操作必須先從寫通信寄存器開始。當上電或復(fù)位后,芯片的等待指令數(shù)據(jù)即被寫入通信寄存器中。

      AD7705可以直接與MCU進行互聯(lián),用到的數(shù)據(jù)線有片選(CS)、串行時鐘輸入(SCLK)、指令或數(shù)據(jù)輸入 (DIN)以及轉(zhuǎn)換結(jié)果輸出(DOUT)等。 只有在狀態(tài)信號(DRDY)指示輸出數(shù)據(jù)寄存器的數(shù)據(jù)準備就緒時,MCU才可以讀取A/D轉(zhuǎn)換的數(shù)據(jù)結(jié)果。

      1.2 主控制器芯片S3C2440A

      三星公司推出的16/32位RISC微處理器S3C2440A,主頻為 400MHz,最高可達 533MHz。S3C2440A采用了ARM920T內(nèi)核,實現(xiàn)了MMU、AMBA BUS和Harvard高速緩沖體系結(jié)構(gòu),該結(jié)構(gòu)具有獨立的16kb指令Cache和16kb數(shù)據(jù)Cache,每個都是由具有8個字長的行組成。S3C2440A通過提供一套完整的通用系統(tǒng)外設(shè),不需配置額外的組件,可減少整體系統(tǒng)成本[3]。S3C2440A具有低功耗、簡單且全靜態(tài)設(shè)計的特點,特別適合于對成本和功率敏感型的系統(tǒng)應(yīng)用。

      S3C2440A芯片內(nèi)有2個SPI口,可以實現(xiàn)和外設(shè)進行串行數(shù)據(jù)傳輸。每個SPI接口各有2個移位寄存器分別負責接收和發(fā)送數(shù)據(jù)[4]。在傳送數(shù)據(jù)期間,傳送數(shù)據(jù)的頻率可由相應(yīng)的控制寄存器來設(shè)定。在數(shù)據(jù)傳輸時,一個SPI系統(tǒng)作為“主機”控制數(shù)據(jù)流,其他 SPI作為“從機”,主機控制數(shù)據(jù)的輸入和輸出。

      S3C2440A片內(nèi)SPI接口具有如下特點:

      (1)兼容 SPI協(xié)議 (ver2.11);

      (2)發(fā)送和接收具有2×8位的移位寄存器;

      (3)有輪詢、中斷和 DMA三種傳送模式。

      2 硬件接口設(shè)計

      S3C2440A的SPI口包括2條數(shù)據(jù)線及 2條控制線(見表 1)。

      表1 SPI接口

      作者采用 SPIMISO0,SPIMOSI0,SPICLK0 作為SPI通信信號,利用GPIO口作為AD7705的片選信號。圖1為S3C2440A與AD7705的接口電路圖。

      圖1 AD7705和S3C2440A連接圖

      3 設(shè)備驅(qū)動程序?qū)崿F(xiàn)

      設(shè)備驅(qū)動程序是操作系統(tǒng)內(nèi)核和硬件設(shè)備之間的接口,為應(yīng)用程序屏蔽了硬件的細節(jié),對于應(yīng)用程序而言,硬件設(shè)備只是一個設(shè)備文件,應(yīng)用程序可以象操作普通文件一樣,通過對設(shè)備文件的打開、讀寫和關(guān)閉等操作,控制底層的具體硬件設(shè)備。在嵌入式Linux操作系統(tǒng)下有三類主要的設(shè)備文件類型,即字符設(shè)備、塊設(shè)備和網(wǎng)絡(luò)設(shè)備。AD7705芯片屬于字符設(shè)備類(char device)。

      3.1 設(shè)備初始化函數(shù)

      使用一個設(shè)備之前首先要對其進行初始化,本系統(tǒng)主要完成AD7705設(shè)備的初始化和S3C2440A的SPI接口初始化。AD7705初始化函數(shù):ad7705_init(void),主要完成對AD7705的PIO口進行初始化設(shè)置,并對SPI的工作方式以及各控制寄存器和模式寄存器參數(shù)進行配置。

      對S3C2440A的SPI接口初始化函數(shù):spi_init(void),主要完成設(shè)置SPI工作方式,并實現(xiàn)控制寄存器SPCON、波特率SPPRE和GPIO口的設(shè)置等。

      由于在嵌入式Linux操作系統(tǒng)下不允許對設(shè)備的物理地址直接進行訪問,必須轉(zhuǎn)換為虛擬地址后才能訪問,故定義devp=kmalloc(sizeof(structadc_dev),GFP_KERNEL),并進行動態(tài)分配內(nèi)存:memset(devp,0,sizeof(struct adc_dev))。利用函數(shù) int register_chrdev_region(dev_t first,unsigned int count,char*name)將設(shè)備驅(qū)動程序向嵌入式Linux內(nèi)核注冊,這樣基本完成了設(shè)備驅(qū)動的初始化函數(shù)spi_adc_init(void)。

      3.2 設(shè)備操作實現(xiàn)函數(shù)

      嵌入式Linux內(nèi)核是通過file_operations結(jié)構(gòu)體來組織對設(shè)備操作的具體實現(xiàn)函數(shù),結(jié)構(gòu)體中的成員幾乎全是函數(shù)指針,包含了驅(qū)動程序提供給應(yīng)用程序訪問硬件設(shè)備的各種方法,每個成員都對應(yīng)一個系統(tǒng)調(diào)用,當用戶對設(shè)備文件進行操作時,系統(tǒng)調(diào)用通過設(shè)備文件的主設(shè)備號找到相應(yīng)設(shè)備的驅(qū)動程序,然后找到file_operations結(jié)構(gòu)體中相應(yīng)的函數(shù)指針[5]。

      本系統(tǒng)需要對SPI端口進行打開、關(guān)閉、接收、發(fā)送和傳輸數(shù)據(jù)操作,定義 file_operations結(jié)構(gòu)體如下:

      設(shè)備操作中最為核心部分的是A/D數(shù)據(jù)轉(zhuǎn)換的功能實現(xiàn),函數(shù)定義為:ad_convert(void),首先設(shè)置寄存器為發(fā)送狀態(tài),然后采用對SPI接口輪詢方式完成數(shù)據(jù)轉(zhuǎn)換和接受。

      其中spi_tx_data(unsigned char data)為數(shù)據(jù)傳輸函數(shù)。

      AD7705芯片驅(qū)動的工作流程如圖2所示。

      圖2 驅(qū)動設(shè)備工作流程

      3.3 設(shè)備注銷函數(shù)

      設(shè)備注銷函數(shù)spi_adc_exit(void)與設(shè)備初始化函數(shù)spi_adc_init(void)相對應(yīng),主要完成內(nèi)存空間釋放等操作,核心部分由字符設(shè)備注銷函數(shù)unregister_chrdev_region (dev_t first,unsigned int count)組成,該函數(shù)完成驅(qū)動程序向嵌入式Linux內(nèi)核的注銷,當設(shè)備驅(qū)動程序被注銷后,內(nèi)核會將之前所分配的設(shè)備號收回[6]。

      3.4 程序加載與內(nèi)核編譯

      完成驅(qū)動程序的編寫后,需要將完成的驅(qū)動程序spi_adc.c文件加入嵌入式Linux內(nèi)核并編譯生成新的kernel文件。

      首先將spi_adc.c復(fù)制到嵌入式Linux內(nèi)核源代碼的/linux2.6.30/driver/char目錄下,修改Kconfig和Makefile文件。

      Makefile文件添加代碼:

      Kconfig文件中添加代碼:

      完成之后在linux2.6.30根目錄執(zhí)行makemenuconfig,選擇AD7705驅(qū)動程序如下所示:

      選中要配置的選項,此時按下“Y”鍵,將此選項編譯進內(nèi)核[7]。

      最后,執(zhí)行make命令,生成zImage文件下載到目標板上執(zhí)行。

      至此,完成了SPI設(shè)備AD7705的驅(qū)動程序開發(fā),將其用于工業(yè)現(xiàn)場數(shù)據(jù)采集,滿足數(shù)據(jù)高精度和高速采集需求。

      4 結(jié) 論

      基于S3C2440A外擴帶 SPI接口的串行A/D設(shè)備,硬件連接簡單,軟件易于實現(xiàn),程序運行效率高,可推廣到其他外設(shè)設(shè)備。該方案的實現(xiàn)可廣泛應(yīng)用于數(shù)據(jù)采集終端設(shè)備、醫(yī)療儀表以及其他嵌入式應(yīng)用系統(tǒng),具有較高的工程應(yīng)用價值。

      [1]崔微,秦征宇.基于ARMLinux的SPI驅(qū)動實現(xiàn)[J].重慶科技學(xué)院學(xué)報:自然科學(xué)版,2009,11(4):143-147.

      [2]閆瑞杰,李海香,郝瑞霞.基于ATmega16的 AD7705多通道模擬量采集系統(tǒng)設(shè)計 [J].化工自動化及儀表,2011(4):466-468,487.

      [3]吳華,謝禮瑩,徐澤宇.基于ARM9的紅外熱像儀設(shè)計與實現(xiàn)[J].計算機工程,2010(10):234-236.

      [4]李琦,賀明,董利民,等.基于ARM嵌入式系統(tǒng)的SPI驅(qū)動程序設(shè)計[J].微型機與應(yīng)用,2011(5):5-8.

      [5]李勝朝,黃先祥,謝建.嵌入式 Linux系統(tǒng)中字符設(shè)備驅(qū)動程序的開發(fā)[J].計算機工程,2007,33(4):5-8.

      [6]李忠良,陳衛(wèi)兵,鄒豪杰,等.嵌入式 Linux下 AD7714與SPI接口及驅(qū)動的實現(xiàn) [J].儀表技術(shù)與傳感器,2011(4):42-44,62.

      [7]王興杰,李允,江浩,等.基于Linux的嵌入式交叉開發(fā)技術(shù)[J].計算機應(yīng)用研究,2008(1):206-208,214.

      Abstract:The application that the microprocessor(S3C2440A)uses SPI to expand AD7705 is studied,constructing the development platform by the embedded Linux operating system,giving the hardware connection diagram of AD7705 and S3C2440A and the realization of the AD7705 driver.It provides a solution for the embedded devices drive in data acquisition,having a high value of engineering application.

      Key words:AD7705;S3C2440A;SPI;Embedded Linux;Driver

      Design and Implementation of the Expansion AD7705 Device Driver Based on S3C2440A

      GAN Kaifeng WANG Jun WANG Jizhou
      (Key Laboratory of Machine Vision and Intelligence Control Technology of Hefei University,Hefei 230601)

      TP391

      A

      1673-1980(2012)05-0146-04

      2012-06-23

      安徽省高校省級自然科學(xué)研究重點項目(KJ2010A292);安徽省高校省級自然科學(xué)研究一般項目(KJ2012B151)

      干開峰(1974-),男,安徽和縣人,實驗師,研究方向為嵌入式系統(tǒng)。

      猜你喜歡
      外設(shè)驅(qū)動程序內(nèi)核
      萬物皆可IP的時代,我們當夯實的IP內(nèi)核是什么?
      強化『高新』內(nèi)核 打造農(nóng)業(yè)『硅谷』
      基于嵌入式Linux內(nèi)核的自恢復(fù)設(shè)計
      Linux內(nèi)核mmap保護機制研究
      Microchip推出具備雙ADC外設(shè)的全新器件,擴展其低成本8位PIC?單片機產(chǎn)品線
      貼身呵護 必不可少的PSP外設(shè)
      外設(shè)天地行情
      外設(shè)天地行情
      驅(qū)動程序更新與推薦
      驅(qū)動程序更新與推薦
      乐东| 莱芜市| 泉州市| 老河口市| 溆浦县| 万州区| 容城县| 固安县| 威宁| 重庆市| 兴和县| 安宁市| 兴义市| 南川市| 濉溪县| 庐江县| 嘉定区| 海安县| 长宁区| 阿鲁科尔沁旗| 攀枝花市| 新邵县| 西城区| 普兰店市| 庐江县| 聂荣县| 沙坪坝区| 陈巴尔虎旗| 蕲春县| 肥西县| 泊头市| 平谷区| 玉屏| 溆浦县| 万盛区| 平安县| 偃师市| 阳高县| 鲜城| 自贡市| 惠州市|