📄 main.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 + -