新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 有關I2C設計時應注意的細節問題

        有關I2C設計時應注意的細節問題

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

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

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

        3 如果根據I2C狀態字進行相應處理采用中斷方式的話,還應中斷的相關設置。

        【1】對于LPC21xx,I2C初始化應該如下:

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

        //PINSEL0 = (PINSEL0&0xFFFFFF0F) | 0x50; // 設置I2C控制口有效
        PINSEL0_bit.P0_2 = 1;//設置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; //分別為:起始標志(STA)|I2C中斷標(SI)|應答標志(AA)|停止標志(STO)
        I2CONSET = I2CEN; //I2EN=1,使能I2C功能


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

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

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

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

        只有設置的起始標志位,才能啟動I2C總線。

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



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 鹤岗市| 崇明县| 双流县| 诸城市| 大田县| 竹溪县| 台南市| 安仁县| 长宁区| 图片| 洪湖市| 林周县| 杭锦旗| 佛冈县| 河源市| 兴仁县| 九龙县| 封开县| 吴川市| 安乡县| 揭东县| 富锦市| 静乐县| 车险| 宜君县| 凤台县| 饶阳县| 古蔺县| 安福县| 高雄县| 龙里县| 武乡县| 日土县| 建瓯市| 敦煌市| 红安县| 丽江市| 图木舒克市| 枣强县| 长海县| 绥滨县|