网站大量收购闲置独家精品文档,联系QQ:2885784924

MSP430Flash读写操作小结.doc

  1. 1、本文档共19页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
MSP430Flash读写操作小结

MSP430X14X Flash 读写操作总结 开发平台:IAR Embedded Workbench、MSP430F149开发板 作者:谭贝贝 Flash简介 Flash分为主存储区和信息存储区,主存储区有8个512byte的片段,信息存储区有两个128byte的片段。Flash默认为读取模式。在对Flash进行编程或者擦除时不允许读写,如果需要CPU在这期间进行操作,可以把代码段放在RAM中进行。 Flash操作注意事项 在读写的过程中电压不能小于2.7V否则擦除和读写的结果将不可预测。Flash的可操作时钟频率为~257KHZ---~476KHZ。如果频率不符合要求,则结果不可预测。 在擦除先需要关闭中断和看门狗,在擦除的过程中如果产生了中断,则会在重新使能中断后产生一个中断请求。Flash只能从1写为0,不能从从0写为1,所以需要擦除。 可以被擦除的最小模块是片段,tAll Erase = tMass Erase = 5297/fFTG, tSeg Erase = 4819/fFTG。 Flash ERASE MSP430X14X的擦除模式可以从Flash或者RAM中进行。 从Flash中擦除 从Flash中擦除的过程中所有的定时都会被Flash控制,CPU被挂起。擦除完成后需要一个假写入CPU才能复位。从Flash擦除时有可能把后面CPU需要执行的代码擦除。如果发生这样的情况,在擦除后CPU的执行状况将不可预测。 Flash中擦除流程图 从RAM中擦除 从RAM中擦除时CPU不会被挂起,可以继续执行代码。必须检测BUSY位以判断擦除是否结束,如果在擦除的过程中(即BUSY=1时)访问Flash,这是一个违规的访问,ACCVIFG会置位,而擦除的结果也将不可预测。 RAM中擦除流程图 Flash Write MSP430X14X有两种写入模式,分为段写入(byte/word write),和块写入(Block Write),块写入要快得多,但是操作麻烦,在擦除的过程中不能有一个Flash word(low + high byte),则会发生损坏。CPU不能在BUSY=1时访问Flash,否则ACCFIG将置位写入将不可预测。 Byte/Word write Byte/Word 写入可以从Flash或者RAM初始化,当从Flash中初始化时,所有的定时都会被Flash控制,CPU被挂起。写完后CPU将继续执行后面的代码。 当从RAM中初始化时,BUSY必须在CPU访问Flash前置0.否则ACCFIG将被置位,写入的结果将不可预测。 在Byte/Word 写模式下写入总时间不能超过4ms,如果超过了,当再想这块任何地址写入数据时必须先擦除。 Byte/Word 写入流程图 从RAM中执行Byte/Word 写入 块写入 块写入时没一小块不能超过t_cpt=4ms,块写入只能从RAM中进行,在块写入的过程中WAIT位要置0,当想Flash中写入数据时,需要先检查WAIT位是否为1.当前块写完后BLKWRT要清0. 流程图 在擦除或者写入的过程中访问Flash,见下表 Flash的寄存器 FCTL1,选择擦除和写入模式的寄存器 FRKEY/FWKEY 高八位为密码读的密码为96h,写的密码为A5h。 BLKWRT 块写入模式选择位,可以自动被EMEX置位 WRT 字写入模式选择位,可任意自动被EMEX置位 MERASE和ERASE,擦除模式选择位 FCTL2时钟选择寄存器 FWKEYx密码位 FSSELx时钟选择位 FNx分频比 分频值等于FN+1 两个例子 #include msp430x14x.h #include BoardConfig.h void Write_A(uchar value); void Copy_A2B(void); void main( void ) { // Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD; BoardConfig(0xb8); FCTL2 = FWKEY + FSSEL0 + FN0; //Select source uchar value = 0; for(;;) { Write_A(value++); //Write data to segment A Copy_A2B(); //Copy data from segment A to segment B _NOP(); } } void Write_A(uchar value) { uchar i; uchar *Flash_ptr; Flash

文档评论(0)

ktj823 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档