4)、REFRESH(SDRAM refresh Control Register):0x008e0459 Trp[21:20]:DRAM/SDRAM RAS pre-charge Time 设定当RAS(列地址信号)需要重新寻址时,要隔多久时间才能开始下次的寻址动作,通常被视为RAS的充电时间,理论上是越短越好。其选项值与上面讲到的一样,所以建议将其设定为2T(2个clock周期),这样可以将内存性能提高;若发现系统运行不稳定,再将其改回3T。 Trc[19:18] SDRAM RC minimum Time 这个参数用来控制内存的行周期时间。tRC决定了完成一个完整的循环所需的最小周期数,也就是从行激活到行充电的时间。 其中的R_CNT用于控制SDRAM的刷新周期,占用REFRESH寄存器的[10:0]位,它的取值可如下计算得来。(SDRAM的时钟频率就是HCLK) R_CNT=2^11+1-SDRAM时钟频率(MHz)*SDRAM刷新周期(uS) 在未使用PLL时,SDRAM时钟频率等于晶振频率12MHz;SDRAM的刷新周期在SDRAM的数据手册上有说明。 K4S561632H-UC75手册标明:Refresh period is 64ms 。
5)、BANKSIZE:0xb2 位[7]=1:Enable burst operation 位[5]=1:SDRAM power down mode enable 位[4]=1:SCLK is active only during the access(recommended) 位[2:1]=010 BANK6.BANK7对应的地址空间:010---128M/128M,001--64M/64M
1)、初始化堆栈。 对6中工作模式进行堆栈的初始化。 设置方法: 改变CPSR内的状态位,使处理器切换到不同的状态,然后给SP赋值。 ;**************************************************** ;*The function for initializing stack * ;**************************************************** InitStacks ;Don't use DRAM,such as stmfd,ldmfd...... ;SVCstack is initialized before ;Under toolkit ver 2.50, 'msr cpsr,r1' can be used instead of 'msr cpsr_cxsf,r1' mrs r0,cpsr bic r0,r0,#MODEMASK orr r1,r0,#UNDEFMODE|NOINT msr cpsr_cxsf,r1 ;undefMode ldr sp,=UndefStack
/* * Step 2: * initialize board environment. */ ret = board_init(); //[arch/s3c2410/smdk.c] (1)init_time();[arch/s3c2410/proc.c] (2)set_gpios();[arch/s3c2410/smdk.c] . if (ret) { putstr("Failed a board_init() procedure\r\n"); error(); }
/* * Step 3: * MMU management MMU初始化。 * When it's done,vivi is running on the ram and MMU is enabled. * */ mem_map_init(); mmu_init(); putstr("Succeed memory mapping.\r\n");
/* /* * Now, vivi is running on the ram. MMU is enabled. */
/* * Step 4: * initialize the heap area. 堆初始化。 */ /* initialize the heap area*/ ret = heap_init(); //heap_init(void); [lib/heap.c] . if (ret) { putstr("Failed initailizing heap region\r\n"); error(); }
/* Step 5: * * * initialize the MTD device. step1-step5:完成设备初始化工作。 * */ ret = mtd_dev_init(); //mtd_dev_init(void); [drivers/mtd/mtdcore.c] .