This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

MSP430G2 Launchpad Flash 块写操作

   最近在学习Launchpad的Flash读写操作,在块写操作的时候碰到了问题。先把代码贴出来:

void main()
{
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer to prevent time out reset

volatile unsigned char i;
unsigned int *p;
unsigned int add = 0xf000;
p = (unsigned int *)add;

P1DIR = BIT0;
P1OUT = 0;

while(FCTL3 & BUSY);

FCTL2 = FWKEY+FSSEL_2+FN1;
FCTL3 = FWKEY;
FCTL1 = FWKEY+WRT+BLKWRT;

for(i = 0;i < 64;i ++)
{
*p = 0;
p++;
while(!(FCTL3 & WAIT));
}

FCTL1 = FWKEY+WRT;

while(FCTL3 & BUSY);

FCTL1 = FWKEY;
FCTL3 = FWKEY + LOCK;

while(1)
{
P1OUT = BIT0;
}
}

操作时序按照手册上的写的,也查阅过网上的430块写操作,感觉相差无几,但程序就是不能正常执行。在IAR编译环境下,进行调试发现如下问题:程序在进入for循环,进行第一次对操作地址赋值之后,BLKWRT位清零,ACCVIFG、LOCK位置1,之后对Flash中的写操作就不起作用啦,最终只有第一个地址被正确复制,剩余的63字,仍保持清零状态。

不理解为什么在对操作地址指针赋值之后,会有BLKWRT位清零,ACCVIFG、LOCK位置1  这三个变化,从手册中也没找到原因。希望有用过的交流下。