加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

MSP430的Flash操作

发布时间:2020-12-15 17:49:24 所属栏目:百科 来源:网络整理
导读:#include msp430x14x.h #define uint unsigned int #define uchar unsigned char /*********************************************************************************************** ?精准的延时程序 **************************************************

#include <msp430x14x.h>

#define uint unsigned int
#define uchar unsigned char

/***********************************************************************************************

?精准的延时程序

***********************************************************************************************/

#define CPU_F ((double)8000000.0)
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))

uchar? value;
void write_SegA(char value);
void copy_A2B(void);
/*********************************************************************
????? FCTL1:用于控制所有写(编程)或者删除操作的有效位
????? FCTL2:主要对进入时序发生器的时钟进行定义
????? FCTL3:用于控制FLASH存储器操作,保存相应的状态标志和错误标志
*********************************************************************/

void main(void)
{
? WDTCTL = WDTPW + WDTHOLD;
? FCTL2 = FWKEY + FSSEL_1 + FN_1;//定义原始时钟,W是A5? R 96? 选择MCLK,2分频
????????????????????????????????
? value =0;
? while(1)
? {
??? write_SegA(value++);//写信息段A
??? copy_A2B();???????? //信息段A复制到信息段B
? }
?
}

/*******************写信息段A******************/
void write_SegA(char value)
{
? char *Flash_ptr;????????????? //定义flash指针
? uint i;
? Flash_ptr = (char *)0x1080;?? //定义起始的地址
? FCTL1=FWKEY+ERASE;??????????? //设置允许编程位
? FCTL3=FWKEY;?????????????????? //清除LOCK位
? *Flash_ptr = 0;??????????????? //空写,启动擦除
? FCTL1=FWKEY+WRT;??????????????? //允许写
? for(i=0;i<128;i++)??????????? //写够128个字节
? {
??? *Flash_ptr++=value;
? }
? FCTL1=FWKEY;???????????????
? FCTL3=FWKEY+LOCK;?????????? //锁定
}

void copy_A2B(void) { ? char *Flash_ptrA; ? char *Flash_ptrB; ? uint i; ? Flash_ptrA=(char *)0x1080; ? Flash_ptrB=(char *)0x1000; ? FCTL1=FWKEY+ERASE;??????????? //设置允许编程位 ? FCTL3=FWKEY;???????????????????? //清除LOCK位 ? *Flash_ptrB=0; ? FCTL1=FWKEY+WRT;????????????? //允许写 ? for (i=0;i<128;i++) ? { ??? *Flash_ptrB++=*Flash_ptrA; ? } ? FCTL1= FWKEY; ? FCTL3=FWKEY+LOCK;???????? //锁定 }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读