最近在学习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 这三个变化,从手册中也没找到原因。希望有用过的交流下。