英創EM9160 ARM9工業主板具有豐富的GPIO資源,通過GPIO來實現SPI,I2C的數據傳輸,具有使用非常靈活的優點,同時最高波特率還可達到1Mbps以上。I2C在智能終端中的應用非常普遍,如I2C總線時鐘芯片,I2C總線存貯器等。之前已對I2C總線操作鐵電存貯器有過說明,相關文章請參考《工控主板支持鐵電存儲器的簡易方案》。英創公司的EM9160工業主板的高性價比與高可靠性,使其在智能終端中的應用中越來越具優勢。為了更進一步說明EM9160工業主板使用GPIO來摸擬I2C總線的應用,本文對具有自動溫度補償的實時鐘RX8025的操作為例來說明。對于I2C總來來說,最重要的是同步時鐘與數據之間的時間關系,為了便于用戶直接使用,英創公司將GPIO摸擬I2C的操作過程進行了封裝,提供最簡潔的函數作為接口,被定義在I2C的頭文件GPIO_I2C.h中,如下所示:
// 初始化I2C總線,主要是設置所使用的GPIO的輸出狀態
int I2C_Init ( );
// 通過I2C寫數據
// 輸入參數
// uDevAddr I2C器件的物理地址
// uRegIdx 要操作的I2C器件內部的寄存器地址
// abyte 要寫入到I2C的數據
// 返回值:>=0 操作成功
// =-1 操作失敗
int I2C_ByteWrite(UCHAR uDevAddr, UCHAR uRegIdx, UCHAR abyte);
// 通過I2C讀取數據
// 輸入參數
// uDevAddr I2C器件的物理地址
// uRegIdx 要操作的I2C器件內部的寄存器地址
// pBuf 所讀取的數據的輸出BUFF
// DataLen 要讀數據的個數
// 返回值:>=0 操作成功 即讀取出來的有效數據
// =-1 操作失敗
int I2C_ByteRead(UCHAR uDevAddr, UCHAR uRegIdx, UCHAR* pBuf, int DataLen);
實現I2C通訊過程控制的源代碼在GPIO_I2C.cpp中,同時在該文件中定義了I2C總線能夠使用的引腳資源及I2C總線SCL、SDA所使用的信號定義:
#define GPIO0 0x01
#define GPIO1 0x02
#define GPIO2 0x04
#define GPIO3 0x08
#define GPIO4 0x10
#define GPIO5 0x20
#define GPIO6 0x40
#define GPIO7 0x80
#define GPIO8 0x100
#define GPIO9 0x200
#define GPIO10 0x400
#define GPIO11 0x800
#define GPIO12 0x1000
#define GPIO13 0x2000
#define GPIO14 0x4000
#define GPIO15 0x8000
#define SCL GPIO6 // GPIO6 被定義為I2C時鐘信號線
#define SDA GPIO7 // GPIO7 被定義為I2C數據線
在使用EM9160工業主板的GPIO來實現I2C總線通訊時,同步時鐘能穩定地工作在250KHz。要注意I2C的兩個信號線,分別為同步時鐘信號線SCL與雙向通訊數據線SDA,這兩條信號線所使用的GPIO被定義在GPIO_I2C.CPP文件中,如上面所示。在使用時根據實際情況,只需重新定義SCL和SDA信號所使用的GPIO即可。下面是調用GPIO_I2C中的操作函數實現時實鐘RX8025操作的調用方法:
// 時鐘寄存器數據讀取
int RTC_ByteRead( unsigned char REG_Addr , unsigned char *pBuf , int iLen)
{
UCHAR cRByte;
int i1 ;
cRByte = REG_Addr<<4; // 根據RX8025的要求,寄存器地址放在高4位
i1 = I2C_ByteRead( RX8025_ADDR , cRByte , pBuf , iLen );
return i1;
}
// 時鐘寄存器數據設置
int RTC_ByteWrite( unsigned char REG_Addr, unsigned char Value )
{
UCHAR cRByte;
int i1;
cRByte = REG_Addr<<4;
i1 = I2C_ByteWrite( RX8025_ADDR , cRByte , Value );
if( i1 == -1 )
return -1;
return 1;
}
再次調用以上兩個實時鐘讀寫操作函數則可輕實現現對RX8025的操作,如下:
// 只讀取控制寄存器2
i1 = RTC_ByteRead ( Reg_Contor2 , &cTmp , 1 );
// 從秒地址開始將年、月、日、時、分、秒、星期的數據一次性讀出
i1 = RTC_ByteRead( Reg_Second , cTmp , 7 );
// 設置時間寄存器“年”為10年
i1 = RTC_ByteWrite( Reg_Year , 0x10 );
對于I2C總線協議,請參考相關的參考資料。英創公司提供的GPIO摸擬I2C總線的程序適用于英創公司所有的嵌入式主板,感興趣的客戶可向英創索要相關源代碼。
-
嵌入式主板
+關注
關注
7文章
6086瀏覽量
35613
發布評論請先 登錄
相關推薦
工業主板產品線的多樣性與應用
![<b class='flag-5'>工業主板</b>產品線的多樣性與應用](https://file1.elecfans.com/web2/M00/EB/A1/wKgZomZe5fWAXs4EAABHp9zbA6E074.png)
![](https://file1.elecfans.com/web3/M00/01/E0/wKgZPGdZOTiAV5D1AAaoaSnEsuI255.png)
工業主板在汽車制造中的應用
工業主板的類型概述
工業主板在服裝紡織瑕疵檢測中的應用
![<b class='flag-5'>工業主板</b>在服裝紡織瑕疵檢測中的應用](https://file1.elecfans.com/web2/M00/07/38/wKgaombj3NqALZyBAAp_M2Qjms4706.png)
聚徽-工業主板供電系統用料情況
工業主板Mini-ITX、MicroATX、UTX,研華工控機主板怎么選?
![<b class='flag-5'>工業主板</b>Mini-ITX、MicroATX、UTX,研華工控機<b class='flag-5'>主板</b>怎么選?](https://file1.elecfans.com/web2/M00/00/91/wKgZomawOIqAZlNcAAO2CTfEnWw343.jpg)
工業主板在工業電機上的作用
![<b class='flag-5'>工業主板</b>在<b class='flag-5'>工業</b>電機上的作用](https://file1.elecfans.com/web2/M00/F5/E8/wKgaomZ-JpOAHUtmAARBSBd_IQ0670.png)
評論