新聞中心

MSP430F149的內(nèi)部Flash

作者: 時(shí)間:2016-11-24 來(lái)源:網(wǎng)絡(luò) 收藏
MSP430F149內(nèi)部的memory結(jié)構(gòu),60K Flash+2K RAM。Flash分為主存儲(chǔ)區(qū)和信息存儲(chǔ)區(qū),操作都一樣,只是主存儲(chǔ)區(qū)每個(gè)段512字節(jié),而信息存儲(chǔ)區(qū)為128字節(jié),方便擦寫(xiě)。

本文引用地址:http://www.2s4d.com/article/201611/320875.htm


當(dāng)我們有數(shù)據(jù)要保存到Flash存儲(chǔ)器時(shí),要先對(duì)目標(biāo)段進(jìn)行整段擦除操作,擦除操作使的對(duì)應(yīng)段FLASH存儲(chǔ)器變成全“1”。應(yīng)當(dāng)注意的是,此flash的操作頻率為257 kHz到 476 kHz,時(shí)鐘源可選擇,因此我們做時(shí)鐘分頻時(shí)應(yīng)當(dāng)保證頻率在這之間,以下為我編寫(xiě)的參考程序。

void Flash_erase(uint addr)
{//段擦除,512bytes一段
uchar s;
s=__get_interrupt_state();//保存當(dāng)前中斷狀態(tài)
__disable_interrupt();
while(FCTL3&BUSY);
FCTL3=FWKEY;

FCTL1=FWKEY+ERASE;
*(uchar*)addr=0;
while(FCTL3&BUSY);
FCTL3=FWKEY+LOCK;
__set_interrupt_state(s);//恢復(fù)中斷狀態(tài)
}

void Flash_write(uint addr,uchar dat)
{//單字節(jié)寫(xiě)入
uchar s;
s=__get_interrupt_state();
__disable_interrupt();
while(FCTL3&BUSY);
FCTL3=FWKEY;
FCTL1=FWKEY+WRT;
*(uchar*)addr=dat;
while(FCTL3&BUSY);
FCTL1=FWKEY;
FCTL3=FWKEY+LOCK;
__set_interrupt_state(s);
}

void Flash_read(uint addr,uint len)
{//讀取到數(shù)組,此處堆棧應(yīng)改大
uint i;
for(i=0;i *(R+i)=*(uchar*)(addr+i);
}



關(guān)鍵詞: MSP430F149內(nèi)部Flas

評(píng)論


技術(shù)專區(qū)

關(guān)閉