flash.c

来自「flash程度源代码,该程度经过反复测试,没有问题」· C语言 代码 · 共 71 行

C
71
字号
#include "config.h"
#include "isp.h"

/****************************** FLASH写入函数 ***************************
* 函数原型:void flash_wr(Uchar xdata *addr, Uchar val)
* 功    能:向映射到外部数据存储器空间的FLASH地址单元addr写入一个字节
*           的数据val。
*************************************************************************/
void flash_wr(Uchar xdata *addr, Uchar val) {
  *addr = val;          
}

/****************************** FLASH读取函数 ***************************
* 函数原型: Uchar flash_rd(Uchar xdata *addr)
* 功    能:从映射到外部数据存储器空间的FLASH地址单元addr读取一个字节
*           的数据并返回主调函数。
*************************************************************************/
Uchar flash_rd(Uchar xdata *addr) {  
  return *addr;  
}

/****************************** FLASH命令函数 ***************************
* 函数原型: void flash_cmd(Uchar cmd)
* 功    能:执行FLASH命令序列cmd。
*************************************************************************/
void flash_cmd(Uchar cmd) {
  flash_wr(0x5555, 0xAA);
  flash_wr(0x2AAA, 0x55);
  flash_wr(0x5555, cmd);
} 

/****************************** FLASH擦除函数 ***************************
* 函数原型: void flash_erase(void)
* 功    能:擦除整个FLASH存储器。
*************************************************************************/
void flash_erase(void) {
  Uchar pol_n, pol_n_1;
  flash_cmd(0x80);     	
  flash_cmd(0x10);
  pol_n_1 = flash_rd(0x5555);
  pol_n   = flash_rd(0x5555);  
  while ((pol_n ^ pol_n_1) == 0x40) {  
    pol_n_1 = pol_n;
    pol_n   = flash_rd(0x5555);
  }
}

/****************************** FLASH编程函数 ***************************
* 函数原型: void flash_prog(Uint16 addr, Uchar value)
* 功    能:对指定的FLASH存储器地址addr编程一个字节的数据value。
*************************************************************************/
void flash_prog(Uint16 addr, Uchar value) {                  
  flash_cmd(0xA0);  
  flash_wr(addr, value); 
  while (flash_rd(addr) != value);
} 

/****************************** FLASH_ID函数 ***************************
* 函数原型: Uint16 flash_id()
* 功    能:读取双字节FLASH存储器生产厂商和器件ID,高字节为厂商ID,
*           低字节为器件ID。
*************************************************************************/
Uint16 flash_id() {
  Uint16 flash_id=0;
  flash_cmd(0x90);      
  flash_id = flash_rd(0x0000) << 8 | flash_rd(0x0001);  
  flash_cmd(0xF0);    
  return flash_id;            
}

⌨️ 快捷键说明

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