|
各位好!
我现在在做一种流量计项目,用MSP430F149做,现在数据到Flash保存和读取遇到了问题,UnDataW和RUnDataW内容不一样,以下是相关程序,请大家帮看看:
unsigned char UnDataW[N_Un]={0,0,0,0,0,0,0,0};//Flash
unsigned char RUnDataW[N_Un]={0,0,0,0,0,0,0,0};
const unsigned char *piq0=UnDataW;
unsigned char q0;
unsigned int iq1,iq2;
/***************************************************************************
段擦除
adr:要擦除的段内的任一地址
***************************************************************************/
void FlashErase(unsigned int adr) @ "MYSET"
{
unsigned char *p0;
FCTL1=FWKEY+ERASE;
FCTL2=FWKEY+FSSEL_1+FN1+FN3;//10分频,400KHZ;选MCLK4MHZ
FCTL3=FWKEY; //解锁
while((FCTL3&BUSY)==BUSY) //等待FLASH存储器完成操作
;
p0=(unsigned char *)adr;
*p0=0; //向段内地址任意写,启动擦除操作
while((FCTL3&BUSY)==BUSY) //等待FLASH存储器完成操作
;
FCTL1=FWKEY;
FCTL3=FWKEY+LOCK;
}
/**************************************************************************
字节编程
Adr:要编程的地址,注意:不是指针类型,应当是偶地址
UnDataW:要编程的字
**************************************************************************/
void FlashWB(unsigned int Adr,unsigned char UnDataW) @ "MYSET"
{
FCTL1=FWKEY+WRT;
FCTL2=FWKEY+FSSEL_1+FN3+FN1;//10分频,400KHZ
FCTL3=FWKEY;
while((FCTL3&BUSY)==BUSY) //等待FLASH存储器完成操作
;
*((unsigned char *)Adr)=UnDataW;
while((FCTL3&BUSY)==BUSY) //等待FLASH存储器完成操作
;
FCTL1=FWKEY;
FCTL3=FWKEY+LOCK;
}
/**************************************************************************
系数保存到Flash程序
Adr:指向要编程的Flash地址,注意:不是指针类型
UnUnDataB:要编程的字节
**************************************************************************/
void UnWZCXS()//系值保存程序,将各位缓冲变量保存到相应位的最终变量
{
RUnDataW[7]=Un14W;
RUnDataW[6]=Un13W;
RUnDataW[5]=Un12W;
RUnDataW[4]=Un11W;
RUnDataW[3]=Un10W;
RUnDataW[2]=Un9W;
RUnDataW[1]=Un8W;
RUnDataW[0]=Un7W;
for(q0=0;q0<N_Un;q0++)
{
//ReadFlashW(iq1,*piq0);
UnDataW[q0]=RUnDataW[q0]; //
}
}
void UnWFlash()
{
FlashErase(FLASHD_UnADR); //段擦除
iq1=FLASHD_UnADR;
_NOP();
for(q0=0;q0<N_Un;q0++)
{
FlashWB(iq1,*piq0); //将设置参数Un存入Flash中
iq1++;
piq0++;
}
}
////////////////////////////////////////////////////////////////////////
void UnQZ()//系数从Flash转存到系数显示缓存变量
{
piq0=(unsigned char *)FLASHD_UnADR;
//const unsigned int *piq0=UnDataW;//指针指向数组UnDataW
for(q0=0;q0<N_Un;q0++)
{
//ReadFlashW(iq1,*piq0);
RUnDataW[q0]=*piq0;
piq0++;
}
}
|
|