中文字幕 另类精品,亚洲欧美一区二区蜜桃,日本在线精品视频免费,孩交精品乱子片免费

<sup id="3hn2b"></sup>

    1. <sub id="3hn2b"><ol id="3hn2b"></ol></sub><legend id="3hn2b"></legend>

      1. <xmp id="3hn2b"></xmp>

      2. 新聞中心

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

        MAXQ2000微控制器軟件I2C驅動

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

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

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

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

        i2cdataterm (無符號字符):i2c傳送如何結束。調(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ā)送,沒有得到應答,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評估板的跳接器設置和maxq2000評估板的開關設置在表3和表4中:

        表3:max1169評估板的跳接器設置

        表4. maxq2000評估板(rev b)開關設置 "

        固件
        該實例(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文件中標出(參見附錄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ù)設置為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不會看到停止狀態(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
        }
        }

         


        關鍵詞:

        評論


        相關推薦

        技術專區(qū)

        關閉