首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

ARM Linux BOOTLOADER全程详解(4)

ARM Linux BOOTLOADER全程详解(4)

410init.c file
int main(int argc,char **argv)
{
u32 test = 0;
//压缩后的IMAGE地址
void (*theKERNEL)(int zero, int arch, unsigned long params_addr) =
(void (*)(int, int, unsigned long))RAM_COMPRESSED_KERNEL_BASE;
int i,k=0;
// downPt=(RAM_COMPRESSED_KERNEL_BASE);
chkBs=(_RAM_STARTADDRESS);//SDRAM开始的地方
// fromPt=(FLASH_LINUXKERNEL);
MMU_EnableICache();
ChangeClockDivider(1,1); // 1:2:4
ChangeMPllvalue(M_MDIV,M_PDIV,M_SDIV); //Fin=12MHz FCLK=200MHz
Port_Init();//设置I/O端口,在使用com口前,必须调用这个函数,否则通信芯片根本得不到数据
Uart_Init(PCLK, 115200);//PCLK使用默认的200000,拨特率115200
/*******************(检查ram空间)*******************/
Uart_SendString("/n/tLinux S3C2410 Nor BOOTLOADER/n");
Uart_SendString("/n/tChecking SDRAM 2410loader.c.../n");
for(;chkBs<0x33FA0140;chkBs=chkBs+0x4,test++)//
/*
根据我的经验,最好以一个字节为递增,我们的板子,在256byte递增检测的时候是没问题的,但是以1byte递增就出错了,第13跟数据线随几的会冒”1”,检测出来是硬件问题,现象如下
用仿真器下代码测试SDRAM,开始没贴28F128A3J FLASH片子,测试结果很好,但在上了FLASH片子之后,测试数据(data)为0x00000400连续成批写入读出时,操作大约1k左右内存空间就会出错,而且随机。那个出错数据总是变为0x00002400,数据总线10位和13位又没短路发生。用其他数据//测试比如0x00000200;0x00000800没这问题。dx帮忙。
至今没有解决,所以我用不了Flash. */{
chkPt1 = chkBs;
*(u32 *)chkPt1 = test;//写数据
if(*(u32 *)chkPt1==1024))//读数据和写入的是否一样?
{
chkPt1 += 4;
Led_Display(1);
Led_Display(2);
Led_Display(3);
Led_Display(4);
}
else
goto error;
}
Uart_SendString("/n/tSDRAM Check Successful!/n/tMemory Maping...");
get_memory_map();
继承事业,薪火相传
返回列表