日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁(yè) > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]AVR單片機(jī)內(nèi)部集成了EEPROM,但是在GCC寫(xiě)編寫(xiě)EEPROM應(yīng)用程序的時(shí)候,經(jīng)常會(huì)出現(xiàn)讀寫(xiě)EEPROM時(shí)程序出錯(cuò),或重啟等不正?,F(xiàn)象。在軟件仿真時(shí)也許結(jié)果是正確的,但是在片上運(yùn)行的時(shí)候就不正常。困擾很久,終于發(fā)現(xiàn)原因在

AVR單片機(jī)內(nèi)部集成了EEPROM,但是在GCC寫(xiě)編寫(xiě)EEPROM應(yīng)用程序的時(shí)候,經(jīng)常會(huì)出現(xiàn)讀寫(xiě)EEPROM時(shí)程序出錯(cuò),或重啟等不正常現(xiàn)象。在軟件仿真時(shí)也許結(jié)果是正確的,但是在片上運(yùn)行的時(shí)候就不正常。困擾很久,終于發(fā)現(xiàn)原因在于編譯器,已經(jīng)我們對(duì)EEPROM操作說(shuō)明的理解不正確或不仔細(xì)。

操作EEPROM對(duì)時(shí)序的要求較高。更加Datasheet里的寫(xiě)操作范例程序:

while(EECR & (1<

EEAR = address; //設(shè)置地址和數(shù)據(jù)寄存器

EEDR = data;

EECR |= (1

EECR |= (1<

以上代碼在GCC中的編譯結(jié)果,發(fā)現(xiàn) EECR |= (1<

while(EECR & (1<

EEAR = address; //設(shè)置地址和數(shù)據(jù)寄存器

EEDR = data;

asm volatile("SBI 0x1C,2 \n\t");

asm volatile("SBI 0x1C,1 \n\t");

對(duì)于讀操作,發(fā)現(xiàn)采用Datasheet范例程序:

while(EECR & (1<

EEAR = address; //設(shè)置地址寄存器

EECR |= (1<

return EEDR; //自數(shù)據(jù)寄存器返回?cái)?shù)據(jù)

進(jìn)行單次操作似乎正常,但是連續(xù)操作可能導(dǎo)致程序個(gè)別運(yùn)行不正常,現(xiàn)象象重啟,但通過(guò)邏輯分析儀跟蹤設(shè)置啟動(dòng)時(shí)序情況看來(lái),又不太象,不知什么原因。采用一下程序段則可以正常運(yùn)行:

while(EECR & (1<

EEAR = address; //設(shè)置地址寄存器

asm volatile("SBI 0x1C,0 \n\t"); //設(shè)置EERE 以啟動(dòng)讀操作

data = EEDR; //自數(shù)據(jù)寄存器返回?cái)?shù)據(jù)

asm volatile("nop \n\t");

asm volatile("nop \n\t");

asm volatile("nop \n\t");

asm volatile("nop \n\t");

注意,讀操作后要空4個(gè)系統(tǒng)周期后才可執(zhí)行下個(gè)語(yǔ)句(Datasheet有說(shuō)明)。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀
關(guān)閉