历史上的今天
今天是:2025年01月19日(星期日)
2020年01月19日 | 关于MSP430-Flash超过64K的读写操作方法
2020-01-19 来源:eefocus
下面例子是Qiaohaikun先生几年前一直用在MSP430FG4618...使用过的,一直都挺好使。希望在此分享出来能帮助到有需要的网友们。同样,希望各网友们如有精品程序例子的话同样可以发贴到微控论坛来。人人为我,我为人人!
运行代码
#include "msp430xG46x.h"
void WriteFlashErrorNum(void);
//----------------------------------------------------------------------
//功能:从flash中读出数据,只需给出首地址和取出数据的数量
//日期:2006.12.13
//输入:waddr为flash的地址,length为数据长度
//输出:无
//----------------------------------------------------------------------
void ReadFlash(unsigned long int waddr,unsigned int length)
{
unsigned char i=0;
if(FlashMangleFlag==0)
{
while(FCTL3 & BUSY);
if(length>64) length=64;
while(length--)
{
Internal_flashdata[i++]=__data20_read_char(waddr++);
}
}
}
//----------------------------------------------------------------------
//功能:段擦除;
//日期:2006.12.13
//输入:waddr为flash的地址,
//输出:无
//----------------------------------------------------------------------
//void EraseFlashOneBlock(unsigned long int waddr)
void EraseFlash(unsigned long int waddr)
{
if(FlashMangleFlag==0)
{
if((waddr>=0x1f400) && (waddr<0x20000))
{
while(FCTL3 & BUSY);
_DINT();
FCTL2 = FWKEY + FSSEL1 + FN4;
FCTL3 = FWKEY; // Clear Lock bit
FCTL1 = FWKEY + ERASE; // Set Erase bit
__data20_write_char(waddr,0); // Dummy write to erase Flash segment
while(FCTL3 & BUSY);
FCTL3 = FWKEY + LOCK; // Reset LOCK bit
_EINT();
}
}
}
//----------------------------------------------------------------------
//功能:将数据写入flash;
//日期:2006.12.13
//输入:waddr为flash的地址,length为数据长度,*buf为指向数据的指针
//输出:无
//----------------------------------------------------------------------
unsigned char WriteFlash(unsigned long int waddr,unsigned char *buf,unsigned int length)
{
unsigned int i;
unsigned char temp,ErrorFlag = 0;
if(FlashMangleFlag==0)
{
if((waddr>=0x1f400) && (waddr<0x20000))
{
while(FCTL3 & BUSY);
_DINT();
FCTL2 = FWKEY + FSSEL1 + FN4;
FCTL3 = FWKEY; // Clear Lock bit
FCTL1 = FWKEY + WRT; // Set WRT bit for write operation
for(i=0;i __data20_write_char(waddr,*buf); // Write value to flash temp = __data20_read_char(waddr); // Read one byte if(temp!=(*buf)) // 判断读出的数据和写入的数据是否相当 { ErrorFlag = 1; //写入flash操作错误标志 ErrorFlashNum ++ ; } waddr++;buf++; } while(FCTL3 & BUSY); FCTL1 = FWKEY; FCTL3 = FWKEY + LOCK; // Reset LOCK bit _EINT(); if(ErrorFlag == 1) WriteFlashErrorNum(); } } return ErrorFlag; }
上一篇:MSP430 开发注意事项要求
下一篇:MSP430 Flash信息区
史海拾趣
|
最近打算买台新电脑,想试试Windows7,不知道与wince的开发环境兼容性如何 我一般用到的软件有:PB5.0 EVC VS2005 VC++6.0 ADS1.2 Keil3… 查看全部问答> |
|
TE2440-II的VGA是通过CH7026来把LCD信号转换成VGA信号的,我对比了下和阳初的BSP发现个问题,TE2440-II里找不到VGAinit,而且在KERNEL里的CFW.C文件中initdisplay函数中也没有关于VGA的初始化问题,请问TE2440-II的CH7026的控制程序在哪个地方啊(芯 ...… 查看全部问答> |
|
11月祥佑PowerPC嵌入式系统开发培训班 开始报名了 开课时间:2008年11月,为期三天。 上课地点:上海 课程教材:《PowerPC嵌入式开发系统实验教材》 收费标准: 4000元/人 注:本次开班7折优惠:2800元/人。(含讲义费,午餐费) 课程特点: ...… 查看全部问答> |
|
佛山本土的LED筒灯联盟标准近日在佛山市质监局发布。据悉,该标准由佛山市标准技术研究院、佛山市照明灯具协会、中山大学佛山研究院联合本土7家LED企业发起制定。 据悉,佛山是全国最大的筒灯生产基地,筒灯产量约占全国40%左右,目前已有120 ...… 查看全部问答> |
|
As design complexities increase, use of vendor-specific intellectual property (IP) blocks has become a common design methodology. Altera provides parameterizable megafunctions that are optimized for Altera device architectures. ...… 查看全部问答> |
|
Q1:当Timer_A的捕获比较模块工作在捕获模式(即CAP = 1)时,TAR是里面的值表示什么含义?它是在对什么进行计数? Q2:TAR中的值写入CCRx后,TAR会自动清零吗?此时TAIFG的状态和TAR有关吗?… 查看全部问答> |




