1 簡介
1.1 LPC1752及AT24C08C簡介
LPC1752是NXP推出的一款Cortex M3的芯片,最高運行頻率可達80M
AT24C08C是Atmel的一款I2C串行EEPROM,代替原來的型號AT24C08B及AT24C08A。共有8K(1024*8 bit)、1024字節(jié)的存儲單元。可進行1百萬次的寫操作,數(shù)據(jù)可保存100年。
1.2 連接方式
AT24C08C是通過LPC1752的I2C2連接的,連接圖如下:
圖1 LPC1752連接圖
1.3 AT24C08C設(shè)備地址
The 8K EEPROM only uses the A2 device address bit with the next twobits (P1, P0) being for memory page addressing. The A2 bit must compare to itscorresponding hardwired input pin. The A1 and A0 pins are not connected.
根據(jù)連接圖可得知AT24C08的地址為0xA0。
圖2 AT24C08CDevice Address
1.4 I2C運行時鐘頻率
主機模式下必須通過對I2SCLH和I2SCLL寄存器進行設(shè)置來選擇合適的總線速率和占空比。I2SCLH定義SCL高電平所保持的PCLK_I2C周期數(shù),I2SCLL定義SCL低電平的PCLK_I2C周期數(shù)。位頻率由下面的公式得出(PCLK_I2C是外圍總線APB的頻率):
選用的I2SCLL和I2SCLH值必須確保得出的總線速率在I2C總線速率的范圍之內(nèi)。I2SCLL和I2SLH的值都必須大于或等于4。表1給出了根據(jù)PCLK_I2C頻率和I2SCLL和I2SCLH值計算出來的I2C總線速率的示例。
表1 I2C時鐘速率的實例
2 函數(shù)介紹
2.1 初始化函數(shù)i2c2_init
按照LPC1752用戶手冊(UM10360)中第三章的介紹進行初始化,步驟如下:
a)。 電源:在寄存器PCONP中置位PCI2C2。
b)。 時鐘:在寄存器PCLK_SEL1中選擇PCLK_I2C2。
c)。 引腳: 通過寄存器PINSEL0使能I2C2引腳。通過寄存器PINMODE來配置I2C2引腳模式。
d)。 時鐘頻率:向I2SCLH和I2SCLH寄存器加載頻率值來定義串行時鐘頻率(主機模式)。
e)。 中斷:在NVIC中置位I2C2_IRQn寄存器使能I2C2中斷。
f)。 向寄存器I2CONSET寫入0x40來置位I2EN位。
2.2 中斷函數(shù)I2C2_IRQHandler
通過讀取I2STAT寄存器的值判斷I2C總線上的狀態(tài),并進行下一步操作。
中斷函數(shù)只處理了主機接收模式與主機發(fā)送模式。
1)I2C進入主機進入發(fā)送起始條件時,串行中斷標志(SI)置位,狀態(tài)寄存器(I2STAT)中的狀態(tài)代碼為0x08。此時將從機地址和數(shù)據(jù)方向位(SLA+W)裝入I2DAT,同時復(fù)位I2CON的STA,STO和SI。
2.3 I2C總線進入開始狀態(tài)i2c2_start
可通過置位STA位進入主機發(fā)送模式。一旦總線空閑,I2C邏輯會馬上測試I2C總線并產(chǎn)生一個起始條件。
2.4 I2C停止函數(shù)i2c2_stop:
I2C結(jié)束時發(fā)送停止條件并釋放總線。
a)向I2CONSET寫入0x14來置位STO和AA位;
b)向I2CONCLR寫入0x08來清除SI標志;
2.5主機發(fā)送函數(shù)i2c2_write
啟動主機發(fā)送功能,向從機發(fā)送數(shù)據(jù),通過建立緩沖區(qū)、指針和數(shù)據(jù)計數(shù)然后發(fā)啟起始條件便可執(zhí)行主發(fā)送操作。
a)初始化主機數(shù)據(jù)計數(shù)器;
b)建立數(shù)據(jù)將被發(fā)送到的從機地址,并且添加寫位;
c)向I2CONSET寫入0x20來置位STA位;
d)在主發(fā)送緩沖區(qū)內(nèi)建立要發(fā)送的數(shù)據(jù);
e)初始化主機數(shù)據(jù)計數(shù)器來匹配正在發(fā)送的信息長度;
f)退出。
2.6主機接收函數(shù) i2c2_read
啟動主機接收功能,接收從機發(fā)出的數(shù)據(jù)。
通過建立緩沖區(qū)、指針和數(shù)據(jù)計數(shù)然后發(fā)啟起始條件便可執(zhí)行主接收操作。
a)初始化主機數(shù)據(jù)計數(shù)器;
b)建立數(shù)據(jù)將被發(fā)送到的從機地址,并且添加讀位;
c)向I2CONSET寫入0x20來置位STA位;
d)在主接收緩沖區(qū)內(nèi)建立要發(fā)送的數(shù)據(jù);
e)初始化主機數(shù)據(jù)計數(shù)器來匹配正在發(fā)送的信息長度;
f)退出。
3 測試
通過向0x00地址寫入并回讀固定數(shù)據(jù)驗證有效性。
測試結(jié)果比較
第一次讀取
第二次讀取
經(jīng)驗證可以正常使用。
編輯:hfy
-
寄存器
+關(guān)注
關(guān)注
31文章
5363瀏覽量
121200 -
存儲單元
+關(guān)注
關(guān)注
1文章
63瀏覽量
16185 -
EEPROM
+關(guān)注
關(guān)注
9文章
1033瀏覽量
81967 -
Cortex M3
+關(guān)注
關(guān)注
0文章
7瀏覽量
8582 -
LPC1752
+關(guān)注
關(guān)注
0文章
4瀏覽量
3512
發(fā)布評論請先 登錄
相關(guān)推薦
評論