在线时间0 小时
UID144951
注册时间2009-8-10
NXP金币0
该用户从未签到
新手上路

- 积分
- 9
- 最后登录
- 1970-1-1
|
公司用S12HY64M开发仪表盘
我在操作D-Flash的时候无法写数据,请各位大侠给我看一下啊,舍命感激!我的代码如下,
如果我函数传入参数为
addr = 0x4400 (data flah起始地址)
data = 0x3456
但是地址0x4400空间始终为0xFFFF也即全部为1 ,没有写成功
/**********************************************************
*
*
* VCOCLK - 64MHz, Core Clk - 16MHz, Bus Clk - 8MHz
*
*
**********************************************************/
void flash_init(void)
{
if (0x17 == FCLKDIV)
{
while (0 == FSTAT_CCIF);
}
else
{
while (0 == FSTAT_CCIF);
FCLKDIV_FDIVLCK = 0;
FCLKDIV_FDIV = 0x07;
}
}
int write_D_flash_word(unsigned int addr, unsigned int data)
{
if(FCLKDIV_FDIVLD ==0)
FCLKDIV_FDIV = 0x07;
FSTAT_ACCERR = 1;
//Delay_100us();
FSTAT_FPVIOL = 1;
FCCOBIX_CCOBIX = 0x00;
FCCOBHI = 0x11;//Program D-Flash Command
FCCOBLO = 0x00;//0x00;
FCCOBIX_CCOBIX = 0x01;
FCCOB = addr;
FCCOBIX_CCOBIX = 0x02; //word0
FCCOB = data;
/*
FCCOBIX_CCOBIX = 0x03; //word1
FCCOB = data;
FCCOBIX_CCOBIX = 0x04; //word2
FCCOB = data;
FCCOBIX_CCOBIX = 0x05; //word3
FCCOB = data;
*/
FSTAT_CCIF = 1;//launch command
while (FSTAT_CCIF == 0);
if (FSTAT_ACCERR || FSTAT_FPVIOL || FSTAT_MGSTAT)
{
FSTAT_ACCERR = 1;
FSTAT_FPVIOL = 1;
return -1;
}
return 1;
}
int erase_D_flash_sector(unsigned int addr)
{
if(FCLKDIV_FDIVLD ==0)
FCLKDIV_FDIV = 0x07;
FSTAT_ACCERR = 1;
//Delay_100us();
FSTAT_FPVIOL = 1;
FCCOBIX_CCOBIX = 0x00;
FCCOBHI = 0x12;
FCCOBLO = 0x00;
FCCOBIX_CCOBIX = 0x01;
FCCOB = addr;
FSTAT_CCIF = 1;
while (0 == FSTAT_CCIF);
if (FSTAT_ACCERR || FSTAT_FPVIOL || FSTAT_MGSTAT)
{
FSTAT_ACCERR = 1;
FSTAT_FPVIOL = 1;
return -1;
}
return 1;
}
int erase_verify_D_flash_sector(unsigned int addr)
{
if(FCLKDIV_FDIVLD ==0)
FCLKDIV_FDIV = 0x07;
FSTAT_ACCERR = 1;
//Delay_100us();
FSTAT_FPVIOL = 1;
FCCOBIX_CCOBIX =0x00;
FCCOBHI = 0x10;
FCCOBLO = 0x00;
FCCOBIX_CCOBIX = 0x01;
FCCOB = addr;
FCCOBIX_CCOBIX = 0x02;
FCCOB = 0x04;
FSTAT_CCIF = 1;
while (FSTAT_CCIF == 0);
if (FSTAT_ACCERR || FSTAT_FPVIOL || FSTAT_MGSTAT)
{
FSTAT_ACCERR = 1;
FSTAT_FPVIOL = 1;
return -1;
}
return 1;
}
|
|