zoukankan      html  css  js  c++  java
  • MSP430FLASH小结

    对FLASH编程必须满足编程最小电压2.2V;

    内部FLASH必须在内存定时器设定的工作频率范围内工作,这个频率为257~476KHz。对于FLASH来讲编程和擦除的速度相对较慢。

    MSP430内部集成了Flash控制器。主要由三个部分组成,分别为4个配置寄存器,Flash定时器和编程电压发生器。

    配置寄存器主要用来配置Flash控制器的工作状态,Flash定时器用来产生编程会哦或者擦出操作的时钟。编程电压发生器用于产生编程火花则擦除操作中所需要的电压。

    特别注意的是,从地址空间0xFFFF到0xFFC0是中断向量表的位置,这块区域可以不做中断向量表,也可以作为用户空间使用,但是不建议这样做。如果开启的中断所对应的中段向量表位置被用作用户空间使用,可能会导致中断服务函数发生跳转错误,进而导致代码跑飞。其中,存储在A段的往往存有器件的校准信息,所以对Segment A的操作设立了保护机制。

    在Flash的定时器功能框图中,其时钟源可以是任意一个,通过FSSELx位来完成,选中的时钟源可以通过FNx来进行分频操作。

    对Flash进行擦除,除了进行擦除模式配置,还需要对Flash进行一次假写入,一个Flash的写操作用来启动定时器和电压发生器,在写入之后便会对Flash进行擦除。

    注意:在对Flash进行写操作之前必须进行一次擦除,否则可能会对Flash造成损毁。

    基本步骤:1设置时钟源,得到Flash的工作频率。

         2.

    #include "msp430x14x.h"
    typedef unsigned char uchar;
    typedef unsigned int uint;
    
    int main( void )
    {
      // Stop watchdog timer to prevent time out reset
      WDTCTL = WDTPW + WDTHOLD;
      FCTL2=FWKEY+FSSEL0+FN0;//   时钟源设置,得到Flash的工作频率;
      
      return 0;
    }
    
    void Write_SegA(uchar value)
    {
      uchar * flashP;
      uchar i;
      flashP=(uchar * )0x1080;
      
      FCTL1=FWKEY+ERASE;
      FCTL3=FWKEY;
      *flashP=0;  //假写入已启动擦除操作;
      
      FCTL1=FWKEY+WRT;
      for(i=0;i<128;i++)
      {
        *flashP++=value;
      }
      FCTL1=FWKEY;
      FCTL3=FWKEY+LOCK;
    }
    
    void Copy()
    {
       uchar  * flashPa,*flashPb,i;
       flashPa=(uchar *)0x1080;
       flashPb=(uchar *)0x1000;
       FCTL1=FWKEY+ERASE;
       FCTL3=FWKEY;
       *flashPb=0;
       FCTL1=FWKEY+WRT;
       for(i=0;i<128;i++)
       {
         *flashPb++=*flashPa;
       }
       FCTL1=FWKEY;
       FCTL3=FWKEY+LOCK;
    }
  • 相关阅读:
    VMware 8安装Mac OS X 10.7 Lion正式版
    linq to sql sum
    拍照,去相册剪切图片
    Binding for WPF Styles
    JDK1.8简单配置环境变量两步曲
    hibernate系列之四
    idea中使用逆向工程三部曲
    hibernate系列之一
    hibernate系列之二
    《JSON笔记之二》封装JSONUtil
  • 原文地址:https://www.cnblogs.com/droidxin/p/3417173.html
Copyright © 2011-2022 走看看