1546|0

2065

帖子

0

资源

纯净的硅(初级)

MSP430内部FLASH介绍 [复制链接]


1.Msp430的Flash存储器的特点有:
1)产生内部编程电压
2)可位、字节、字编程,可以单个操作,也可以连续多个操作
3)超低功耗操作
4)支持段擦除和多段模块擦除

2 Flash存储器的分割
    Msp430Flash存储器分成多个段。可对其进行单个字节、字的写入,也可以进行连续多个字、字节的写入操作,但是最小的擦除单位是段。
Flash 存储器被分割成两部分:主存储器和信息存储器,两者在操作上没有什么区别。两部分的区别在于段的大小和物理地址的不同。
以Msp430F149为例,信息存储器有两个128字节的段,即segmentA和segmentB,主存储器有多个512字节的段。Msp430F149内部Flash的地址为0x1000H~0xFFFFH,计60K。信息段SegA的起始地址为0x1080H,信息段SegB的起始地址为0x1000H。

3 Flash存储器的操作
    在默认状态下,处于读操作模式。在读操作模式中,Flash存储器不能被擦除和写入,时序发生器和电压发生被关闭,存储器操作指向ROM区。Msp430 Flash存储器在系统编程ISP(in-system programmable)不需要额外的外部电压。CPU能够对Flash直接编程。Flash存储器的写入/擦除通过BLKWRT、WRT、MERAS、ERASE等位确定。

3.1 擦除
    Flash存储器各位的缺省值为1,每一位都可以单独编程为0,但只有擦除操作才能将其恢复为1。擦除操作的最小单位是段。通过erase和meras位设置可选择3种擦除模式。擦除操作开始于对擦除的地址范围内的任意位置执行一次空写入。空写入的目的是启动时序发生器和擦除操作。在空写入操作之后,BUSY位自动置位,并保持到擦除周期结束。BUSY、MERAS、ERASE在擦除周期结束后自动复位。
//====================================================================
//如果擦除一段,则设置ERASE=1
//如果擦除多段,则设置MERAS=1
//如果擦除整个FLASH,则设置RASE=1,同时MERAS=1
//====================================================================
voidEraseSectorFlash(unsigned int wAddr)
{
    unsigned char reg1,reg2;  
    reg1=_BIC_SR(GIE);  
    reg2=IE1;                        // 保护有关中断标志
    IE1=0;                           // 关闭IE1中断
    while(FCTL3&BUSY);               // 等待FLASH编程结束
    FCTL3 = FWKEY;                    
    FCTL1 = FWKEY+ERASE;             // 发送FLASH擦除命令
*(unsigned char *)wAddr=0;       // 启动擦除操作
    while(FCTL3&BUSY);               // 等待擦除操作完成
FCTL1 = FWKEY;                   // 撤销任何对FLASH的操作命令
    FCTL3 = FWKEY+LOCK;             // 对FLASH内容进行加锁保护
    if(reg1&GIE) _BIS_SR(GIE);       // 恢复中断标志
    IE1=reg2;      
    return;
}

3.2 写入
    写入模式由WRT和BLKWRT位进行设置。所有的写入模式使用一系列特有的写入命令,采用块写入的速度大约是单个写入的2倍,因为电压发生器在块写入完成器件均能保持。对于这两种写入模式,任何能修改目的操作数的指令均能用于修改地址。一个Flash字不能再擦除器件进行两次以上的写入。当启动写入操作时,BUSY置位,写入结束时复位。


//------------------------------------------------------------------------
//向wAddr中写入bLen字节
//------------------------------------------------------------------------
voidWriteFlash(unsigned int wAddr,unsigned char *bBuf,unsigned char bLen)
{
    unsigned char reg1,reg2;
    reg1=_BIC_SR(GIE);
    reg2=IE1;IE1=0;                   // 保护原来中断标志,并关闭有关中断。   
                                       // 写一个字节数据到指定flash地址
    while (bLen--)
     {
       while (FCTL3&BUSY);             // 等待以前FLASH操作完成
       FCTL3 = FWKEY;     
       FCTL1 =FWKEY+WRT;               // 发送写flash命令
       *(unsigned char *)wAddr++=*bBuf++;      
       while(FCTL3&BUSY);              // 等待写操作完成
       FCTL1 = FWKEY;      
       FCTL3 = FWKEY+LOCK;             // 对FLASH内容进行加锁保护
     }
     if(reg1&GIE) _BIS_SR(GIE);           // 恢复中断标志
        IE1=reg2;         
     return;
}
3.3  读取
根据查看的书籍资料和网络资料得出,内部Flash的读取操作没有顺序的要求,一般Flash默认的操作方式即为读模式。读取Flash的程序代码如下:
voidReadFlash(unsigned int wAddr,unsigned char *bBuf,unsigned char bLen)
{
   while (bLen--)
     *bBuf++=*(unsigned char *)wAddr++;
   return;
}


回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

最新文章 更多>>
    关闭
    站长推荐上一条 1/10 下一条

    About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

    站点相关: 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

    北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

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