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); } |
| 欢迎光临 迅维网 (https://www.chinafix.com/) | Powered by Discuz! X3.4 |