⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 flash.c

📁 伺服控制器主要用于电动执行器的控制 在工业方面大量应用
💻 C
字号:
//参数:wAddr为地址,范围0x1100~0xFFDF   0xFFE0~0xFFFF是中断向量的地址
void ReadFlash(unsigned int wAddr,unsigned char bLen)//@"MYSET"//wAddr:要读取内容的地址 ;blen:读取内容的长度
{
  unsigned char *bBuf=0;
  unsigned int i = 0;
  while (bLen--)
 {
   bBuf = (unsigned char *)wAddr++;
   Temp[i] = *bBuf;
   i++;
 }
 return ;
}
//字节编程
void WriteFlashB(unsigned int wAddr,unsigned char DataB)//@"MYSET"//wAddr:要编程的地址 ;DataB要编程的字节
{
  _DINT();
  FCTL1 = FWKEY+WRT;//打开写模式
  FCTL3 = FWKEY; //写安全键值

  while(FCTL3&BUSY==BUSY);  //等待FLASH存储器完成操作
  *((unsigned char *)wAddr) = DataB;
  while(FCTL3&BUSY==BUSY);  //等待FLASH存储器完成操作

  FCTL1 = FWKEY;
  FCTL3 = FWKEY+LOCK;
  _EINT();
}

int EraseFlash(unsigned int wAddr)//@"MYSET"//wAddr:要擦除的段内的任一地址
{
  _DINT();
  unsigned char *P0=0;
  while(FCTL3&BUSY==BUSY);  //测试FLASH是否忙

  P0 = (unsigned char *)wAddr;
  FCTL1 = FWKEY+ERASE;//擦除单个段
  FCTL3 = FWKEY; //写安全键值
  *P0 = 0;
  while(FCTL3&BUSY==BUSY);  //等待FLASH存储器完成操作
  FCTL3 = FWKEY+LOCK;
  _EINT();
  return 1;
}

void FLASH_Operation()
{
  unsigned char q0;
  unsigned int iq0;
  unsigned char *pq0;
  pq0 = FLASH_DATA;

  FCTL2 = FWKEY + FSSEL_2 + FN0;//选择时钟源:SMCLK,2分频 + FN4 + FN1

  EraseFlash(FLASH_B_ADR);  //段擦除首地址0xF040
  iq0 = FLASH_B_ADR;
  for(q0=0;q0<N_Data;q0++)
  {
    WriteFlashB(iq0,*pq0);  //写字节数据
    iq0++;     //字节地址+1
    pq0++;  //字节指针+1
  }

  ReadFlash(FLASH_B_ADR,N_Data);
  for(int q0=0;q0<N_Data;q0++)
  {
     FLASH_DATA[q0] = Temp[q0];
  }
}

⌨️ 快捷键说明

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