VHDL编程 应用程序实例精讲 教程与事例

源代码在线查看: flash.c

软件大小: 106 K
上传用户: susanxuwenjun
关键词: VHDL 编程 应用程序 教程
下载地址: 免注册下载 普通下载 VIP

相关代码

				#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;            
				}
				
							

相关资源