flash.c

来自「430单片机片内flash调试所用的程序 包括读和写」· C语言 代码 · 共 55 行

C
55
字号
#include "ss.h"
//写入int型的数字,发现flash每次一存储就是两个字节
//输入要写入的数值和地址.地址格式是0x4000....
//对flash存储器的擦除必须是一段一段的进行.
//不可能一个字节一个字节的擦除
//主存储器第n(0-119)段的地址(FE00H-n x 512)----(FFFFH-n x 512)
//取擦除地址从0x4400开始,即n=5D,到44FF.取写数据的地址从0x4410开始,然后向下写数据。
void write_para(void)
{
  
  unsigned int *Flash_ptr;                          // Flash pointer  
  Flash_ptr = (unsigned int *)0x4400;              // Initialize Flash pointer
  FCTL1 = FWKEY + ERASE;                    // Set Erase bit,FWKEY=A5,写操作
  FCTL3 = FWKEY;                            // Clear Lock bit
  *Flash_ptr = 0;    
  //while(FCTL3&BUSY);        // Dummy write to erase Flash segment
  FCTL1 = FWKEY + WRT;                      // Set WRT bit for write operation 
  Flash_ptr = (unsigned int *)0x4410;
  *Flash_ptr =PV_bCyclesNum; 
   Flash_ptr = (unsigned int *)0x4412;
  *Flash_ptr =Main_bStatusFlag; 
   Flash_ptr = (unsigned int *)0x4414;
  *Flash_ptr =w_PAGEADDR; 
   Flash_ptr = (unsigned int *)0x4416;
  *Flash_ptr =w_BYTEADDR; 
  
  //while(FCTL3&BUSY);  // Write value to flash
  FCTL1 = FWKEY;                            // Clear WRT bit
  FCTL3 = FWKEY + LOCK; // Reset LOCK bit
  
}
//从某个地址addr取出取出一个char型的数字
unsigned int read_Segment(int addr)
{
  unsigned int value;
  unsigned int *Flash_ptr; 
  Flash_ptr = (unsigned int *)addr;
  value=*Flash_ptr;    
  return value;
}  

void read_para(void)
{
  
  PV_bCyclesNum=(read_Segment(0x4410)&0xFF);
  Main_bStatusFlag=(read_Segment(0x4412)&0xFF);
  w_PAGEADDR=read_Segment(0x4414);
  w_BYTEADDR=read_Segment(0x4416);
  
  
}
  //*******************************************
  
  

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?