日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

應廣單片機系列——用I2C接口讀寫EEPROM

聚豐開發(fā) ? 2018-10-17 15:43 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

注:本文是作者以前發(fā)表在其個人博客,現(xiàn)在發(fā)布到電子發(fā)燒友專欄


本例是用針對標準I2C接口EEPROM存儲器24C02進行讀寫操作,只要對例程做適當修改,就可以用到大部分控制I2C接口設備的場合。

應廣單片機軟件I2C接口例程(MASTER模式)

本例僅供參考,歡迎指正程序中的問題

//-----------------------------------------
.chip p201cs14a
//{{PADAUK_CODE_OPTION
.Code_OptionBootupSlow// 1024 ILRC
.Code_OptionLVD2.79V// Maximum performance = 4 MIPS
.Code_OptionSecurityEnable// Security 3/4 words Enable
//}}PADAUK_CODE_OPTION


//定義I2C接口
I2C_SDAequpa.7
I2C_SCLequpa.6
I2C_SDA_DIRequpac.7
I2C_SCL_DIRequpac.6
I2C_LONG_DLYequ50
I2C_SHORT_DLYequ20
I2C_SDA_HIGHequset1I2C_SDA
I2C_SDA_LOWequset0I2C_SDA
I2C_SCL_HIGHequset1I2C_SCL
I2C_SCL_LOWequset0I2C_SCL
I2C_SDA_OUTPUTequset1I2C_SDA_DIR
I2C_SDA_INPUTequset0I2C_SDA_DIR
I2C_SCL_OUTPUTequset1I2C_SCL_DIR
I2C_SCL_INPUTequset0I2C_SCL_DIR


//定義I2C變量
bytei2c_rw_addr//讀寫地址
bytei2c_rw_byte//讀寫數(shù)據(jù)
bytei2c_rw_cmd//讀寫的器件地址
bytei2c_rw_temp//讀寫過程中間變量
bytei2c_rw_cnt//讀寫過程中間變量

//
byteXms
bytems_cnt

//
bytetest_addr
bytetest_data

.romadr0x000
gotomain0
gotomain1

.romadr0x010
isr_entry:
pushaf
intrq = 0
popaf
reti


//----------------------------
//產(chǎn)生START信號
//----------------------------
i2c_start:
I2C_SDA_OUTPUT
I2C_SCL_OUTPUT
I2C_SDA_HIGH
delayI2C_LONG_DLY
I2C_SCL_HIGH
delayI2C_LONG_DLY
I2C_SDA_LOW
delayI2C_LONG_DLY
I2C_SCL_LOW
delayI2C_LONG_DLY
ret

//----------------------------
//產(chǎn)生STOP信號
//----------------------------
i2c_stop:
I2C_SCL_LOW
delayI2C_LONG_DLY
I2C_SDA_LOW
delayI2C_LONG_DLY
I2C_SCL_HIGH
delayI2C_LONG_DLY
I2C_SDA_HIGH
delayI2C_LONG_DLY
//
I2C_SCL_INPUT
I2C_SDA_INPUT
ret


//----------------------------
//檢查SALVE ACK信號
//----------------------------
i2c_slave_ack:
//don't check ACK
I2C_SDA_INPUT
delayI2C_SHORT_DLY
I2C_SCL_HIGH
delayI2C_SHORT_DLY
I2C_SCL_LOW
delayI2C_SHORT_DLY
I2C_SDA_OUTPUT
I2C_SDA_LOW
delayI2C_SHORT_DLY
ret

//----------------------------
//輸出MASTER ACK信號
//----------------------------
i2c_master_ack:
I2C_SDA_OUTPUT
I2C_SDA_LOW
delayI2C_SHORT_DLY
I2C_SCL_HIGH
delayI2C_SHORT_DLY
I2C_SCL_LOW
delayI2C_SHORT_DLY
ret

//----------------------------
//輸出MASTER NACK信號
//----------------------------
i2c_master_nack:
I2C_SDA_OUTPUT
I2C_SDA_HIGH
delayI2C_SHORT_DLY
I2C_SCL_HIGH
delayI2C_SHORT_DLY
I2C_SCL_LOW
delayI2C_SHORT_DLY
ret


//------------------------------
//寫一個字節(jié)
//Input: i2c_rw_temp
//Used: i2c_rw_cnt
//------------------------------
i2c_write_8bit:
i2c_rw_cnt = 8
i2c_write_8bit_loop:
slci2c_rw_temp
swapcI2C_SDA
delayI2C_SHORT_DLY
I2C_SCL_HIGH
delayI2C_SHORT_DLY
I2C_SCL_LOW
delayI2C_SHORT_DLY
dzsni2c_rw_cnt
gotoi2c_write_8bit_loop
ret

//------------------------------
//讀一個字節(jié)
//Used: i2c_rw_cnt
//Output: i2c_rw_temp
//------------------------------
i2c_read_8bit:
i2c_rw_temp = 0
i2c_rw_cnt = 8
delayI2C_SHORT_DLY
i2c_read_8bit_loop:
I2C_SCL_HIGH
delayI2C_SHORT_DLY
swapcI2C_SDA
slci2c_rw_temp
I2C_SCL_LOW
delayI2C_SHORT_DLY
dzsni2c_rw_cnt
gotoi2c_read_8bit_loop
ret

//------------------------------
//Input: i2c_rw_addr
// i2c_rw_cmd
//Used: i2c_rw_cnt
// i2c_rw_temp
//Output: i2c_rw_byte
//------------------------------
i2c_read_byte:
//start
calli2c_start

//write device address(write)
i2c_rw_temp = i2c_rw_cmd
calli2c_write_8bit

//slave ack
calli2c_slave_ack

//write register address
i2c_rw_temp = i2c_rw_addr
calli2c_write_8bit

//slave ack
//don't check ACK
calli2c_slave_ack

//start repeat
calli2c_start

//write device address(read)
i2c_rw_temp = i2c_rw_cmd
i2c_rw_temp.0 = 1
calli2c_write_8bit

//slave ack
//don't check ACK
I2C_SDA_INPUT
delayI2C_SHORT_DLY
I2C_SCL_HIGH
delayI2C_SHORT_DLY
I2C_SCL_LOW
delayI2C_SHORT_DLY//這里為特殊情況I2C_SDA不用轉(zhuǎn)為輸出

//read data
i2c_rw_temp = 0
calli2c_read_8bit
i2c_rw_byte = i2c_rw_temp//store data

//master nack
calli2c_master_nack

//stop
calli2c_stop

//retune
delayI2C_LONG_DLY
wdreset
ret

//------------------------------
//Input: i2c_rw_addr
// i2c_rw_byte
// i2c_rw_cmd
//Used: i2c_rw_cnt
// i2c_rw_temp
//------------------------------
i2c_write_byte:
//start
calli2c_start

//write device address
i2c_rw_temp = i2c_rw_cmd
calli2c_write_8bit

//slave ack
//don't check ACK
calli2c_slave_ack

//write register address
i2c_rw_temp = i2c_rw_addr
calli2c_write_8bit

//slave ack
//don't check ACK
calli2c_slave_ack

//write data
i2c_rw_temp = i2c_rw_byte
calli2c_write_8bit

//slave ack
//don't check ACK
calli2c_slave_ack

//stop
calli2c_stop

//retune
delayI2C_LONG_DLY
wdreset
ret

EEPROM_RW_CMDequ0xA0
//------------------------------
//函數(shù)名: eeprom_read_byte
//Input: i2c_rw_addr
//Used: i2c_rw_cnt
// i2c_rw_temp
//Output: i2c_rw_byte
//------------------------------
eeprom_read_byte:
i2c_rw_cmd = EEPROM_RW_CMD
gotoi2c_read_byte//注意這里用的是跳轉(zhuǎn)
//------------------------------
//函數(shù)名: eeprom_write_byte
//Input: i2c_rw_addr
// i2c_rw_byte
//Used: i2c_rw_cnt
// i2c_rw_temp
//注意: 調(diào)用完后需要等待一段時間以保證寫操作完成
//------------------------------
eeprom_write_byte:
i2c_rw_cmd = EEPROM_RW_CMD
gotoi2c_write_byte//注意這里用的是跳轉(zhuǎn)

//----------------------------------------
//input: ms
//該函數(shù)以4M頻率為基準時鐘實現(xiàn)延時
//----------------------------------------
delayXms:
while(Xms)
{
wdreset
ms_cnt = 20
while(ms_cnt)
{
delay195
ms_cnt--
}
Xms--
}
ret

main0:
.ADJUST_OTP_IHRCR8MIPS// IHRC/2 = 8MIPS, WatchDog Disable, RAM 0,1 temporary be used
sp = 0x30

disgint
inten = 0


pa = 0b0000_0000
paph = 0b1101_0000
pac = 0b0000_0001
pb = 0b0000_0000
pbph = 0b0000_0000
pbc = 0b1111_1111

I2C_SDA_INPUT
I2C_SCL_INPUT

delay200

mova,0b100_11_111
movt16m,a

clkmd.1 = 1//enable watch dog
wdreset


Xms = 100
calldelayXms

test_data = 0
test_addr = 0

main0_loop:
wdreset

//寫E2EPROM
i2c_rw_addr = test_addr
i2c_rw_byte = test_data
calleeprom_write_byte

//調(diào)用EEPROM寫操作函數(shù)后要等待一段時間,以保證數(shù)據(jù)寫操作完成
Xms = 20
calldelayXms

//讀E2EPROM
i2c_rw_addr = test_addr
calleeprom_read_byte
if(i2c_rw_byte != test_data)
{
//讀回的數(shù)據(jù)比較出錯,判斷為讀寫E2PROM出錯
nop
}

test_addr ++
test_data --

gotomain0_loop

//----------------FPPA1-------------------
main1:
sp = 52
main1_loop:
gotomain1_loop

本例代碼是從實際程序中移植而來,已編譯,未做最終調(diào)試


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 單機片
    +關注

    關注

    0

    文章

    59

    瀏覽量

    12943
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    RK平臺I2C開發(fā):從硬件原理到實戰(zhàn)排查

    在嵌入式開發(fā)中,I2C 總線是連接外設的 “橋梁”—— 小到傳感器、EEPROM,大到 LCD 驅(qū)動器、音頻芯片,都離不開它的控制。而瑞芯微(Rockchip)系列芯片作為主流嵌入式方案,其
    的頭像 發(fā)表于 02-05 13:42 ?2706次閱讀
    RK平臺<b class='flag-5'>I2C</b>開發(fā):從硬件原理到實戰(zhàn)排查

    利用I2C接口采用輪詢方式讀寫EEPROM芯片

    利用I2C接口,采用輪詢方式讀寫EEPROM芯片 #define TESTI2C2 //I2C
    發(fā)表于 01-23 06:00

    RA MCU眾測寶典 | I2C讀取EEPROM

    I2C協(xié)議讀取EEPROM數(shù)據(jù)。瑞薩嵌入式小百科將帶著大家從I2C總線原理、EEPROM(AT24C02)特性,到FSP中
    的頭像 發(fā)表于 01-13 18:05 ?8421次閱讀
    RA MCU眾測寶典 | <b class='flag-5'>I</b>2<b class='flag-5'>C</b>讀取<b class='flag-5'>EEPROM</b>

    CW32單片機I2C接口讀寫EEPROM芯片

    一、概述 CW32L083 內(nèi)部集成 2I2C 控制器,能按照設定的傳輸速率(標準,快速,高速)將需要發(fā)送的數(shù)據(jù)按照 I2C 規(guī)范串行發(fā)送到 I2C 總線上,或從總線上接收數(shù)據(jù)
    發(fā)表于 01-12 08:20

    基于FPGA的I2C控制模塊設計

    I2C_WRITE_WDATA.v模塊實現(xiàn)I2C寫時序,I2C_Controller (I2C控制器)例化了I2C_WRITE_WDATA.
    的頭像 發(fā)表于 12-26 09:48 ?6171次閱讀
    基于FPGA的<b class='flag-5'>I2C</b>控制模塊設計

    AS32X601的I2C模塊操作EEPROM詳解

    國科安芯推出的AS32X601系列MCU芯片內(nèi)置的I2C模塊提供了符合工業(yè)標準的兩線串行制接口,可用于MCU和外部I2C設備的通訊。I2C
    的頭像 發(fā)表于 12-21 21:39 ?1681次閱讀
    AS32X601的<b class='flag-5'>I2C</b>模塊操作<b class='flag-5'>EEPROM</b>詳解

    CW32單片機I2C接口讀寫EEPROM芯片

    u8State = 0; uint8_t receivedflag = 0; //讀取完成標志 6.主程序:利用I2C接口,采用中斷方式讀寫EEPROM芯片(CW24
    發(fā)表于 12-09 07:43

    基于CW32 MCU的I2C接口優(yōu)化穩(wěn)定讀寫EEPROM關鍵技術

    CW32 MCU優(yōu)化I2C接口,確保在與EEPROM芯片通信時的穩(wěn)定性。內(nèi)容涵蓋以下幾個關鍵技術點: I2C時序與頻率調(diào)整:介紹如何根據(jù)EEPRO
    發(fā)表于 12-03 07:29

    基于芯源CW32F030 MCU的I2C通信及應用

    。 停止通信:發(fā)送停止信號,結(jié)束數(shù)據(jù)傳輸。 5. 實例代碼:I2C讀寫EEPROM下面的代碼展示了如何使用CW32F030 MCU通過I2C接口
    發(fā)表于 11-18 08:29

    深入剖析I2C協(xié)議

    ,I2C也是一種可以多主設備,多從設備的總線協(xié)議,通過地址索引,I2C可以使能所需從設備,I2C的出現(xiàn)主要是用來實現(xiàn)不同集成電路組件之間的控制功能,比如通過I2C協(xié)議,連接MCU與LC
    的頭像 發(fā)表于 08-21 15:10 ?3962次閱讀
    深入剖析<b class='flag-5'>I2C</b>協(xié)議

    【沁恒CH585開發(fā)板免費試用體驗】I2C 讀寫EEPROM (三)

    */ I2C_Stop();/* 發(fā)送停止信號 */ return ucAck; } 注釋很清楚,對照I2C的協(xié)議看就行。 接著就是實現(xiàn)AT2C02的讀寫操作
    發(fā)表于 08-05 22:25

    【沁恒CH585開發(fā)板免費試用體驗】I2C 讀寫EEPROM (二)

    _GetFlagStatus(I2C_FLAG_BUSY) != RESET); } 主要配置I2C模式、低電平占空比、I2C尋址模式以及通信速率,最后使能I2C設備。 初始化完成后
    發(fā)表于 08-05 22:13

    【沁恒CH585開發(fā)板免費試用體驗】I2C 讀寫EEPROM (一)

    I2C接口,并不需要用軟件去模擬 SDA 和SCL 線的時序。 Figure 1?3 主機寫數(shù)據(jù)到從 Figure 1?4 主機由從中讀數(shù)據(jù) 圖例: 數(shù)據(jù)由主機傳輸至從
    發(fā)表于 08-05 22:09

    高效率、6通道、白光LED驅(qū)動器,帶I2C接口 skyworksinc

    電子發(fā)燒友網(wǎng)為你提供()高效率、6通道、白光LED驅(qū)動器,帶I2C接口相關產(chǎn)品參數(shù)、數(shù)據(jù)手冊,更有高效率、6通道、白光LED驅(qū)動器,帶I2C接口的引腳圖、接線圖、封裝手冊、中文資料、英
    發(fā)表于 07-30 18:31
    高效率、6通道、白光LED驅(qū)動器,帶<b class='flag-5'>I2C</b><b class='flag-5'>接口</b> skyworksinc

    簡單了解I2C接口

    在電子電路的復雜世界里,各種電路模塊設備需要相互通信才能協(xié)同工作 ,I2C接口就像是電路模塊設備間的溝通橋梁,今天就帶大家深入了解它。
    的頭像 發(fā)表于 05-08 14:15 ?2847次閱讀
    簡單了解<b class='flag-5'>I2C</b><b class='flag-5'>接口</b>
    方城县| 涟水县| 武隆县| 平山县| 隆林| 东乌珠穆沁旗| 东乌| 二手房| 酉阳| 黄梅县| 汶川县| 凤山县| 云浮市| 景谷| 邻水| 涿鹿县| 黔西县| 河曲县| 茂名市| 福海县| 蒲江县| 武平县| 遂川县| 漳浦县| 和平县| 井冈山市| 霞浦县| 盖州市| 琼中| 那坡县| 大城县| 三原县| 平和县| 宝坻区| 嘉峪关市| 绵竹市| 洛扎县| 孝感市| 庄浪县| 镇宁| 伊金霍洛旗|