在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > MAXQ2000微控制器軟件I2C驅(qū)動

            MAXQ2000微控制器軟件I2C驅(qū)動

            ——
            作者: 時間:2007-01-26 來源:《Maxim公司》 收藏
             注釋:表1中的最后3個格式顯示了i2csend()怎樣向i2c總線上的同一個器件連續(xù)發(fā)送數(shù)據(jù)。

            如果尋址器件每一字節(jié)作出應(yīng)答,i2csend()函數(shù)返回一個等于i2c_xmit_ok的數(shù)值(無符號字符類型),如果尋址器件每字節(jié)沒有應(yīng)答,返回值則等于i2c_xmit_failed。當(dāng)一個字節(jié)沒有得到應(yīng)答時,函數(shù)將立即返回。

            i2crecv()
            該函數(shù)使maxq2000能夠使用軟件i2c驅(qū)動從器件接收數(shù)據(jù)。i2crecv()函數(shù)需要以下4個參數(shù)(均為全局變量)來初始化:

            i2cdata (無符號字符 *):存儲接收數(shù)據(jù)陣列的第一個字節(jié)指針。
            i2cdatalen (無符號整數(shù)):從i2c總線上接收到的字節(jié)數(shù)(不包括器件地址)。
            i2cdataaddr (無符號字符):將要接收數(shù)據(jù)的器件地址。注意,如果該變量設(shè)置為0,將不發(fā)送地址,接收i2c數(shù)據(jù)。

            i2cdataterm (無符號字符):i2c傳送如何結(jié)束。調(diào)用i2crecv(): i2c_term_none、 i2c_term_ack或者i2c_term_nack_and_stop時,該變量可以取三個值。
            在i2c總線上從器件接收數(shù)據(jù)的格式取決于4個全局變量的取值。表2列出了這些全局變量不同取值時的i2c命令格式。
            表2. 禁用時鐘擴展,i2crecv()發(fā)送的i2c命令

            注釋:表2中的最后3個格式顯示了i2crecv()怎樣從i2c總線上的同一個器件連續(xù)接收數(shù)據(jù)。

            如果地址作為i2c命令的一部分進行發(fā)送,沒有得到應(yīng)答,i2crecv()函數(shù)返回一個等于i2c_xmit_failed的數(shù)值(無符號字符),否則,返回i2c_xmit_ok。


            帶有時鐘擴展的maxqi2c庫使用實例
            以下實例顯示了怎樣利用maxqi2c庫從max1169 adc接收16位采樣,由maxq的rs-232端口,將這些數(shù)據(jù)傳送至pc。
            原理
            采用max1169 adc評估板和maxq2000評估板(rev b)實現(xiàn)了該實例。圖1顯示了兩塊評估板的連接。maxq2000 i/o端口的引腳0和引腳1 (分別在j2-30和j2-28)用作i2c總線上的主機sda和scl線。


            圖1.max1169評估板和maxq2000評估板(rev b)連接原理圖,將由maxqi2c庫使用

            注釋:maxq2000評估板上的maxq2000高頻晶振(y1)以20mhz晶振替代。max1169評估板的跳接器設(shè)置和maxq2000評估板的開關(guān)設(shè)置在表3和表4中:

            表3:max1169評估板的跳接器設(shè)置

            表4. maxq2000評估板(rev b)開關(guān)設(shè)置 "

            固件
            該實例(max1169.c)的固件文件在附錄a中給出。完整的工程資料可以在maxim maxq2000網(wǎng)頁下載,采用maxq iar嵌入式平臺編譯。該實例中,maxqi2c庫的用戶定義代碼(在maxqi2c.h文件的開始)與清單1的源代碼完全相同。

            max1169.c文件包括兩個頭文件:iomaxq200x.h和maxqi2c.h。注意,實例中的iomaxq200x.h文件將忽略maxq包含路徑iar嵌入式平臺中的iomaxq200x.h文件。iomaxq200x.h文件為maxqi2c庫所需的每個端口引腳進行定義。包含了maxqi2c.h文件,以支持固件調(diào)用maxqi2c庫函數(shù)。

            固件分成5步,在max1169.c文件中標(biāo)出(參見附錄a)。

            第1步初始化uart0,以19200bps進行異步通信。注意,如果maxq2000系統(tǒng)時鐘不是20mhz,必須修改寄存器pr0的分配以獲得所需的波特率。

            第2步調(diào)用i2cinit()函數(shù),以初始化i2c總線maxq2000所使用的引腳。

            第3步初始化參數(shù),調(diào)用i2crecv()函數(shù)。參數(shù)經(jīng)過初始化,按照下面的格式傳送i2c命令:


            [s] [addr] [r] [a] [clock stretch] [data0] [a] [data1] [a (termination)]
            第4步將地址參數(shù)設(shè)置為0。使i2crecv()函數(shù)按照下面的格式傳送i2c命令:

            [clock stretch] [data0] [a] [data1] [a (termination)]
            第5步是周期不確定的循環(huán)。該循環(huán)調(diào)用i2crecv() (按照第4步定義的格式),從max1169接收一個16位采樣。由uart0將該16位采樣傳送(msb在前)至pc。由于匹配參數(shù)i2cdataterm總是等于i2c_term_ack,循環(huán)的周期不確定,max1169不會看到停止?fàn)顟B(tài)。
            附錄a: max1169.c

            /*
            * demo of maxqi2c software i2c driver
            * (uses evkits for the max1169 and maxq2000)
            *
            * by: paul holden - maxim integrated products
            *
            *
            * desc: test program for the maxqi2c.c/maxqi2c.h i2c
            * driver for the maxq2000. the program reads
            * 16-bit samples from the max1169 (running in
            * continuous conversion mode) and transmits them
            * using the uart0 port.
            *
            * note - the following code assumes the maxq2000 has
            * a fsysclk=20mhz.
            */

            #include "iomaxq200x.h"
            #include "maxqi2c.h"

            void main()
            {
            unsigned char data[2];

            // 1. init uart0
            pd7_bit.bit0 = 1; // set tx0 pin as output
            scon0 = 0x42;
            smd0 = 0x02;
            pr0 = 0x07dd; // 19200bps

            // 2. init bit-banged i2c port
            i2cinit();

            // 3. send initial i2c request
            // [s] [addr+r] [a] [clock_stretch] [data0] [a] [data1] [a (termination)]
            i2cdata = (unsigned char *)(&data); // cast needed!
            i2cdataaddr = 0x7e;
            i2cdatalen = 0x0002;
            i2cdataterm = i2c_term_ack;
            i2crecv();

            // 4. init continuous conversion
            // [clock_stretch] [data0] [a] [data1] [a (termination)]
            i2cdataaddr = 0x00;

            // 5. receive a 16-bit sample and transfer it to the uart0 port
            // one byte at a time. repeat forever...
            while (1)
            {
            i2crecv();

            while(!scon0_bit.ti); // wait for uart0 buffer to be empty
            scon0_bit.ti = 0; // reset ti flag
            sbuf0 = data[0]; // send data byte 0
            while(!scon0_bit.ti); // wait for uart0 buffer to be empty
            scon0_bit.ti = 0; // reset ti flag
            sbuf0 = data[1]; // send data byte 1
            }
            }

             


            關(guān)鍵詞:

            評論


            相關(guān)推薦

            技術(shù)專區(qū)

            關(guān)閉