新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 有關(guān)I2C設(shè)計時應(yīng)注意的細節(jié)問題

        有關(guān)I2C設(shè)計時應(yīng)注意的細節(jié)問題

        作者: 時間:2016-11-21 來源:網(wǎng)絡(luò) 收藏
        1,在硬件設(shè)計時,要注意SCL和SDA線要加10K的上拉電阻,因為其端口配置內(nèi)部沒有上拉電阻,要不然兩端口在初始狀態(tài)下為低電平,在軟件操作I2C總線置STA信號時是不會有反應(yīng)的。

        2,要注意檢查下功率控制寄存器PCONP相應(yīng)位,確保該功能模塊是打開的。

        本文引用地址:http://www.104case.com/article/201611/319140.htm

        3 如果根據(jù)I2C狀態(tài)字進行相應(yīng)處理采用中斷方式的話,還應(yīng)中斷的相關(guān)設(shè)置。

        【1】對于LPC21xx,I2C初始化應(yīng)該如下:

        static void BSP_I2C_Init(CPU_INT32U fi2c)
        {
        CPU_INT32U Fpclk = BSP_CPU_PclkFreq();

        //PINSEL0 = (PINSEL0&0xFFFFFF0F) | 0x50; // 設(shè)置I2C控制口有效
        PINSEL0_bit.P0_2 = 1;//設(shè)置I/O口工作模式,使用I2C0口,P0.2,P0.3和UART0的P0.0,P0.1。其余口為GPIO口
        PINSEL0_bit.P0_3 = 1;

        PCONP_bit.PCI2C = 1; //配置PCONP功率模塊使能I2C
        if(fi2c>400000) fi2c = 400000;

        I2SCLH = (Fpclk/fi2c + 1) / 2;//高電平占空比寄存器
        I2SCLL = (Fpclk/fi2c) / 2; //低電平占空比寄存器
        //配置成I2C主模式
        I2CONCLR = STA|SI|AA|STO; //分別為:起始標(biāo)志(STA)|I2C中斷標(biāo)(SI)|應(yīng)答標(biāo)志(AA)|停止標(biāo)志(STO)
        I2CONSET = I2CEN; //I2EN=1,使能I2C功能


        // 設(shè)置I2C中斷允許
        VICIntSelect &= ~(1 << VIC_I2C);// 設(shè)置所有通道為IRQ中斷
        VICVectCntl4 = 0x20|VIC_I2C;// I2C通道分配到IRQ slot 0,即優(yōu)先級最高
        VICVectAddr4 = (CPU_INT32U)I2C_IRQ_ISR_handler; // 設(shè)置I2C中斷向量地址
        VICIntEnable |= (1 << VIC_I2C); // 使能I2C中斷
        }

        注意上面藍色粗體部分,搞錯了就不會進入中斷或者導(dǎo)致其它中斷源進入中斷,VIC_I2C為通道號,細節(jié)參考其用戶手冊。

        【2】啟動I2C總線,代碼如下:

        I2CONCLR = STA|SI|AA; //0x2C; //起始標(biāo)志(STA)|I2C中斷標(biāo)(SI)|應(yīng)答標(biāo)志(AA)
        I2CONSET = I2CEN|STA; //0x60; //I2C接口使能,設(shè)置為主機,并啟動總線
        //I2CONSET = STA; //置位 STA進入I2C主發(fā)送器模式,啟動發(fā)送START脈沖
        while(0==I2C_end); //等待中斷
        if(1==I2C_end) return(1);
        else return(0);

        只有設(shè)置的起始標(biāo)志位,才能啟動I2C總線。

        上面的代碼是參考周立功官網(wǎng)的實驗例程,藍色字體是做的修改。



        評論


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

        關(guān)閉
        主站蜘蛛池模板: 沭阳县| 台前县| 临潭县| 易门县| 葫芦岛市| 甘德县| 诏安县| 两当县| 徐州市| 苍山县| 九龙县| 犍为县| 双牌县| 祥云县| 玛纳斯县| 丰镇市| 远安县| 钟祥市| 巴林右旗| 河北省| 武山县| 敦煌市| 勐海县| 洞头县| 五寨县| 张家界市| 西乌珠穆沁旗| 信宜市| 河东区| 射洪县| 开化县| 贞丰县| 东乌珠穆沁旗| 滦南县| 台山市| 嘉峪关市| 齐齐哈尔市| 马尔康县| 延川县| 河源市| 揭阳市|