版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、MSP430X14X Flash 读写操作总结开发平台:IAR Embedded Workbench、MSP430F149开发板作者:谭贝贝Flash简介Flash分为主存储区和信息存储区,主存储区有8个512byte的片段,信息存储区有两个128byte的片段。Flash默认为读取模式。在对Flash进行编程或者擦除时不允许读写,如果需要CPU在这期间进行操作,可以把代码段放在RAM中进行。Flash操作注意事项在读写的过程中电压不能小于2.7V否则擦除和读写的结果将不可预测。Flash的可操作时钟频率为257KHZ-476KHZ。如果频率不符合要求,则结果不可预测。在擦除先需要关闭中断和看
2、门狗,在擦除的过程中如果产生了中断,则会在重新使能中断后产生一个中断请求。Flash只能从1写为0,不能从从0写为1,所以需要擦除。可以被擦除的最小模块是片段,tAll Erase = tMass Erase = 5297/fFTG, tSeg Erase = 4819/fFTG。Flash ERASEMSP430X14X的擦除模式可以从Flash或者RAM中进行。从Flash中擦除从Flash中擦除的过程中所有的定时都会被Flash控制,CPU被挂起。擦除完成后需要一个假写入CPU才能复位。从Flash擦除时有可能把后面CPU需要执行的代码擦除。如果发生这样的情况,在擦除后CPU的执行状况将
3、不可预测。Flash中擦除流程图从RAM中擦除从RAM中擦除时CPU不会被挂起,可以继续执行代码。必须检测BUSY位以判断擦除是否结束,如果在擦除的过程中(即BUSY=1时)访问Flash,这是一个违规的访问,ACCVIFG会置位,而擦除的结果也将不可预测。RAM中擦除流程图Flash WriteMSP430X14X有两种写入模式,分为段写入(byte/word write),和块写入(Block Write),块写入要快得多,但是操作麻烦,在擦除的过程中不能有一个Flash word(low + high byte),则会发生损坏。CPU不能在BUSY=1时访问Flash,否则ACCFIG将
4、置位写入将不可预测。1. Byte/Word writeByte/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中进行,在块写入的过程中
5、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>#inclu
6、de "BoardConfig.h"void Write_A(uchar value);void Copy_A2B(void);void main( void )/ Stop watchdog timer to prevent time out resetWDTCTL = WDTPW + WDTHOLD;BoardConfig(0xb8);FCTL2 = FWKEY + FSSEL0 + FN0; /Select sourceuchar value = 0;for(;)Write_A(value+); /Write data to segment ACopy_A2B();
7、/Copy data from segment A to segment B_NOP();void Write_A(uchar value)uchar i;uchar *Flash_ptr;Flash_ptr = (uchar *)0x1080;FCTL1 = FWKEY + ERASE; /Set ERASE modeFCTL3 = FWKEY; /Clear LOCK*Flash_ptr = 0; /Dummy writeFCTL1 = FWKEY + WRT;for(i = 0;i < 128;i+)*Flash_ptr+ = value; /Write valueFCTL1 =
8、FWKEY; /Clear WRTFCTL3 = FWKEY + LOCK; /Set LOCK/Copy data from B to Avoid Copy_A2B(void)uchar *Flash_ptrA;uchar *Flash_ptrB;uint i;Flash_ptrA = (uchar *)0X1080;Flash_ptrB = (uchar *)0x1000;FCTL1 = FWKEY + ERASE;FCTL3 = FWKEY;*Flash_ptrB = 0;FCTL1 = FWKEY + WRT;for(i = 0;i < 128;i+)*Flash_ptrB+ =
9、 *Flash_ptrA+;FCTL1 = FWKEY;FCTL3 = FWKEY + LOCK;再来个块写入的(TI例程)/*/ MSP430F14x Demo - Flash In-System Programming, BlockWrite/ Description: This program first copies the FlashWrite routine to RAM, then/ erases flash seg A, then it increments all values in seg A using the 64/ byte block write mode./ As
10、sumed default MCLK = DCO 800 kHz./ Minimum RAM requirement = 512 bytes/ * Set Breakpoint on NOP in the Mainloop to avoid Stressing Flash */ MSP430F149/ -/ /| XIN|-/ | | |/ -|RST XOUT|-/ | |/ H. Grewal / L. Westlund/ Texas Instruments Inc./ Jun 2006/ Built with IAR Embedded Workbench Version: 3.30A/*
11、#include <msp430x16x.h>/ Global variableschar value = 0; / 8-bit value to write to segment Achar* Flash_ptr; / Flash pointerchar* RAM_ptr; / RAM pointerchar* END_ptr; / End of FlashWrite routine/ Function prototypesvoid FlashWrite();void CopyRoutine();void End_of_FlashWrite();void main(void)WD
12、TCTL = WDTPW + WDTHOLD; / Stop watchdog timer_DINT(); / Diable InterruptsCopyRoutine(); / Copy FlashWrite routine to RAM_EINT(); / Enable Interruptswhile(1) / Repeat foreverFlash_ptr = (char *) 0x1000; / Initialize Flash pointerFCTL2 = FWKEY + FSSEL1 + FN0; / MCLK/2 for Flash Timing GeneratorFCTL1 =
13、 FWKEY + ERASE; / Set Erase bitFCTL3 = FWKEY; / Clear Lock bit*Flash_ptr = 0; / Dummy write to erase Flash segmentwhile(!(FCTL3 & WAIT); / WAIT until Flash is readyasm("CALL #300h"); / Execute FlashWrite from RAM/ Inline Assemblyvalue+; / Increment value_NOP(); / SET BREAKPOINT HEREvoi
14、d CopyRoutine()Flash_ptr = (char*)FlashWrite; / Set pointer to FlashWrite routineRAM_ptr = (char*)0x0300; / Set pointer to RAMEND_ptr = (char*)End_of_FlashWrite; / Set pointer to End_of_FlashWritewhile(END_ptr != Flash_ptr) / Check for end of FlashWrite*RAM_ptr = *Flash_ptr; / Copy word to RAMFlash_
15、ptr+; / Increment Flash pointerRAM_ptr+; / Increment RAM pointervoid FlashWrite()volatile int i; / Use as write counterFlash_ptr = (char*)0x1000; / Initialize Flash pointerwhile(FCTL3 & BUSY); / Check Flash BUSY bitFCTL1 = FWKEY + BLKWRT + WRT; / Enable block-write operationfor(i = 0; i < 64; i+)*Flash_ptr = value; / Write value to flashFlash_ptr+; / Double-increment Flash pointerwhile(!(FCTL3
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年道路运输服务项目资金筹措计划书代可行性研究报告
- 2023年汽、柴油深度加氢催化剂投资申请报告
- 2024年烟度计项目投资申请报告代可行性研究报告
- 十字相乘法课件
- 《故事口才故事会》课件
- 消防知识国旗下讲话稿(33篇)
- 门面房租赁合约合同(31篇)
- 社区环境调查报告
- 四川省遂宁市蓬溪县2024届九年级上学期期末考试数学试卷(含答案)
- 贵州省六盘水市2023-2024学年高二上学期1月期末质量监测试题 数学 含答案
- 外派与异地工作管理制度
- 2024年《高等数学2》教案设计:案例分析与启示
- 2024年天翼云从业者认证考试题库
- 2025年国家保安员资格考试题库
- 水锤泵课件教学课件
- 仓库组长年终总结报告
- 老年患者手术中护理
- 浦发银行个人信用贷款合同
- 2023年遵义市第一人民医院招聘笔试真题
- 四年级数学(上)计算题专项练习及答案
- 北京市西城区2022-2023学年高二上学期期末考试 化学试卷 附答案
评论
0/150
提交评论