国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

查看: 1774|回復(fù): 0
打印 上一主題 下一主題

【教程9】瘋殼·ARM功能手機(jī)-I2C教程

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2022-8-15 13:59:41 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
關(guān)鍵詞: ARM , 功能手機(jī) , I2C , 寄存器 , 教程
ARM功能手機(jī)
——瘋殼·開發(fā)板系列
I2C教程





    圖1

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


   
    圖2



    第二節(jié) I2C

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

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

    2.2.1 I2C控制寄存器

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

    2.2.2 I2C目標(biāo)地址寄存器


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

    2.2.3 I2C接收發(fā)送數(shù)據(jù)緩存與命令寄存器


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

    2.2.4 I2C清除TX_ABRT中斷

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

    2.2.5 I2C使能寄存器


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

    2.2.6 I2C狀態(tài)寄存器


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

    2.2.7 I2C接收FIFO數(shù)目寄存器


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

    2.2.8 I2C發(fā)送異常終止源寄存器


   
    圖10
    15位:當(dāng)主設(shè)備需要發(fā)送數(shù)據(jù)時(shí),卻進(jìn)入讀數(shù)據(jù)狀態(tài);
    14位:當(dāng)發(fā)送數(shù)據(jù)時(shí),從設(shè)備丟失總線;
    13位:當(dāng)從設(shè)備要接收數(shù)據(jù)時(shí),F(xiàn)IFO中已經(jīng)有一些數(shù)據(jù);
    12位:失去仲裁;
    11位:當(dāng)主設(shè)備不可用時(shí),用戶進(jìn)行主設(shè)備的操作;
    10位:重啟不可用,并且主設(shè)備在10位地址模式下發(fā)送讀命令;
    9位:重啟不可用,但是用戶發(fā)送一個(gè)開始字節(jié);
    8位:重啟不可用,但是用戶試圖在高速模式下發(fā)送數(shù)據(jù);
    7位:主設(shè)備已經(jīng)發(fā)送了一個(gè)開始字節(jié),并且開始字節(jié)被確認(rèn);
    6位:主設(shè)備在高速模式下,并且被確認(rèn);
    5位:主設(shè)備控制器廣播之后進(jìn)行讀操作;
    4位:主設(shè)備發(fā)送廣播,但是沒(méi)有從設(shè)備確認(rèn);
    3位:只有主設(shè)備有效,主設(shè)備已經(jīng)發(fā)送地址,并確認(rèn),但是發(fā)送數(shù)據(jù)得不到確認(rèn)信號(hào);
    2位:主設(shè)備使用10位地址模式,10位地址的第二個(gè)字節(jié)沒(méi)有被任何從設(shè)備確認(rèn);
    1位:主設(shè)備使用10位地址模式,10位地址的第一個(gè)字節(jié)沒(méi)有被任何從設(shè)備確認(rèn);
    0位:主設(shè)備使用7位地址模式,但是沒(méi)有被任何從設(shè)備確認(rèn)。

    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)
    啟動(dòng)I2C模塊的時(shí)鐘:CLK_PER_REG |= 0x0020;
    I2C的初始化寄存器配置:
    先關(guān)閉I2C控制器, I2C_ENABLE_REG=0x00;
        設(shè)置為主模式,關(guān)閉從模式,可以重復(fù)開始,速度設(shè)置為快速,地址為7位模式(0x0000000001100101), I2C_ CON _REG =0x0065;
        設(shè)置目標(biāo)設(shè)備地址為0x51, I2C_TAR_REG =0x51;
        打開I2C控制器, I2C_ENABLE_REG=0x01;
        等待控制器準(zhǔn)備好,while( (I2C_STATUS_REG & 0x20) != 0 );
    讀取地址為0x98處的一個(gè)字節(jié),先發(fā)送地址I2C_DATA_CMD_REG = 0x98;等待發(fā)送完畢while((I2C_STATUS_REG&0x0002)==0);發(fā)送讀指令I(lǐng)2C_DATA_CMD_REG = 0x0100; 等待發(fā)送完畢while((I2C_STATUS_REG&0x0004)==0);之后等待數(shù)據(jù)接收完畢while(I2C_RXFLR_REG == 0);讀取接收緩沖區(qū)的數(shù)據(jù)即為接收數(shù)據(jù)rx_data = I2C_DATA_CMD_REG;
    向地址為0x98處寫入一個(gè)字節(jié)0xaa,先發(fā)送地址I2C_DATA_CMD_REG = 0x98;等待發(fā)送完畢while((I2C_STATUS_REG&0x0002)==0);發(fā)送數(shù)據(jù)I2C_DATA_CMD_REG = 0xaa; 等待發(fā)送完畢while((I2C_STATUS_REG&0x0004)==0);




    第三節(jié) I2C實(shí)驗(yàn)

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

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


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

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

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

   
    圖15
    在KEIL中編譯源代碼,點(diǎn)擊DEBUG,然后點(diǎn)擊全速運(yùn)行,在存儲(chǔ)溫度數(shù)據(jù)的變量下方打上斷點(diǎn),當(dāng)程序運(yùn)行到斷點(diǎn)時(shí)就會(huì)停止。將該變量添加進(jìn)變量查看窗口中,可以看到溫度值,如下圖所示:







   
    圖16




如需定制開發(fā),請(qǐng)通過(guò)官網(wǎng)“瘋殼”網(wǎng)頁(yè)底部的“聯(lián)系我們”進(jìn)行聯(lián)系

    文件下載請(qǐng)點(diǎn)擊: I2C教程.pdf (1.53 MB)



本版積分規(guī)則

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號(hào) | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 91香蕉国产线在线观看免费 | 六月婷婷网 | 欧美日韩国产网站 | 精品精品国产yyy5857香蕉 | 日韩国产三级 | 日韩毛片高清在线看 | 欧美高清在线精品一区 | 日韩 视频在线播放 | 日韩在线免费 | 四虎www.| 国产做a爰片久久毛片a | 欧美人与动交片免费播放 | 亚洲视频456 | 久久99热狠狠色精品一区 | 国产一级片观看 | 高清不卡毛片免费观看 | 国产一国产一级毛片视频在线 | 国产在线视频在线观看 | 在线观看色 | 岛国片免费看 | 香蕉视频在线精品 | 日本 在线播放 | 一区二区三区欧美在线 | 黄h视频| 亚洲天堂免费 | 经典三级四虎在线观看 | 一级毛片一级片 | 免费观看理论片毛片 | 亚洲欧美日本韩国综合在线观看 | 视频一区二区在线观看 | 国产精品妖精视频 | 日韩在线不卡一区在线观看 | 久久国产经典视频 | 另类视频区第一页 | 97精品国产高清在线看入口 | 中文字幕日韩一区 | 青青伊人网 | 国产精品成人一区二区1 | 香蕉青草久久成人网 | 精品在线观看免费 | 久久精品国产在热亚洲完整版 |