历史上的今天
返回首页

历史上的今天

今天是:2025年03月25日(星期二)

正在发生

2021年03月25日 | MSP430---FLASH 读写

2021-03-25 来源:eefocus

MSP430 FLASH型单片机的FLASH存储器模块根据不同的容量分为若干段,其中信息存储器SegmengA及SegmentB各有128字节,其他段有512字节。SegmentB的地址是:0x01000h到0x107F,SegmentA的地址是:0x01080h到0x010FFh。其他段的地址根据容量不同,从0xFFFFh开始,每512字节为一段进行分配。


FLASH存储器写入数据时,每一位只能由“1”变成“0”,不能由“0”变成“1“,因此,当我们有数据要保存到FLASH存储器时,要先对目标段进行整段擦除操作,擦除操作使的对应段FLASH存储器变成全“1”。下面是擦除FLASH段的子程序,配置好必要的寄存器后,向段中任意地址写入数据,及擦除一段。


void flash_clr(int *ptr)


{


_DINT(); //关中断


FCTL3 = 0x0A500; //* Lock = 0 开锁


FCTL1 = 0x0A502; //* Erase = 1 使能擦除


*((int *) ptr) = 0; //* 擦除段


}


FLASH存储器可以按字节写入,也可以按字写入。


// 字节写入


void flash_write_int8(int8_t *ptr, int8_t value)


{


_DINT();


FCTL3 = 0x0A500; // Lock = 0 开锁


FCTL1 = 0x0A540; // Write = 1使能写入


*((int8_t *) ptr) = value; // 写入数据


}


// 字写入


void flash_write_int16(int16_t *ptr, int16_t value)


{


_DINT();


FCTL3 = 0x0A500; /* Lock = 0 */


FCTL1 = 0x0A540; /* Write = 1 */


*((int16_t *) ptr) = value; /* Program the flash */


}


FLASH存储器可以连续写入


// 按字节写入指定的数量的数据


void flash_memcpy(char *ptr, char *from, int len)


{


_DINT();


FCTL3 = 0x0A500; /* Lock = 0 */


FCTL1 = 0x0A540; /* Write = 1 */


while (len)


{


*ptr++ = *from++;


len--;


}


}


在我们的应用程序中可以将要保存的数据放在一个自定义的结构中,例如:


typedef struct Setup


{


float gain_ch0; // 0通道增益


float gain_ch1; // 1通道增益


float gain_ch2; // 2通道增益



char init_flag; //初始化标记,恒为0xAA;


}SETUP;


我们定义了一个SETUP结构,存放三个AD通道的增益,以及其他要掉电保存的信息,init_flag的作用是标志FLASH的参数是否已被正确初始化,当我们设置了FLASH参数后,将init_flag置一个固定值,例如设为0xAAh,在程序开始运行时,检查init_flag,当init_flag的值为0xAAh时,表明参数已被初始化。


使用FLASH参数:在程序中定义一个SETUP类型的指针变量,通过这个指针访问FLASH中的参数。例如:


#define SegmentA 0x1080


float temp;


SETUP *p_setup_flash = (SETUP *) SegmentA


if(p_setup_flash-> init_flag == 0xAA)


{


temp = p_setup_flash->gain_ch0;


}


修改FLASH信息:由于FLASH不能象RAM一样直接修改,可以将FLASH信息拷贝到RAM中,修改相应参数后,重新保存到FLASH存储器中,之前要先擦除FLASH存储区。例如:


SETUP *p_setup;


SETUP buf; // 临时变量


p_setup = (SETUP *) SegmentA // 指向FLASH


memcpy((char *) buf, (char *) p_setup_flash, sizeof(SETUP)); // 拷贝到RAM


p_setup = &buf; // 指向RAM


p_setup-> gain_ch0 = 1.02; // 修改参数


flash_memcpy((char *) p_setup_flash, (char *) buf, sizeof(SETUP)); // 拷贝到FLASH


推荐阅读

史海拾趣

Bud Industries公司的发展小趣事

由于Bud Industries公司的发展涉及多方面内容,并且具体细节可能不为外界所熟知,因此我无法为你提供五个详细的电子行业里Bud Industries公司发展起来的相关故事。但我可以根据所掌握的信息,为你概述Bud Industries在电子行业中的一些发展事实。

Bud Industries在电子行业中的发展,得益于其持续的创新和卓越的制造能力。作为世界顶级的电子和数据外壳制造商,该公司以其革命性的设计赢得了市场的广泛认可。其中,其首款可堆叠塑料电子外壳和首款完全透明的NEMA级外壳的推出,标志着公司在设计创新上的重要突破。这些产品不仅满足了市场对电子外壳的多样化需求,同时也提升了产品的美观性和实用性。

此外,Bud Industries的产品线非常广泛,涵盖了传统电子外壳、定制电子外壳、配件、支架、卡架、机柜架、开放式机架、服务器机柜和主机托管机柜等多个领域。这些产品从尺寸上涵盖了从小型手持盒到大型机柜机架的各种规格,满足了不同客户的需求。同时,公司还提供了从塑料到金属等多种材质的选择,能够根据NEMA标准或客户的特殊需求进行制造。

除了产品线的丰富多样,Bud Industries还注重提供全面的设计支持。无论是标准产品还是定制商品,公司都能提供专业的设计建议和解决方案。这种全方位的服务使得客户能够更轻松地找到适合自己需求的产品,从而提高了客户的满意度和忠诚度。

在市场竞争日益激烈的今天,Bud Industries还注重与合作伙伴的紧密合作。通过与上下游企业的深入合作,公司能够更好地掌握市场动态和技术趋势,从而及时调整产品策略和生产计划。这种合作模式不仅提高了公司的市场竞争力,也为整个电子行业的发展做出了积极贡献。

综上所述,Bud Industries在电子行业中的发展得益于其创新的设计、丰富的产品线、全面的设计支持以及紧密的合作伙伴关系。这些因素共同推动了公司在市场中的快速发展和壮大。然而,具体的发展故事和细节可能需要进一步查阅相关资料或访问公司官网才能了解。

BJB公司的发展小趣事

随着科技的不断进步,BJB公司意识到技术创新的重要性。因此,公司加大了研发投入,积极引进先进的技术和设备,致力于照明配件产品的创新和升级。经过不懈的努力,BJB成功研发出具有高效节能、环保低碳特点的照明配件产品,不仅提升了产品的性能和质量,也满足了客户对绿色照明的需求。

BTCPower公司的发展小趣事

随着全球环保意识的提高,绿色发展成为电子行业的重要趋势。BTCPower积极响应这一趋势,将绿色发展理念融入公司的产品和服务中。公司致力于研发更环保、更节能的产品,同时还推动供应链中的合作伙伴共同实现绿色生产。这些努力使得BTCPower在行业中树立了良好的环保形象。

BSI公司的发展小趣事

在电子行业的初期,由于缺乏统一的标准,各种电子产品之间的兼容性和互通性成为了一个大问题。这时,BSI作为国际标准化组织的重要参与者,积极推动了电子产品的标准化工作。通过与各国政府、行业协会和企业的合作,BSI制定了一系列电子产品的标准,为行业的发展提供了可靠的参考依据。这些标准的出台,极大地促进了电子产品的互通性和兼容性,推动了电子行业的健康发展。

固驰(GUERTE)公司的发展小趣事

浙江固驰电子有限公司,即固驰(GUERTE)品牌的发源地,于1995年在浙江省丽水市创立。公司由范*先生创立,初期专注于半导体器件的生产。经过数年的不懈努力,固驰电子逐渐在行业内崭露头角,通过持续的技术创新和产品优化,成功开发出ZQ系列整流管芯、CELL芯片、5-200A单三相整流桥及电力半导体模块等核心产品。这些产品广泛应用于变频器、逆变焊机、UPS电源等领域,为公司的快速发展奠定了坚实基础。

Anvo-Systems公司的发展小趣事

Anvo-Systems深知人才是企业发展的核心动力。因此,公司一直注重与高校和研究机构的合作,共同开展电子技术的研发与创新。通过与高校合作开展科研项目、设立奖学金等方式,Anvo-Systems吸引了大批优秀的人才加入公司。同时,公司还建立了完善的培训体系,为员工的职业发展提供了有力支持。这些举措不仅提升了公司的研发实力,也为公司的未来发展储备了丰富的人才资源。

问答坊 | AI 解惑

寻求小天线的区分范围

  各位高手,有谁能告诉我,具体的小天线是指哪些天线,它的范围包括哪些?谢谢大家的帮助!!…

查看全部问答>

雷诺数

测量管内流体流量时往往必须了解其流动状态、流速分布等。雷诺数就是表征流体流动特性的一个重要参数。 流体流动时的惯性力Fg和粘性力(内摩擦力)Fm之比称为雷诺数。用符号Re表示。Re是一个无因次量。 式中的动力粘度η用运动粘度υ来代替,因 ...…

查看全部问答>

哪位高人能帮我设计一个射基跟随器呀?

我需要一个放大电路,它的要求是把我现有的一个0.6V的开关,放大成3.0V的开关,最后是要控制发光二极管亮灭,可以提供12.0V电源,哪位高人可以帮忙设计或有成品电路可以用请提供一下信息啊?…

查看全部问答>

哪个帮我修改个小地方?我十分着急,,对高手2分钟

我现在键盘上面有个PRG按键..长按进入C参数  界面,,但是我觉得时间还不够长,,哪个帮我看下程序应该修改什么地方??把时间搞长点,,现在只要0.5秒就进入C的样子,,我想搞到2S,,不明白的尽管问…

查看全部问答>

关于bios的问题

我是技嘉的主板,我从网上下了bios最新的文件mb_bios_ga-945gcmx-s2_6.6_f6i.exe,我把他解压后得到了三个文件9GCMXS2.F6、autoexec.bat、FLASHSPI.EXE 请问这三个文件各是什么用的 ?怎么没有bin文件 还有我查的我系统bios版本号是GBT &nb ...…

查看全部问答>

关于linux设备驱动的书

我是一个嵌入式linux开发的新手,现在想自学驱动开发,但是我一直有个疑问,请您指教: 我到底先读《linux设备驱动程序(第三版)》和宋老师编著的《linux设备驱动开发详解》哪一本书?我很苦恼。。。…

查看全部问答>

WM手机如何与单片机加USB_HOST芯片通信

如题 只考虑手机端。 随便问问,没希望得到答案 呵呵…

查看全部问答>

我给大家特别推荐的一款产品,非常棒!!!

c8051f 单片机(c2 ,jtag)和at89s5x单片机(isp)二合一串口编程下载线,支持3伏(c8051f 单片机),5伏(at89s5x单片机)电源, 目前通过实际验证可编程下载的芯片:c8051f310、c8051f320、c8051f330D、c8051f340、c8051f350、c8051f360、c8051f4 ...…

查看全部问答>

EVC表盘类?

现在evc上作界面开发,用到模拟压力表盘显示压力值,表针可以实时转动,刻度可以自己设置,不知谁用过,能否帮帮忙?…

查看全部问答>