📄 2410下flash用于编程的主函数.c
字号:
int main()
{
Mem_Init();
Port_Init();
Uart_Init(115200);
printk("\n\r***********************************\n\r");
printk("Flash Write Program for S3C2410A Evaluation Board");
printk("\n\r***********************************\n\r");
if(flash_init()==0) //识别Flash
return(0); //没有发现任何Flash或Flash型号不支持
while(1){
printk("\n\rFlash Program Menu:\n\r");
printk("Press 1 for Boot Loader program.\n\r");
printk("Press 2 for Ramdisk program.\n\r");
printk("Press 3 for Linux kernel program.\n\r");
switch(Uart_Getch()){
case'1':
printk("write boot loader:from 0x30100000 to 0x00000000,length=50KB\n\r");
flash_erase(0,50000); //Flash 擦除
printk("programing...\n\r"); //Flash 编程
flash_block_transfer((unsigned short*)(0x30100000),0,50000);
printk("verifing...\n\r"); //比较编程结果
mem_cmp((U32*)(0x30100000),(U32 *)0.50000);
break;
case'2':
printk("write ramdisk:from 0x30300000 to 0x00100000,length=0x180000\n\r");
flash_erase(0x100000,0x180000); //Flash 擦除
printk("programing...\n\r"); //Flash 编程
flash_block_transfer((unsigned short*)(0x30300000),0x100000,0x180000);
printk("verifing...\n\r"); //比较编程结果
mem_cmp((U32*)(0x30300000),(U32 *)0x100000,0x180000);
break;
case'3':
printk("write linux kernel:from 0x30200000 to 0x00010000,length=0xf0000\n\r");
flash_erase(0x10000,0xF0000); //Flash 擦除
printk("programing...\n\r"); //flash 编程
flash_block_transfer((unsigned int*)(0x30200000),0x00010000,0xf0000);
printk("verifing...\n\r"); //比较编程结果
mem_cmp((U32*)(0x30200000),(U32 *)0x10000,0xf0000);
break;
default:printk("wrong input\n\r");
}
printk("program finished!\n\r press any key to continue");
Uart_Getch();
}
return(1);
}
//mem_cmp函数的代码如下
int mem_cmp(U32 *src,U32 *des,U32 length){
U32 i;
for(i=0,length=length>>2;i<length;i++)
if(src[i]!=des[i]){
printk("cmp error:src[0x%x]=0x%x,des[0x%x]=0x%x\n\r",i*4,src[i],i*4,des[i]);
return 0;
}
return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -