专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
NXP
为什么D_FLASH 无法擦除写入数据
2019-07-15 17:20
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
NXP MCU
14395
10
1114
uint16 Buffer[]={0x1111,0x2222,0x3333,0x4444};//数据缓存区,只能一次写入四个数据
uint16 data_Address = 0x0000;
uint16 date_read[4];
/***********************************************************
** 名 称:void DFlash_Init(void)
** 功 能:DFlash初始化
** 入口参数:无
** 出口参数:无
** 使用说明:无
************************************************************/
void DFlash_Init(void)
{
while(FSTAT_CCIF==0); //等待正在处理的FLASH操作完成
FCLKDIV=0x4E; //外部晶振为16M.FLASH时钟不超过1M,具体参照手册
FCNFG=0x00; //禁止中断
while(FCLKDIV_FDIVLD==0); //等待时钟设置成功
}
/***********************************************************
** 名 称:void DFlash_Write(uint16 ADDR16)
** 功 能:向DFLASH写入数据
** 入口参数:无
** 出口参数:无
** 使用说明:无
************************************************************/
void DFlash_Write(uint16 ADDR16)
{
while(FSTAT_CCIF==0);
if(FSTAT_ACCERR) //判断并清除标志位;
FSTAT_ACCERR=1;
if(FSTAT_FPVIOL) //判断并清除标志位;
FSTAT_FPVIOL=1;
FCCOBIX_CCOBIX=0x00;
FCCOB=0x1110; //写入命令和高位地址
FCCOBIX_CCOBIX=0x01; //地址后16位
FCCOB=ADDR16; //写入低16位地址
FCCOBIX_CCOBIX=0x02; //写入第一个数据
FCCOB=Buffer[0];
FCCOBIX_CCOBIX=0x03; //写入第二个数据
FCCOB=Buffer[1];
FCCOBIX_CCOBIX=0x04; //写入第三个数据
FCCOB=Buffer[2];
FCCOBIX_CCOBIX=0x05; //写入第四个数据
FCCOB=Buffer[3];
FSTAT_CCIF=1; //写入执行命令
while(FSTAT_CCIF==0); //等待执行完毕
}
/***********************************************************
** 名 称:uint16 DFlash_Read (uint16 des
ti
nation)
** 功 能:由DFLASH读取数据
** 入口参数:无
** 出口参数:无
** 使用说明:无
************************************************************/
uint16 DFlash_Read (uint16 destination)
{
uint8 lastepage; //用于存储EPAGE的值
uint8 epage; //用于计算EPAGE的值
uint16 data; //读取出的数据
lastepage = EPAGE; //保存EPAGE的值
epage = (byte)((DFLASH_LOWEST_START_PAGE)+(destination >>10)); //计算EPAGE
EPAGE=epage; //给EPAGE赋值
data = READword((destination & (DFLASH_PAGE_SIZE - 1)) + DFLASH_PAGE_WINDOW_START); //读取页面窗口中的数据
EPAGE= lastepage; //恢复EPAGE的值
return(data);
}
/***********************************************************
** 名 称:void DFlash_Erase(uint16 ADDR16)
** 功 能:擦除DFLASH的一个分区
** 入口参数:无
** 出口参数:无
** 使用说明:无
************************************************************/
void DFlash_Erase(uint16 ADDR16)
{
while(FSTAT_CCIF==0);
if(FSTAT_ACCERR) //判断并清除标志位;
FSTAT_ACCERR=1;
if(FSTAT_FPVIOL) //判断并清除标志位;
FSTAT_FPVIOL=1;
FCCOBIX_CCOBIX=0x00;
FCCOB=0x1210; //写入擦除命令和高位地址
FCCOBIX_CCOBIX=0x01;
FCCOB=ADDR16; //写入低16位的地址
FSTAT_CCIF=1; //启动执行命令
while(FSTAT_CCIF==0); //等待执行完成
}
void main(void)
{
Start();
Start_go();
EnableInterrupts;
//设置PB0口LED灯作为指示,读取DFlash正确则亮,否则不亮
DDRB_DDRB0 = 1;
PORTB_PB0 = 1;
DDRM_DDRM1 = 0;
FOREVER()
{
if(PTM_PTM1 == 0)
{
//确保先擦除后写入
DFlash_Erase(data_Address);
DFlash_Write(data_Address);
}
//读取DFlash数据
date_read[0]=DFlash_Read(data_Address);
date_read[1]=DFlash_Read(data_Address+2);
date_read[2]=DFlash_Read(data_Address+4);
date_read[3]=DFlash_Read(data_Address+6);
//判断读取数据是否正确
}
}
这个程序使用在MC9S12XET256上时,无法将数据写入D_FLASH,请大家指导下为什么?第一次用飞思卡尔的
单片机
作开发
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
10条回答
风声雨声123
2019-07-16 09:12
初始化就可以了
加载中...
查看其它10个回答
一周热门
更多
>
相关问题
手把手学会例程系列:i.MX<二>:图解i.mx53源码补丁+烧录(...
59 个回答
从零开始MQX开发之二 创建与调试MQX项目
24 个回答
7009: Trim value invalid, value is blank or zero是什么错误
0 个回答
怎么头像消失啊?
23 个回答
求推荐KINETIS评估板:必备USB HS,ETHERNET
5 个回答
相关文章
基于IMX6Q移植uboot2018-09——添加单板
0个评论
IMX6UL定时器按键消抖实验
0个评论
I.MX6U处理器LED灯点亮汇编程序代码编写
0个评论
在NXP I.MX6上做一个基于Opencv和OpenGL的打砖块游戏
0个评论
【RFID安全】浅谈卡片破解
0个评论
LM75a
0个评论
emwin字库制作及汉字显示
0个评论
STM32学习之I2C
0个评论
×
关闭
采纳回答
向帮助了您的知道网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
NXP
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
×
付费偷看金额在0.1-10元之间
确定
×
关闭
您已邀请
0
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
一周热门 更多>