• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 設計應用 > Cortex-M3 (NXP LPC1788)之IIC控制器

    Cortex-M3 (NXP LPC1788)之IIC控制器

    作者: 時間:2016-11-19 來源:網絡 收藏
    I2C通信協議在上篇文章中進行了介紹,下面對LPC1788的I2C控制器進行分析。要使用I2C模塊,需要配置相應的寄存器,如功率、時鐘、管腳等。以I2C0為例,配置P0.27和P0.28管腳分別為SDA和SCL功能,在PCONP中使能I2C0功率控制,根據PCLK和要使用的I2C的頻率設置SCLH和SCLL。

    I2C模塊可以工作在主發送、主接收、從發送、從接收四種工作模式。開發板上LPC1788工作在主發送模式時發送數據給總線上的外設。工作在主接收模式時接收總線上的外設數據。

    本文引用地址:http://www.czjhyjcfj.com/article/201611/318455.htm

    主發送模式的數據格式

    操作流程如下:

    1,發送一個S起始條件。初始化控制位寄存器,清除STA、STO、SI,然后向I2C控制置位寄存器I2CONSET中置位STA位,一旦總線空閑,I2C邏輯會馬上測試I2C總線并產生一起始條件。如果起始條件得到總線應答,中斷標志SI會置位,通讀取I2C狀態寄存器I2STAT的值,如果為0x08表示可以進入發送數據的操作。

    2,第一個發送的字節包含接收設備的從機地址和數據方向位。方向位(R/W)設置成0,表示進行些操作,將該字節寫入I2C數據寄存器I2CDAT進行發送。發送成功后會產生一個應答,并且SI再次置位,讀取I2STAT中的狀態,如果是0x18表示得到正確的應答,可以進行數據的傳輸。寫入從機地址后,應該清零起始條件中置位的STA位,并且SI位必須在串行傳輸繼續之前復位。

    3,最后進行數據的發送,每個數據發送完成都會有一個應答,且SI置位,如果發送成功讀取的STAT的值為0x28。要注意的是在下一次串行傳輸前必須復位SI。

    4,數據發送完成后,發送一個P停止條件。在I2CONSET中置位STO標志,并且清除STA和SI標志。

    至此,主發送模式結束。

    主接收模式數據格式

    操作流程如下:

    1,發送一個起始條件S。和主發送模式相同。

    2,寫第一個字節數據,操作過程和主發送相同,只需將方向位改成讀,并且正確的應答標志為0x40。

    3,數據接收時需要注意的是,接收的最后一個字節總是非應答,這樣主機就可以告訴從機讀序列已經完成。如果接收到的應答A,則I2CSTAT的值為0x50。接收到非答,則I2CSTAT的值為0x58,。應答或者非應答,通過設置SI位進行控制。

    4,在接收到非應答的狀態標志0x58后,發送一個停止條件。

    我們可以單獨設置主發送和主接收,也可以再主接收或主發送數據傳輸結束后,選擇不發送停止條件P,而是發送重復起始條件,進行主發送和主接收的切換。

    主發送切換到主接收的數據格式

    操作流程如下:

    1,在主發送模式數據傳輸完成后,不發送停止條件。即上面介紹的主發送模式流程的第4步不執行,而是改成重新發送一個起始標志,置位STA。重復起始發送成功后返回 的狀態標志位0x10。

    2,切換成功后即可按主接收步驟中的第二步直接開始執行。

    LPC1788的主工作模式介紹完,具體的程序在下一篇文章再結合從設備給出代碼。



    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 漾濞| 启东市| 台州市| 博野县| 大同县| 元阳县| 普定县| 长岭县| 汪清县| 修文县| 伊春市| 清水河县| 新巴尔虎左旗| 化州市| 西畴县| 万盛区| 大化| 无为县| 清河县| 清原| 成都市| 江达县| 宽甸| 湾仔区| 天津市| 黄浦区| 唐河县| 保康县| 左贡县| 松原市| 高陵县| 苏州市| 新巴尔虎左旗| 松潘县| 西乌珠穆沁旗| 绥芬河市| 水城县| 蚌埠市| 郸城县| 汝州市| 吉隆县|