哈哈哈哈哈操欧洲电影,久草网在线,亚洲久久熟女熟妇视频,麻豆精品色,久久福利在线视频,日韩中文字幕的,淫乱毛视频一区,亚洲成人一二三,中文人妻日韩精品电影

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不用轉為輸出

//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//注意這里用的是跳轉
//------------------------------
//函數(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//注意這里用的是跳轉

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

    關注

    0

    文章

    58

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

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

    在嵌入式開發(fā)中,I2C 總線是連接外設的 “橋梁”—— 小到傳感器、EEPROM,大到 LCD 驅動器、音頻芯片,都離不開它的控制。而瑞芯微(Rockchip)系列芯片作為主流嵌入式方案,其
    的頭像 發(fā)表于 02-05 13:42 ?2460次閱讀
    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 ?8178次閱讀
    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 ?6001次閱讀
    基于FPGA的<b class='flag-5'>I2C</b>控制模塊設計

    AS32X601的I2C模塊操作EEPROM詳解

    國科安芯推出的AS32X601系列MCU芯片內(nèi)置的I2C模塊提供了符合工業(yè)標準的兩線串行制接口,可用于MCU和外部I2C設備的通訊。I2C
    的頭像 發(fā)表于 12-21 21:39 ?1597次閱讀
    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ā)送停止信號,結束數(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 ?3910次閱讀
    深入剖析<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

    簡單了解I2C接口

    在電子電路的復雜世界里,各種電路模塊設備需要相互通信才能協(xié)同工作 ,I2C接口就像是電路模塊設備間的溝通橋梁,今天就帶大家深入了解它。
    的頭像 發(fā)表于 05-08 14:15 ?2821次閱讀
    簡單了解<b class='flag-5'>I2C</b><b class='flag-5'>接口</b>

    【RA-Eco-RA4M2開發(fā)板評測】I2C讀取EEPROM(二)

    就行。 值得注意的是,這里的從地址是7位,代碼中自動左移了。 然后讓軟件自動生成配置代碼即可。 6.2 基于I2CEEPROM讀寫實現(xiàn) R_SCI_
    發(fā)表于 04-28 23:14

    【RA-Eco-RA4M2開發(fā)板評測】I2C讀取EEPROM(一)

    、仲裁、時鐘同步和地址廣播等環(huán)節(jié),由于我們使用的是 RA4M2集成的硬件I2C接口,并不需要用軟件去模擬 SDA 和SCL 線的時序。 Figure 1?2 主機寫數(shù)據(jù)到從
    發(fā)表于 04-28 23:13
    阜宁县| 山阳县| 荆州市| 通榆县| 永寿县| 阿拉善盟| 呈贡县| 邢台市| 景德镇市| 天峻县| 镶黄旗| 吉水县| 临湘市| 龙陵县| 米脂县| 富蕴县| 定州市| 绥中县| 兴城市| 龙江县| 黑龙江省| 沾化县| 沈丘县| 武陟县| 阳谷县| 湖州市| 康定县| 宁夏| 新疆| 温州市| 临海市| 辽中县| 成安县| 都江堰市| 垫江县| 奉化市| 酉阳| 平南县| 龙江县| 孟村| 玛多县|