亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于Linux嵌入式系統(tǒng)的S3C6410和ADS1298R的SPI接口驅(qū)動的實現(xiàn)

        2014-07-29 01:57:27湯沁徐學(xué)軍彭地卓李驥
        中國新通信 2014年1期

        湯沁 徐學(xué)軍 彭地卓 李驥

        【摘要】 本文介紹了高速模數(shù)轉(zhuǎn)換芯片ADS1298R與ARM11微控制器S3C6410利用串行外設(shè)接口(SPI)進(jìn)行數(shù)據(jù)通信的應(yīng)用方案,給出了兩者SPI接口的連接圖和Linux操作系統(tǒng)下驅(qū)動的具體實現(xiàn)方法,最后編寫了應(yīng)用程序進(jìn)行測試,論證了該方法的可行性。ADS1298R和S3C6410基于SPI的串行通信方式為嵌入式高速數(shù)據(jù)采集系統(tǒng)提供了一個解決方案。

        【關(guān)鍵詞】 SPI驅(qū)動 ADS1298R S3C6410 Linux

        SPI總線是一種同步串行外設(shè)接口, MCU通過它可以與各種外圍設(shè)備進(jìn)行數(shù)據(jù)通信[7]。SPI總線只需3~4根數(shù)據(jù)線和控制線即可擴(kuò)展具有SPI接口的各種I/O器件,其硬件功能很強,實現(xiàn)軟件相當(dāng)簡單[1]。SPI為全雙工通信,顯得簡單高效,因而A/D轉(zhuǎn)換器與ARM通過SPI接口相結(jié)合而組成的基于Linux的數(shù)據(jù)采集系統(tǒng)顯得十分有效。

        一、ADS1298R的特性和使用

        ADS1298R是美國德州儀器公司推出的一款低功率,8通道,同步采樣,24位三角積分模數(shù)轉(zhuǎn)換器,此產(chǎn)品具有內(nèi)置的可編程增益放大器(PGA),內(nèi)部基準(zhǔn)和一個板載振蕩器[4]。運行數(shù)據(jù)速率最高可達(dá)32KSPS,時鐘頻率2.048MHz,具有串行外設(shè)接口(SPI),并兼容串口。其引腳定義如圖1所示。

        如圖2所示為ADS1298R的串行接口時序圖,串行時鐘為數(shù)據(jù)的輸入輸出提供了傳輸時序。當(dāng)一次數(shù)據(jù)轉(zhuǎn)換完成后,DRDY變低,表示有數(shù)據(jù)可進(jìn)行傳輸,將片選信號CS拉低,串行時鐘開始工作,DRDY電平在SCLK的第一個時鐘下降沿升高,在SCLK上升沿往外部控制設(shè)備傳數(shù)據(jù),在下降沿從外部控制設(shè)備讀數(shù)據(jù)命令。數(shù)據(jù)傳輸階段CS必須保持低電平,傳輸一組數(shù)據(jù)需要216個串行時鐘周期。

        二、S3C6410概述

        S3C6410是三星公司推出的一款采用RISC架構(gòu)的16/32位微控制器,它基于ARM1176JZF-S內(nèi)核,高效的八級流水線使其貫通率比以前的ARM內(nèi)核提高了40%[6]。最高時鐘頻率可達(dá)667MHz。

        S3C6410含有2通道的SPI接口,可來實現(xiàn)串行數(shù)據(jù)的傳輸。每個SPI通道含有兩個獨立的32位發(fā)送和接收數(shù)據(jù)寄存器和兩個32位移位寄存器,以及兩個64字節(jié)的接收和發(fā)送FIFO,三者在SPI通信中的關(guān)系如圖3所示。

        三、SPI驅(qū)動

        設(shè)備驅(qū)動是從操作系統(tǒng)當(dāng)中提取物理或者虛擬設(shè)備的軟件,是連接硬件與操作系統(tǒng)的橋梁。SPI驅(qū)動程序?qū)儆诹鹘涌隍?qū)動程序,導(dǎo)出標(biāo)準(zhǔn)的流接口函數(shù),由流接口驅(qū)動管理器向應(yīng)用程序提供文件系統(tǒng),應(yīng)用程序通過對文件系統(tǒng)的處理來完成對設(shè)備的操作[2,3]。

        根據(jù)SPI接口連接原理,將ADS1298R和S3C6410的SPI接口引腳按圖4所示的方式進(jìn)行連接。

        為了實現(xiàn)S3C6410與ADS1298R的數(shù)據(jù)通信,編寫了基于嵌入式Linux操作系統(tǒng)下混雜設(shè)備驅(qū)動程序,該SPI驅(qū)動主要由以下幾個函數(shù)構(gòu)成。

        (1)spi_init_function()完成SPI的初始化工作。首先將對應(yīng)I/O口配置成SPI功能模式,然后對S3C6410的SPI寄存器進(jìn)行如下順序的配置。

        ●將SPI傳輸模式(CPOL&CPHA)配置成與ADS1298R一致。

        ●設(shè)置串行時鐘配置寄存器CLK_CFG。

        ●設(shè)置SPI FIFO控制寄存器MODE_CFG。

        ●開Tx或Rx通道。

        ●將片選設(shè)置成手動模式,將NSSOUT設(shè)置成低并開始傳輸或接收數(shù)據(jù)[5]。

        static void spi_init_function(void)

        {······

        CH_CFG = ((0 << 6) | (0 << 5) | (0 << 4) | (0 << 3) | (1 << 2) | (0 << 1) | (0 << 0));

        CLK_CFG = ((0 << 9) | (1 << 8) | (0x4 << 0));

        MODE_CFG = ((0 << 29) | (0 << 19) | (0 << 17) | (1 << 11) | (1 << 5)

        | (0 << 2) | (0 << 1) | (0 << 0));

        SLAVE_SEL = (0x00);

        ······}

        (2)spi_write()用于向ADS1298R傳遞控制命令。S3C6420通過spi_write()函數(shù)向ADS1298R傳遞命令,使其工作在對應(yīng)狀態(tài)。傳數(shù)據(jù)時開發(fā)送通道,并將CS信號拉低,然后將用戶層傳遞過來的命令通過圖3的發(fā)送通道傳送至ADS1298R,ADS1298R在SCLK的下降沿從DIN將數(shù)據(jù)讀入。

        static ssize_t spi_write(struct file *filp,const char __user *buff,size_t count,loff_t *offp)

        {······

        SPI_CS_LOW( );

        for(i=0;i

        writeByte(kbuf[i]);

        SPI_CS_HIGH();

        ······}

        (3)spi_read( )用于讀取經(jīng)AD轉(zhuǎn)換后的數(shù)據(jù)。ADS1298R將轉(zhuǎn)換的數(shù)據(jù)準(zhǔn)備好后,DRDY信號變低,S3C6410便可開接收通道,并拉低CS,然后通過圖3的接收通道接收數(shù)據(jù),ADS1298R在SCLK的上升沿將數(shù)據(jù)從DOUT送出。

        static ssize_t spi_read(struct file *filp, char __user *buff, size_t count, loff_t *offp)

        {······

        SPI_CS_LOW( );

        while(!DRDY);

        for(i=0;i<9;i++)

        tab[i] = readByte( );

        SPI_CS_HIGH( );

        ······}

        四、SPI測試程序

        為了測試驅(qū)動的正確性,編寫了測試應(yīng)用程序?qū)︱?qū)動進(jìn)行測試。為了方便對ADS1298R工作模式和狀態(tài)的控制,我們將對ADS1298R的控制命令放在了應(yīng)用程序里。對ADS1298R的控制主要是對其23個可讀可寫寄存器的配置。用ADS1298R內(nèi)部自帶測試信號進(jìn)行測試。測試程序包括兩部分,第一部分目的是通過傳遞命令方式配置ADS1298R相應(yīng)寄存器,本測試程序?qū)DS1298R的控制命令集為:

        ADS1299RegVal[27]=

        {0x41,0x18,0x85,0x10,0xdc,0x03,0x05,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x0a,0xe3};

        第二部分循環(huán)讀ADS1298R,并將讀到的數(shù)據(jù)以數(shù)據(jù)流的形式存入文件中。

        由以下兩個函數(shù)實現(xiàn):

        read(spi_fd,&data,3);

        fprintf(stream,"%06lx\40",data);

        測試結(jié)果如圖5所示。

        并且我們還用信號源輸出正弦波形進(jìn)行了單通道測試,其中正弦波幅值為100mVpp,頻率為10Hz。測試結(jié)果如圖6所示,由于配置的A/D增益為6,故輸出波形幅值為600mVpp。

        對采集的波形進(jìn)行功率譜分析,結(jié)果如圖7所示。

        五、結(jié)論

        經(jīng)測試本SPI驅(qū)動能實現(xiàn)ADS1298R與S3C6410之間的串行數(shù)據(jù)通信。使用帶SPI接口的A/D與微控制器相連進(jìn)行數(shù)據(jù)采集系統(tǒng)的開發(fā)具有占微控制器I/O資源少,硬件連接方便,軟件開發(fā)易于實現(xiàn)的特點。此SPI驅(qū)動只需稍加修改便可與其他帶SPI接口的A/D相連,具有很好的可移植性。帶SPI接口的A/D與ARM微控制器結(jié)合能很好的應(yīng)用于具有信號采集功能的嵌入式系統(tǒng),如抄表系統(tǒng)、醫(yī)療儀器、監(jiān)控設(shè)備等領(lǐng)域。endprint

        {······

        SPI_CS_LOW( );

        while(!DRDY);

        for(i=0;i<9;i++)

        tab[i] = readByte( );

        SPI_CS_HIGH( );

        ······}

        四、SPI測試程序

        為了測試驅(qū)動的正確性,編寫了測試應(yīng)用程序?qū)︱?qū)動進(jìn)行測試。為了方便對ADS1298R工作模式和狀態(tài)的控制,我們將對ADS1298R的控制命令放在了應(yīng)用程序里。對ADS1298R的控制主要是對其23個可讀可寫寄存器的配置。用ADS1298R內(nèi)部自帶測試信號進(jìn)行測試。測試程序包括兩部分,第一部分目的是通過傳遞命令方式配置ADS1298R相應(yīng)寄存器,本測試程序?qū)DS1298R的控制命令集為:

        ADS1299RegVal[27]=

        {0x41,0x18,0x85,0x10,0xdc,0x03,0x05,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x0a,0xe3};

        第二部分循環(huán)讀ADS1298R,并將讀到的數(shù)據(jù)以數(shù)據(jù)流的形式存入文件中。

        由以下兩個函數(shù)實現(xiàn):

        read(spi_fd,&data,3);

        fprintf(stream,"%06lx\40",data);

        測試結(jié)果如圖5所示。

        并且我們還用信號源輸出正弦波形進(jìn)行了單通道測試,其中正弦波幅值為100mVpp,頻率為10Hz。測試結(jié)果如圖6所示,由于配置的A/D增益為6,故輸出波形幅值為600mVpp。

        對采集的波形進(jìn)行功率譜分析,結(jié)果如圖7所示。

        五、結(jié)論

        經(jīng)測試本SPI驅(qū)動能實現(xiàn)ADS1298R與S3C6410之間的串行數(shù)據(jù)通信。使用帶SPI接口的A/D與微控制器相連進(jìn)行數(shù)據(jù)采集系統(tǒng)的開發(fā)具有占微控制器I/O資源少,硬件連接方便,軟件開發(fā)易于實現(xiàn)的特點。此SPI驅(qū)動只需稍加修改便可與其他帶SPI接口的A/D相連,具有很好的可移植性。帶SPI接口的A/D與ARM微控制器結(jié)合能很好的應(yīng)用于具有信號采集功能的嵌入式系統(tǒng),如抄表系統(tǒng)、醫(yī)療儀器、監(jiān)控設(shè)備等領(lǐng)域。endprint

        {······

        SPI_CS_LOW( );

        while(!DRDY);

        for(i=0;i<9;i++)

        tab[i] = readByte( );

        SPI_CS_HIGH( );

        ······}

        四、SPI測試程序

        為了測試驅(qū)動的正確性,編寫了測試應(yīng)用程序?qū)︱?qū)動進(jìn)行測試。為了方便對ADS1298R工作模式和狀態(tài)的控制,我們將對ADS1298R的控制命令放在了應(yīng)用程序里。對ADS1298R的控制主要是對其23個可讀可寫寄存器的配置。用ADS1298R內(nèi)部自帶測試信號進(jìn)行測試。測試程序包括兩部分,第一部分目的是通過傳遞命令方式配置ADS1298R相應(yīng)寄存器,本測試程序?qū)DS1298R的控制命令集為:

        ADS1299RegVal[27]=

        {0x41,0x18,0x85,0x10,0xdc,0x03,0x05,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x0a,0xe3};

        第二部分循環(huán)讀ADS1298R,并將讀到的數(shù)據(jù)以數(shù)據(jù)流的形式存入文件中。

        由以下兩個函數(shù)實現(xiàn):

        read(spi_fd,&data,3);

        fprintf(stream,"%06lx\40",data);

        測試結(jié)果如圖5所示。

        并且我們還用信號源輸出正弦波形進(jìn)行了單通道測試,其中正弦波幅值為100mVpp,頻率為10Hz。測試結(jié)果如圖6所示,由于配置的A/D增益為6,故輸出波形幅值為600mVpp。

        對采集的波形進(jìn)行功率譜分析,結(jié)果如圖7所示。

        五、結(jié)論

        經(jīng)測試本SPI驅(qū)動能實現(xiàn)ADS1298R與S3C6410之間的串行數(shù)據(jù)通信。使用帶SPI接口的A/D與微控制器相連進(jìn)行數(shù)據(jù)采集系統(tǒng)的開發(fā)具有占微控制器I/O資源少,硬件連接方便,軟件開發(fā)易于實現(xiàn)的特點。此SPI驅(qū)動只需稍加修改便可與其他帶SPI接口的A/D相連,具有很好的可移植性。帶SPI接口的A/D與ARM微控制器結(jié)合能很好的應(yīng)用于具有信號采集功能的嵌入式系統(tǒng),如抄表系統(tǒng)、醫(yī)療儀器、監(jiān)控設(shè)備等領(lǐng)域。endprint

        人妻丝袜中文字幕久久| 久久久久久好爽爽久久| 好爽…又高潮了毛片免费看| 日本岛国精品中文字幕| 色男色女午夜福利影院| 无码国产精品一区二区免费式芒果 | 丝袜人妻中文字幕首页| 国产激情久久久久久熟女老人| 亚洲狠狠婷婷综合久久久久图片| 999国产精品视频| 蜜桃在线观看免费高清| av熟妇一区二区三区| 免费观看又色又爽又湿的视频| 一区二区日韩国产精品| 国产精品久久夜伦鲁鲁| 亚洲综合av大全色婷婷| 亚洲综合精品伊人久久| 国产九色AV刺激露脸对白| 美女射精视频在线观看| 妺妺窝人体色www婷婷| 亚洲av无码久久寂寞少妇| 久久精品国产亚洲AV香蕉吃奶| 亚洲免费在线视频播放| 97人伦色伦成人免费视频| 国产亚洲日韩欧美一区二区三区| 激情内射亚洲一区二区| 日韩亚洲一区二区三区四区 | 特级毛片a级毛片免费播放| 中文字幕亚洲综合久久| 亚洲国产一区二区三区精品| 亚洲av高清在线一区二区三区 | 青青草手机在线免费观看视频| 天天做天天爱天天综合网2021| 国产成人77亚洲精品www| 91久久国产精品综合| 欧美成人国产精品高潮| 国产精品后入内射日本在线观看| 国产一级片内射在线视频| 人妻少妇不满足中文字幕 | 国产让女高潮的av毛片| 国产熟女露脸大叫高潮|