|
MSP430F149內部的memory結構,60K Flash+2KRAM。Flash分為主存儲區和信息存儲區,操作都一樣,只是主存儲區每個段512字節,而信息存儲區為128字節,方便擦寫。
當我們有數據要保存到Flash存儲器時,要先對目標段進行整段擦除操作,擦除操作使的對應段FLASH存儲器變成全“1”。應當注意的是,此flash的操作頻率為257kHz 到 476kHz,時鐘源可選擇,因此我們做時鐘分頻時應當保證頻率在這之間,以下為我編寫的參考程序。
void Flash_erase(uint addr)
{//段擦除,512bytes一段
uchar s;
s=__get_interrupt_state();//保存當前中斷狀態
__disable_interrupt();
while(FCTL3&BUSY);
FCTL3=FWKEY;
FCTL1=FWKEY+ERASE;
*(uchar*)addr=0;
while(FCTL3&BUSY);
FCTL3=FWKEY+LOCK;
__set_interrupt_state(s);//恢復中斷狀態
}
void Flash_write(uint addr,uchar dat)
{//單字節寫入
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)
{//讀取到數組,此處堆棧應改大
uint i;
for(i=0;i<len;i++)
*(R+i)=*(uchar*)(addr+i);
}
|
|