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

📄 main.c

📁 基于arm嵌入式处理器的NorFlash驱动以及烧录代码,附有详细pdf中文手册
💻 C
字号:
/********************************************************************************************
*filename:			main.c						
*author:			WUER xiao 
*create date:		2005-5-23 11:25                                                                      
*description:	    This file is used for GE00 NOR FLASH burning                                                             
*modify history:	                                                                      
*misc:           
********************************************************************************************/
#include "HA_typedef.h"
#include <stdio.h>
#include <string.h> 


/* 宏DEBUGPRINT如果定义,表示仅仅为test Nor Flash,未定义则表示需要烧录bootloader和OS kernel等内容 */
#define DEBUGPRINT


/************************************************/
#define		ERASENUM		0xd						/* 擦除大小,需要根据具体烧录内容大小计算得到 */


#define		ERASESIZE		0x40000					/* 每次擦除的大小 */	
#define		SIZE1			0x200					/* 第一次烧录的文件大小,单位为半字(halfword) */
#define		SIZE2			0xc8000					/* 第一次烧录的文件(kernel code)大小,单位为半字(halfword) */
#define		DataHead		0x30000000				/* 存放烧录内容的内存地址,用户可改变 */
#define		NorHead			0x20000000				/* 需要烧录的Nor Flash中的目标地址,取决于用户需要和bootloader的内容 */
#define		kernelHead		0x20001000				/* 需要烧录kernel的Nor Flash中的目标地址,取决于用户需要和bootloader的内容 */

/************************************************/
ER NorFlash_write( U32 address, U32 data );			/* Nor Flash操作函数 */ 
ER NorFlash_read( U32 address);
ER NorFlash_idlejud(U32 address);
ER NorFlash_clearSR(void);
ER NorFlash_bolckerase(U32 blockadd);
ER NorFlash_Normal(U32 address);
ER NorFlash_unlock( U32 address);
ER check(U32 head1, U32 head2, U32 num);


/************************************************/                                            
int main(void)
{
	U32 temp;
	U32 i;

/***** erase operation first ******/   	
   	for(i = 0; i<ERASENUM; i++) 
   	{
   		NorFlash_unlock(NorHead + i*ERASESIZE );				/* 擦除前需要解锁需要擦除的块,以防止芯片被锁无法擦除 */
		NorFlash_bolckerase(NorHead + i*ERASESIZE );			/* 擦除操作 */
	}
 	printf("Erase operation OK!!\n");
	

/***** test or burn bootleader ****/							/* 如果是烧录bootloader。需要设置断点,load二进制文件*/
    for(i=0;i<SIZE1;i++)
    {
        temp = *(RP)(DataHead + i*4);
    	NorFlash_write( (NorHead + i*4), temp );    	
    }    
    printf("write finished!!\n");
    


/***** burn kernel only ***********/							/* 需要再次设置断点,load OS kernel代码,然后继续执行*/
    for(i=0;i<SIZE2;i++){										/* kernel 烧录 */									
        temp = *(RP)(DataHead + i*4);
    	NorFlash_write( (kernelHead + i*4), temp );				/* 0x20001000地址需要和采用的bootloader内容相对应 */
    }
    
    
    
/****** set to normal back ******/	
	NorFlash_Normal(NorHead );
	
	printf("Burning complished now!! \n");

	while(1);
	

	
}
      
	

⌨️ 快捷键说明

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