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

📄 ext_flash.c

📁 这是一个扩展flash的驱动程序
💻 C
字号:
/****************************************Copyright (c)****************************************************                                      **                                          	公 司**                                         	部 门****                                 http://www.armgcc.com****--------------文件信息--------------------------------------------------------------------------------** 文 件 名: 		ext_flash.c** 创 建 人: 		李海军** 创建日期: 	2006年5月24日** 描    述: 		该文件提供外部FLASH  的所有操作****--------------历史版本--------------------------------------------------------------------------------** 创 建 人: 		李海军** 版      本: 		V1.0** 日   期: 		2006年5月24日** 描   述: 		原始版本****------------------------------------------------------------------------------------------------------********************************************************************************************************/#include "config.h"/******************************************* 全局变量定义 ***********************************************//******************************************* 局部函数声明 ***********************************************//*********************************************************************************************************;** 函数名称: 	ext_flash_init;** 功能描述: 	外部flash 初始化;** ;** 参    数: 	无;**  ;** 返 回 值: 	无;**         ;** 作   者: 	李海军;** 日   期: 	2006年5月24日;**-------------------------------------------------------------------------------------------------------;** 修 改 人: ;** 日   期: ;**------------------------------------------------------------------------------------------------------;********************************************************************************************************/void ext_flash_init(void){}/*********************************************************************************************************;** 函数名称: 	ext_flash_get_id;** 功能描述: 	获取外部flash ID;** ;** 参    数: 	无;**  ;** 返 回 值: 	32  位ID;**         ;** 作   者: 	李海军;** 日   期: 	2006年5月24日;**-------------------------------------------------------------------------------------------------------;** 修 改 人: ;** 日   期: ;**------------------------------------------------------------------------------------------------------;********************************************************************************************************/UINT32 ext_flash_get_id(void){	UINT32 id = 0;    EXT_FLASH_WRITE (0xAAAA, 0xAA);     EXT_FLASH_WRITE (0x5555, 0x55);    EXT_FLASH_WRITE (0xAAAA, 0x90);      	id = 	EXT_FLASH_READ(0x0000) << 16;   	id +=	EXT_FLASH_READ(0x0002);   	      EXT_FLASH_WRITE (0xAAAA, 0xAA);    EXT_FLASH_WRITE (0x5555, 0x55);    EXT_FLASH_WRITE (0xAAAA, 0xF0);        return id;  }    /*********************************************************************************************************;** 函数名称: 	ext_flash_erase_sector;** 功能描述: 	FLASH  扇区擦除;** ;** 参    数: 	sector  	要擦除的扇区;**  ;** 返 回 值: 	错误信息或成功;**         ;** 作   者: 	李海军;** 日   期: 	2006年5月24日;**-------------------------------------------------------------------------------------------------------;** 修 改 人: ;** 日   期: ;**------------------------------------------------------------------------------------------------------;********************************************************************************************************/EXT_FLASH_RETURN_T ext_flash_erase_sector(UINT32 sector){    UINT16 	status 		= 0;    UINT32 	time	 	= 0;		if(sector >= EXT_FLASH_SECTORS)		return EXT_FLASH_PARA_ERROR;		sector <<= 12;    EXT_FLASH_WRITE(0xAAAA, 0xAA);    EXT_FLASH_WRITE(0x5555, 0x55);    EXT_FLASH_WRITE(0xAAAA, 0x80);    EXT_FLASH_WRITE(0xAAAA, 0xAA);    EXT_FLASH_WRITE(0x5555, 0x55);    EXT_FLASH_WRITE(sector,0x30);   	for(time = 0; time < 0x07ffffff; time ++)     {    	    	status = EXT_FLASH_READ(sector);   		   		if(status & EXT_FLASH_DQ7)   			return EXT_FLASH_SUCCESS;    }    return EXT_FLASH_TIMEOUT;}/*********************************************************************************************************;** 函数名称: 	ext_flash_erase_block;** 功能描述: 	FLASH  块擦除;** ;** 参    数: 	block 	要擦除的块;**  ;** 返 回 值: 	错误信息或成功;**         ;** 作   者: 	李海军;** 日   期: 	2006年5月24日;**-------------------------------------------------------------------------------------------------------;** 修 改 人: ;** 日   期: ;**------------------------------------------------------------------------------------------------------;********************************************************************************************************/EXT_FLASH_RETURN_T ext_flash_erase_block(UINT32 block){    UINT16 	status 		= 0;    UINT32 	time	 	= 0;		if(block >= EXT_FLASH_BLOCKS)		return EXT_FLASH_PARA_ERROR;		block <<= 16;    EXT_FLASH_WRITE(0xAAAA, 0xAA);    EXT_FLASH_WRITE(0x5555, 0x55);    EXT_FLASH_WRITE(0xAAAA, 0x80);    EXT_FLASH_WRITE(0xAAAA, 0xAA);    EXT_FLASH_WRITE(0x5555, 0x55);    EXT_FLASH_WRITE(block,0x50);   	for(time = 0; time < 0x07ffffff; time ++)     {    	    	status = EXT_FLASH_READ(block);   		   		if(status & EXT_FLASH_DQ7)   			return EXT_FLASH_SUCCESS;    }    return EXT_FLASH_TIMEOUT;}/*********************************************************************************************************;** 函数名称: 	ext_flash_erase_chip;** 功能描述: 	FLASH  整片擦除;** ;** 参    数: 	无;**  ;** 返 回 值: 	错误信息或成功;**         ;** 作   者: 	李海军;** 日   期: 	2006年5月24日;**-------------------------------------------------------------------------------------------------------;** 修 改 人: ;** 日   期: ;**------------------------------------------------------------------------------------------------------;********************************************************************************************************/EXT_FLASH_RETURN_T ext_flash_erase_chip(void){    UINT16 	status 		= 0;    UINT32 	time	 	= 0;    EXT_FLASH_WRITE(0xAAAA, 0xAA);    EXT_FLASH_WRITE(0x5555, 0x55);    EXT_FLASH_WRITE(0xAAAA, 0x80);    EXT_FLASH_WRITE(0xAAAA, 0xAA);    EXT_FLASH_WRITE(0x5555, 0x55);    EXT_FLASH_WRITE(0xAAAA, 0x10);   	for(time = 0; time < 0x07ffffff; time ++)     {    	    	status = EXT_FLASH_READ(0);   		   		if(status & EXT_FLASH_DQ7)   			return EXT_FLASH_SUCCESS;    }    return EXT_FLASH_TIMEOUT;}/*********************************************************************************************************;** 函数名称: 	ext_flash_program;** 功能描述: 	写数据到指定的FLASH 地址,写之前确保已擦除  ;** ;** 参    数: ;**			address	目标FLASH  地址;**			p_data	要写的数据;**			size		大小;**;** 返 回 值: 	错误信息或成功;**         ;** 作   者: 	李海军;** 日   期: 	2006年5月24日;**-------------------------------------------------------------------------------------------------------;** 修 改 人: ;** 日   期: ;**------------------------------------------------------------------------------------------------------;********************************************************************************************************/EXT_FLASH_RETURN_T ext_flash_program(UINT32 address, UINT16 * p_data, UINT32 size){    UINT16 	status 		= 0;    UINT32 	time 	= 0;	UINT16 *p_temp = (UINT16 *)p_data;	    while (size--)    {        EXT_FLASH_WRITE(0xAAAA, 0xAA);         EXT_FLASH_WRITE(0x5555, 0x55);         EXT_FLASH_WRITE(0xAAAA, 0xA0);                EXT_FLASH_WRITE(address, *p_temp);	   	for(time = 0; time < 0xffff; time ++) 	    {		    		    	status = EXT_FLASH_READ(address);	   		if((status & EXT_FLASH_DQ7) == (*p_temp & EXT_FLASH_DQ7))	   			break;	    }		if(time >= 0xffff)			return EXT_FLASH_TIMEOUT;			        address += 2;        p_temp++;    }    return EXT_FLASH_SUCCESS;}/*********************************************************************************************************;** 函数名称: 	ext_flash_read;** 功能描述: 	从指定的FLASH 地址读取指定大小的数据。 ;** ;** 参    数: ;**			address	目标FLASH地址;**			p_data	读出数据缓冲区;**			size		大小;**;** 返 回 值: 	错误信息或成功;**         ;** 作   者: 	罗辉联;** 日   期: 	2006年10月24日;**-------------------------------------------------------------------------------------------------------;** 修 改 人: ;** 日   期: ;**------------------------------------------------------------------------------------------------------;********************************************************************************************************/EXT_FLASH_RETURN_T ext_flash_read(UINT32 address, UINT16 * p_data, UINT32 size){	UINT16 *p_temp = (UINT16 *)p_data;		while(size--)	{		*p_temp = *((volatile UINT16 *)(EXT_FLASH_BASE + address));			address += 2;		p_temp++;	}		 return EXT_FLASH_SUCCESS;}

⌨️ 快捷键说明

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