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;
    }
  • 相关阅读:
    Selenium 中ExpectedConditions 用法说明(最全整理)
    logback的使用和logback.xml详解
    彻底征服 Spring AOP 之 实战篇
    彻底征服 Spring AOP 之 理论篇
    面试
    Java面试
    Python的数据类型与数据结构
    利用Python的 counter内置函数,统计文本中的单词数量
    python爬虫Urllib实战
    python爬虫实战一(基于正则表达式学习)
  • 原文地址:https://www.cnblogs.com/droidxin/p/3417173.html
Copyright © 2011-2022 走看看