如何充分利用MSP430单片机的FLASH

发布者:纸扇轻摇最新更新时间:2021-07-14 来源: eefocus关键字:MSP430  单片机  FLASH 手机看文章 扫描二维码
随时随地手机看文章

优点:


能够充分利用MSP430单片机的自带FLASH储存空间,就可避免外扩EEROM芯片了,一是节约成本,二是少了外扩EEROM的读写代码,三是同样可以储存用户数据,比如A/D转换后的数据。当然,如果是常量就不必了,直接将常量申明为“CONST”变量即可,这个就不多说了,懂的。


具体方法:


先把完整的程序编好(不包括FLASH的),然后编译(我用的是IAR,CCE没试过),进行在线仿真(软仿真硬仿真均可),在菜单栏选择"View/Memory",然后就可以看到FLASH 各个地址的数据了,记下FLASH 还没有被程序占用的空间的地址,然后将FLASH的程序加到你的主程序里,再编译,检验你记下的地址是否被程序占用,如果占用就选择一个新的地址就可以了。然后就可以向FLASH里写数据了。


注意事项:


不要向有程序代码的空间写数据,那样会导致程序运行不正常;

写数据之前要先擦除;

不要向0段FLASH里写数据,那里面有你程序中的中断向量;

最好选择每段的起始地址作为数据储存的首地址;

总结:


这种方法不需要扩充外存储器,可以降低系统的复杂度和系统功耗。

我也不知道这种方法实用不实用,既然有这种方法,我就发上来了,分享一下^_^。

源代码:


// 注意时钟源的选择,flash_clk:500k(官方资料是250K—475K)

//**********************************************************************************

#include

#include"FLASH.H"

//addr:FLASH的一个段首地址, value:数组名 count:要储存的数据个数

//把FLASH地址、数组名 和要存储的数据的个数 赋给下面的函数,就可以写入了

//**********************************************************************************

void write_flash_char (unsigned int addr, char *array,int count) //写 char型数组

{

char *Flash_ptr; // Flash pointer

int i;

Flash_ptr = (char *)addr; // Initialize Flash pointer

FCTL1 = FWKEY + ERASE; // Set Erase bit

FCTL3 = FWKEY; // Clear Lock bit

*Flash_ptr = 0; // Dummy write to erase Flash segment

FCTL1 = FWKEY + WRT; // Set WRT bit for write operation


for (i=0; i{

*Flash_ptr++ = array[I]; // Write value to flash

}

FCTL1 = FWKEY; // Clear WRT bit

FCTL3 = FWKEY + LOCK; // Set LOCK bit

}


//**********************************************************************************

void write_flash_int (unsigned int addr, int *array,int count) //addr为段首地址,写 int型数组

{

int *Flash_ptr; // Flash pointer

int i;

Flash_ptr = (int *)addr; // Initialize Flash pointer

FCTL1 = FWKEY + ERASE; // Set Erase bit

FCTL3 = FWKEY; // Clear Lock bit

*Flash_ptr = 0; // Dummy write to erase Flash segment

FCTL1 = FWKEY + WRT; // Set WRT bit for write operation

for (i=0; i{

*Flash_ptr++ = array[I]; // Write value to flash

}


FCTL1 = FWKEY; // Clear WRT bit

FCTL3 = FWKEY + LOCK; // Set LOCK bit

}


//**********************************************************************************

char read_flash_char0(unsigned int addr) //读单字节

{ char *address;

address=(char*)addr;

return *address;

}


//**********************************************************************************

//把FLASH地址、数组名 和要读取的数据的个数 赋给下面的函数,就可以读入了

void read_flash_char1(unsigned int addr,char *array,int count) //读一串数据

{ char *address=(char *)addr;

for(int i=0;i{

array[I]=*address++;


}

}


//**********************************************************************************

int read_flash_int0(unsigned int addr) //偶地址,读一个字

{

int *address=(int *)addr;

return *address;

}


//**********************************************************************************

void read_flash_int1(unsigned int addr,int *array, int count) //读整形数组

{

int *address=(int *)addr;

for(int i=0;i{

array[I]=*address++;


}

}


//**********************************************************************************

void init_flash(void)

{

FCTL2 = FWKEY + +FSSEL1+FSSEL0 + FN0; // (DCO)SMCLK/2 for Flash Timing Generator

}


关键字:MSP430  单片机  FLASH 引用地址:如何充分利用MSP430单片机的FLASH

上一篇:基于MSP430单片机的智能小车寻迹模块研究
下一篇:基于ADS1293的便携式低功耗心电信号采集系统

推荐阅读最新更新时间:2024-11-24 01:10

基于MSP430F449单片机和M-BUS总线实现数据采集系统的设计
引 言 随着社会的迅速发展,智能小区逐渐进人人们的生活,而自动抄表系统是智能小区的重要功能之一。在水、电、气管理方面,采用自动抄表技术,不仅能节约人力资源,更重要的是可提高抄表的准确性,减少因估计或誊写而造成帐单出错的现象,使水、电、气管理部门能及时准确获得数据信息。另外用户不再需要与抄表者预约上门抄表时间,还能迅速查询帐单,所以这种技术越来越受到用户欢迎。 针对目前市场上自动抄表系统价格不菲的现状,设计一种由零功耗磁敏传感器产生脉冲信号,利用MSP430系列超低功耗单片机的捕获功能捕获信号的数据采集系统。该采集系统价格相对低廉,性能可靠,适用于水、煤气、电表的远传采集;数据传输总线选用M-BUS,传输速度快、距离远、可靠性高
[单片机]
基于MSP430F449<font color='red'>单片机</font>和M-BUS总线实现数据采集系统的设计
AVR单片机的TC0定时溢出例程
程序生成向导配置TC0,溢出中断,产生1ms/20ms延时。 定时公式:Time=PRE*(MAX-TCNT0+1)/F_cpu单位S ,其中,PRE为与分频数 #include iom16v.h #include macros.h void port_init(void) { PORTA = 0xFF; DDRA = 0x00; PORTB = 0xFF; DDRB = 0xFF; PORTC = 0xFF; //m103 output only DDRC = 0x00; PORTD = 0xFF; DDRD = 0x00; } //TIMER0 initialize - prescale:8/256 // WGM
[单片机]
基于微控制器MSC1210的CSR电源控制系统设计
引言   MSC1210美国德州仪器公司(TI)生产的高集成混合信号处理器件。它集成了一个增强型8051内核,8路24位高精度Δ-ΣA/D转换,21个中断源,16位PWM,全双工UART(并兼容有SPI功能),32K字节FLASH,片内SRAM可达1.2K字节。MSC1210具有高的模拟和数字集成度,体积小,测量精度高,应用灵活等特点,因而该芯片可广泛应用于工业控制过程、智能发射机、智能传感器等领域。 1 微控制器MSC1210的工作原理   微控制器MSC1210是TI推出的一种集模拟、数字、闪速存储器于一体的高性能微控制系统。其应用范围十分广泛。使用增强的数字处理内核和高速闪存并带有高性能模拟和外围部件,可以实现优
[安防电子]
计算机串口与单片机通讯测试系统的实现
1 引 言 串行通讯接口标准经过使用和发展,目前已有多种,不过都是在RS-232C的基础上改进而形成的。RS-232C标准是美国EIA(电子工业联合会)与 BELL公司一起开发并于1969年公布的通讯协议。因此,他作为一种标准,目前已在微机通讯接口中被广泛采用,他不仅已被内置于每台计算机,同时也已被内置于从微处理器到主机的多种类型的计算机及其相连设备。而串口与单片机的通讯技术可以解决多台下位机的多内容同时显示,还可以方便地完成多机通讯技术、多数据处理等优点。但是当同时用到两种通信方式时,很可能产生串口冲突或其他不可预料的错误,对开发工作极其不利。 所以,此系统解决了这种开发中的问题,依靠软件仿真数据信号的发送、接收和多
[单片机]
计算机串口与<font color='red'>单片机</font>通讯测试系统的实现
MSP430F5438A中断问题
写一个简单程序进入中断,首先进入中断的条件: 1.时钟源配置好 2.中断的寄存器配置好 3.中断向量表配置好 以上三点都配置好是不是就应该进入中断了?帮忙看看下面的程序进不去中断,我用的是捕获模式,捕获引脚1.4有捕获信号。 #include “msp430.h” void Init_MCLK(void); int main( void ) { // Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD; P5DIR |= BIT4; P5OUT |= BIT4; Init_MCLK(); P1DIR &= ~BIT4;
[单片机]
单片机为什么需要晶振?外接晶体的值可以随意选择呢?
首先解释一下单片机为什么需要晶振。 晶振是什么?全称是石英晶体振荡器,是一种高精度和高稳定度的振荡器。通过一定的外接电路来,可以生成频率和峰值稳定的正弦波。而单片机在运行的时候,需要一个脉冲信号,做为自己执行指令的触发信号,可以简单的想象为:单片机收到一个脉冲,就执行一次或多次指令。 第二个问题,是不是外接晶体的值可以随意选择呢? 当然不是,这就像不同的发动机有不同的最大功率一样,每种型号的的单片机都有最大能接受的晶体频率。先说51,它能够外接的最大晶体是24M,AVR单片机能够外接的最大晶振是16M。更高级的可编程芯片,例如FPGA,ARM,可以达到几百M,不过暂时不在我们的考虑范围之内。 第三个问题,为什么51最大
[单片机]
<font color='red'>单片机</font>为什么需要晶振?外接晶体的值可以随意选择呢?
MC9S08DZ60单片机测量时间的问题
1.问题描述 用DZ60的计时器测周期时发现,TPM(计时器)在初始化后,需要等待500多ms才能勉强测到。 TPM产生的波形如下图,蓝色波形上升沿为初始化指令执行完成时间点,用一个IO口输出高电平并延时100ms作为示波器触发源,黄色波形为TPM的PWM方式输出波形。 2.问题分析 在DZ60DATASHEET中文版第313页找到这段话。 大概意思是TPM的通道控制寄存器的更新时机由clksb:clksa控制。而clksb:clksa的功能如表16-3所示。 合起来就是说,对通道控制寄存器的写入,不是直接写到寄存器里面,而是先写到寄存器对应的缓冲器。当TPM计数器关闭时,写入的数据从缓冲器写入完成后立即更
[单片机]
MC9S08DZ60<font color='red'>单片机</font>测量时间的问题
GD32单片机的工作原理和内部结构 GD32单片机怎么烧写程序?
GD32单片机是一种基于ARM Cortex-M3核心的嵌入式处理器,由国内芯片厂商GigaDevice公司开发和生产。它是一种高性能、低功耗、成本合理的微控制器,广泛应用于智能家居、智能穿戴、消费电子、汽车电子、电力电子、医疗设备等领域。 GD32单片机在工作原理上与其他单片机基本相同,主要包括外设控制器、CPU核心、内存、时钟、复位电路等部分组成。不同的是,GD32单片机采用了ARM Cortex-M3的高性能处理器,拥有更高的运算速度和更强的计算能力,同时具备低功耗、低噪声、高可靠性等特点。 GD32单片机的内部结构主要包括CPU核心、中断控制器、系统控制器、时钟控制器、Flash存储器、SRAM存储器、DMA控制器
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved