TI中文支持网
TI专业的中文技术问题搜集分享网站

MSP430F4250的信息区Flash读写问题

用了MSP430F4250对信息区的地址0x1040地址写数据并读取,结果好像写不进去,单步调试或者直接运行,在WATCH中看到这个地址的值一直是0xff,不知道什么原因,哪位高手帮忙看看,谢谢。

晶振是4M。

void main(void)
{

    WDTCTL = WDTPW + WDTHOLD; 
    FLL_CTL0 |= XTS_FLL; //设置振荡器为高频,4M
    FLL_CTL0 |= XCAP0PF; //设置内部晶体匹配电容为0PF
    SCFQCTL = SCFQ_64K; //设置MCLK=SMCLK=2*ACLK;
    FCTL2=FWKEY+FSSEL1+FN3+FN1;//FLASH时钟设置,选在MCLK,11分频,大约364K

   char value=26;

   char value_m=0;

   char *data_ptr;
   data_ptr=(char *)0x1040;
   if(*data_ptr==0xff)
       write_SegC(value);
  else
    value_m = *data_ptr;

}

void write_SegC(char value)
{
    char *Flash_ptr; // Flash pointer
    Flash_ptr = (char *)0x1040; // Initialize Flash pointer
     FCTL3 = FWKEY; // Clear Lock bit
    FCTL1 = FWKEY + ERASE; // Set Erase bit
    *Flash_ptr = 0; // Dummy write to erase Flash seg
    FCTL1 = FWKEY + WRT; // Set WRT bit for write operation
    *Flash_ptr++ = value; // Write value to flash
    FCTL1 = FWKEY; // Clear WRT bit
    FCTL3 = FWKEY + LOCK; // Set LOCK bit
}

灰小子:

没见过对flash操作还需要Dummy write 的
建议参考官网flash操作例程

ke luo:

回复 灰小子:

这个就从TI官网上下的别的型号的FLASH 写的例程改的,4250的C例程里没有Flash操作的例程。

Hao Mengzhen:

回复 ke luo:

可以参考User Guide里对flash 操作讲解,www.ti.com/…/slau056l.pdf 第六章

; Byte/word write from flash. 514 kHz < SMCLK < 952 kHz
; Assumes 0FF1Eh is already erased
; Assumes ACCVIE = NMIIE = OFIE = 0.
MOV #WDTPW+WDTHOLD,&WDTCTL ; Disable WDT
MOV #FWKEY+FSSEL1+FN0,&FCTL2 ; SMCLK/2
MOV #FWKEY,&FCTL3 ; Clear LOCK
MOV #FWKEY+WRT,&FCTL1 ; Enable write
MOV #0123h,&0FF1Eh ; 0123h −> 0FF1Eh
MOV #FWKEY,&FCTL1 ; Done. Clear WRT
MOV #FWKEY+LOCK,&FCTL3 ; Set LOCK
… ; Re-enable WDT?

灰小子:

回复 ke luo:

这个例程是操作其他flash段的,SegmentA有点特殊,有个保护位

The state of the LOCKA bit is toggled when a 1 is written to it. Writing a 0 to
LOCKA has no effect. This allows existing flash programming routines to be
used unchanged.

ke luo:

回复 灰小子:

信息区带保护位的只是47x,47×3/4,471xx这些系列的,不针对42×0系列

灰小子:

回复 ke luo:

那就奇怪了。你操作SegmentB试试,还有就是确认下MCLK的频率。

赞(0)
未经允许不得转载:TI中文支持网 » MSP430F4250的信息区Flash读写问题
分享到: 更多 (0)