VHDL编程
应用程序实例精讲
教程与事例
源代码在线查看: flash.c
#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) flash_cmd(0xF0);
return flash_id;
}