<var id="fnfpo"><source id="fnfpo"></source></var>
<rp id="fnfpo"></rp>

<em id="fnfpo"><object id="fnfpo"><input id="fnfpo"></input></object></em>
<em id="fnfpo"><acronym id="fnfpo"></acronym></em>
  • <th id="fnfpo"><track id="fnfpo"></track></th>
  • <progress id="fnfpo"><track id="fnfpo"></track></progress>
  • <tbody id="fnfpo"><pre id="fnfpo"></pre></tbody>

  • x
    x
    查看: 2584|回復: 0
    打印 上一主題 下一主題

    【開發教程11】ARM功能手機-I2C教程

    [復制鏈接]
    跳轉到指定樓層
    樓主
    發表于 2022-6-24 19:09:56 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
    關鍵詞: ARM , 功能手機 , I2C , 開發教程
    I2C教程
    ——瘋殼·開發板系列



       
        圖1

        第一節I2C硬件電路
        將P12與P13配置為I2C的兩個接口即可,P12與P13已通過排針引出,如下圖所示:

      

        圖2



        第二節 I2C

        2.1 I2C介紹
        I2C總線是一個為系統中電路通信提供支持的可編程控制總線,它是一個軟件定義的兩線通信協議。
        兩線I2C串行接口包括一個串行數據線(SDA)和一個串行時鐘線(SCL);
        支持兩種通信速率,標準模式(0~100Kb/s)和快速模式(小于等于400Kb/s);
        時鐘同步;
        32字節的發送接收FIFO;
        主機發送與接收操作;
        7或10位地址,7或10為混合格式發送;
        塊發送模式;
        默認從地址為0x055;
        中斷或者輪詢操作模式;
        可編程的數據線保持時間;

        2.2 寄存器介紹       
            I2C相關的寄存器比較多,所以我們只介紹常用的寄存器,其它的可以參考官方數據手冊AD14580_DS_v3.1.pdf,位于目錄:..\WT開發板\硬件資料。

        2.2.1 I2C控制寄存器

       
        圖3
        15:7位:保留不使用;
        6位:I2C從設備使能位,’0’表示從設備使能,’1’表示從設備不可用,該位不一定要軟件設置,但是要保證如果該位為’0’則該寄存器的第0位也為’0’;
        5位:當作為主設備時,是否發送重啟條件,’0’表示不可以,’1’表示可以;
        4位:作為主設備時,決定以7位地址還是10位地址開始發送,’0’表示7位地址,’1’表示10位地址;
        3位:作為從設備時,決定以7位地址還是10位地址開始發送,’0’表示7位地址,’1’表示10位地址;
        2:1位:I2C通信速度選擇,1表示標準速度(100Kbit/s),2表示快速(400Kbit/s);
        0位:I2C主設備使能,’0’表示主設備不可用,’1’表示主設備使能,要保證如果該位為’1’則該寄存器的第6位也為’1’;

        2.2.2 I2C目標地址寄存器


       
        圖4
        15:12位:保留不使用;
        11位:該位決定軟件是否進行廣播或者開始字節命令,’0’表示忽略第10位GC_OR_START并且正常使用IC_TAR;
        10位:如果第11位設置為’1’,則該位表示控制器是否進行廣播或開始字節命令,’0’表示發送廣播地址,之后只能進行寫操作,如果進行讀操作則導致TX_ABRT置位,控制器一直停留在廣播模式,直到第11位被清除,’1’表示發送開始字節;
        9:0位:這是主設備發送的目標地址,如果發送廣播則該位被忽略,CPU只需要寫一次這些位;注意如果目標地址與從設備地址相同則存在回路,但是FIFO為主從共用,所以完全回路是可行的,只支持單方向的回路,一個主設備不能給自己發送數據只能發送給從設備。

        2.2.3 I2C接收發送數據緩存與命令寄存器


       
        圖5
         15:9位:保留不使用;
            8位:讀寫控制位,作為從設備時不能控制方向,只能作為主設備時使用,’0’表示寫,’1’表示讀;
            7:0位:存儲I2C總線上發送或接收的數據,如果你正在操作該寄存器并且要進行讀操作則該位被忽略,如果你讀該寄存器則該位存儲的是接收到的數據。

        2.2.4 I2C清除TX_ABRT中斷

       
        圖6
          15:1位:保留不使用;
            0位:清除發送異常停止位,讀該位則清除發送異常停止中斷位,和發送異常停止源寄存器位。同時發送FIFO從刷新/復位狀態中釋放出來,可以允許更多寫入。

        2.2.5 I2C使能寄存器


       
        圖7
            15:1位:保留不使用;
            0位:控制器使能位;

        2.2.6 I2C狀態寄存器


       
        圖8
        15:7位:保留不使用;
        6位:判斷從設備是否活動;
        5位:判斷主設備是否活動;
        4位:判斷接收FIFO是否全滿;
        3位:判斷接收FIFO是否為空;
        2位:判斷發送FIFO是否全滿;
        1位:判斷發送FIFO是否為空;
        0位:判斷I2C模塊是否活動。

        2.2.7 I2C接收FIFO數目寄存器

       
        圖9
        15:6位:保留不使用;
        5:0位:接收FIFO可以接收多少字節。

        2.2.8 I2C發送異常終止源寄存器



        圖10
        15位:當主設備需要發送數據時,卻進入讀數據狀態;
        14位:當發送數據時,從設備丟失總線;
        13位:當從設備要接收數據時,FIFO中已經有一些數據;
        12位:失去仲裁;
        11位:當主設備不可用時,用戶進行主設備的操作;
        10位:重啟不可用,并且主設備在10位地址模式下發送讀命令;
        9位:重啟不可用,但是用戶發送一個開始字節;
        8位:重啟不可用,但是用戶試圖在高速模式下發送數據;
        7位:主設備已經發送了一個開始字節,并且開始字節被確認;
        6位:主設備在高速模式下,并且被確認;
        5位:主設備控制器廣播之后進行讀操作;
        4位:主設備發送廣播,但是沒有從設備確認;
        3位:只有主設備有效,主設備已經發送地址,并確認,但是發送數據得不到確認信號;
        2位:主設備使用10位地址模式,10位地址的第二個字節沒有被任何從設備確認;
        1位:主設備使用10位地址模式,10位地址的第一個字節沒有被任何從設備確認;
        0位:主設備使用7位地址模式,但是沒有被任何從設備確認。

        2.3 寄存器配置講解

        #define CLK_PER_REG                (* ( volatile uint16*)0x50000004)
        #define I2C_CON_REG                (* ( volatile uint16*)0x50001300)
        #define I2C_TAR_REG                 (* ( volatile uint16*)0x50001304)
        #define I2C_DATA_CMD_REG           (* ( volatile uint16*)0x50001310)
        #define I2C_CLR_TX_ABRT_REG         (* ( volatile uint16*)0x50001354)
        #define I2C_ENABLE_REG              (* ( volatile uint16*)0x5000136C)
        #define I2C_STATUS_REG              (* ( volatile uint16*)0x50001370)
        #define I2C_RXFLR_REG               (* ( volatile uint16*)0x50001378)
        #define I2C_TX_ABRT_SOURCE_REG     (* ( volatile uint16*)0x50001380)
        啟動I2C模塊的時鐘:CLK_PER_REG |= 0x0020;
        I2C的初始化寄存器配置:
        先關閉I2C控制器, I2C_ENABLE_REG=0x00;
            設置為主模式,關閉從模式,可以重復開始,速度設置為快速,地址為7位模式(0x0000000001100101), I2C_ CON _REG =0x0065;
            設置目標設備地址為0x51, I2C_TAR_REG =0x51;
            打開I2C控制器, I2C_ENABLE_REG=0x01;
            等待控制器準備好,while( (I2C_STATUS_REG & 0x20) != 0 );
        讀取地址為0x98處的一個字節,先發送地址I2C_DATA_CMD_REG = 0x98;等待發送完畢while((I2C_STATUS_REG&0x0002)==0);發送讀指令I2C_DATA_CMD_REG = 0x0100; 等待發送完畢while((I2C_STATUS_REG&0x0004)==0);之后等待數據接收完畢while(I2C_RXFLR_REG == 0);讀取接收緩沖區的數據即為接收數據rx_data = I2C_DATA_CMD_REG;
        向地址為0x98處寫入一個字節0xaa,先發送地址I2C_DATA_CMD_REG = 0x98;等待發送完畢while((I2C_STATUS_REG&0x0002)==0);發送數據I2C_DATA_CMD_REG = 0xaa; 等待發送完畢while((I2C_STATUS_REG&0x0004)==0);




        第三節 I2C實驗

        實驗需要使用的模塊有:手機開發板底板,Jlink調試工具,杜邦線、心率體溫模塊、3.7V鋰電池或Mocro USB線。
        將心率體溫模塊通過杜邦線連接到主控底板上,連接方式如下:
        (1)心率體溫模塊一端主需要使用杜邦線連接心率體溫模塊的3V3、GND、SCL、SDA四個引腳,如下圖所示:

       
        圖11
        (2)手機主控板一端需要使用杜邦線連接J4的2個引腳以及J10的兩個引腳與心率體溫模塊的引腳一一對應,如下圖所示



       
        圖12
        使用JLINK通過杜邦線連接手機藍牙位于手機主控底板,連接方式如下:
        (1)JLINK一端只需要使用杜邦線連接JLINK的SWC、SWD、GND三個引腳,如下圖所示:

       
        圖13
        (2)手機藍牙一端需要使用杜邦線連接上方右側的J3三個引腳,與JLINK的連接引腳一一對應,分別為SWC-->SWCLK、SWD-->SWDIO、GND-->GND,如下圖所示:

       
        圖14
        將JLINK插上電腦的USB接口,連接好之后給手機主控底板供電,詳細的介紹可以參考《如何上電》教程,路徑為:..\WT_Mobile\0.從這里開始\0.開機測試。
        打開I2C實驗的Keil工程i2c_eeprom.uvproj,位于目錄:
        ..\WT_Mobile\1.初級教程\DA14580\5_初級_I2C\projects\target_apps\peripheral_examples\i2c\i2c_eeprom\Keil_5,如下圖所示:

       
        圖15
        在KEIL中編譯源代碼,點擊DEBUG,然后點擊全速運行,在存儲溫度數據的變量下方打上斷點,當程序運行到斷點時就會停止。將該變量添加進變量查看窗口中,可以看到溫度值,如下圖所示:








        圖16



        配套資料:http://www.fengke.club
        套件地址:http://shop115904315.taobao.com/
        文件下載請點擊: I2C教程.pdf (1.53 MB)



    您需要登錄后才可以回帖 登錄 | 立即注冊

    本版積分規則

    關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
    電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
    快速回復 返回頂部 返回列表
    精品一区二区三区自拍图片区_国产成人亚洲精品_亚洲Va欧美va国产综合888_久久亚洲国产精品五月天婷