XSBASE 270-S_裸机程序_初始化SDRAM
2012-07-28 14:24
351 查看
开发板与平台:XSBASE 270-S、PXA270
裸机程序:初始化SDRAM
编译环境:ads 1.20
调试方法:直接用工具烧至片内norflash的0x0地址
一:分析
由图4的原理图可知该开发板采用2块13*9*16位的32MB内存组成SDRAM。接线的方式由cpu手册中的图2可以看出,A23和A24用于BANK选择,行列选择复用A10-A22一共13条地址线。内外地址的映射模式可以由图3可以知道,MDCNFG[STACKx]要设置为0x00,采用Normal Bank Addressing Scheme的方式。
在SDRAM的设置方面,实验去掉了电源管理方面的设置,另外要打开自动刷新,这里要注意的是自动刷新(auto-refresh)和自刷新(Self-refresh)的区别,自刷新是在SDRAM休眠的时候为了保持SDRAM内的数据使用的。
SDRAM的时序相关的设置参考图5,数据手册中推荐的数值不一定正确,只要大概设置后使得SDRAM使用稳定即可。
图1:
图2:
图3:
图4:
图5:
二:程序代码
Boot.s:
Initmem.s:
裸机程序:初始化SDRAM
编译环境:ads 1.20
调试方法:直接用工具烧至片内norflash的0x0地址
一:分析
由图4的原理图可知该开发板采用2块13*9*16位的32MB内存组成SDRAM。接线的方式由cpu手册中的图2可以看出,A23和A24用于BANK选择,行列选择复用A10-A22一共13条地址线。内外地址的映射模式可以由图3可以知道,MDCNFG[STACKx]要设置为0x00,采用Normal Bank Addressing Scheme的方式。
在SDRAM的设置方面,实验去掉了电源管理方面的设置,另外要打开自动刷新,这里要注意的是自动刷新(auto-refresh)和自刷新(Self-refresh)的区别,自刷新是在SDRAM休眠的时候为了保持SDRAM内的数据使用的。
SDRAM的时序相关的设置参考图5,数据手册中推荐的数值不一定正确,只要大概设置后使得SDRAM使用稳定即可。
图1:
图2:
图3:
图4:
图5:
二:程序代码
Boot.s:
IMPORT InitMem AREA boot, CODE, READONLY ENTRY ;初始化内存 BL InitMem LOOP B LOOP END
Initmem.s:
EXPORT InitMem MDCNFG EQU 0x48000000 MDREFR EQU 0x48000004 MDMRS EQU 0x48000040 ;************************************** ;Init Memory ;************************************** AREA InitMem,CODE,READONLY ENTRY LDR R8, =0x1 LDR R0, =MDCNFG LDR R1, [R0] ;Use normal addressing mode(default) BIC R1, R1, R8, LSL #12 BIC R1, R1, R8, LSL #10 ;tRP = 3 clks, CL = 3, tRCD = 3 clks, tRASMIN =7 clks, tRC=10 clks BIC R1, R1, R8, LSL #8 ORR R1, R1, R8, LSL #9 ;4 internal SDRAM banks ORR R1, R1, R8, LSL #7 ;13 row address bits ORR R1, R1, R8, LSL #6 BIC R1, R1, R8, LSL #5 ;9 column address bits BIC R1, R1, R8, LSL #4 ORR R1, R1, R8, LSL #3 ;32 bits BIC R1, R1, R8, LSL #2 ;SDRAM partition enabled ORR R1, R1, R8, LSL #0 STR R1, [R0] LDR R0, =MDREFR LDR R1, [R0] ;SDCLK<1> Dependent on MDREFR[K1RUN] BIC R1, R1, R8, LSL #24 ;Self-refresh disabled BIC R1, R1, R8, LSL #22 ;0 = SDCLK<1> equals CLK_MEM BIC R1, R1, R8, LSL #17 ;SDCLK<1> Enabled ORR R1, R1, R8, LSL #16 ;SDCKE Enabled ORR R1, R1, R8, LSL #15 ;DRI = 0x31 LDR R8, =0xFFF BIC R1, R1, R8, LSL #0 LDR R8, =0x1 ORR R1, R1, R8, LSL #0 ORR R1, R1, R8, LSL #4 ORR R1, R1, R8, LSL #5 STR R1, [R0] LDR R0, =MDMRS LDR R1, [R0] ;CAS Latency = 3 BIC R1, R1, R8, LSL #6 ORR R1, R1, R8, LSL #5 ORR R1, R1, R8, LSL #4 STR R1, [R0] MOV PC, LR END
相关文章推荐
- XSBASE 270-S_裸机程序_流水灯
- XSBASE 270-S_裸机程序_矩阵键盘
- XSBASE 270-S_裸机程序_image重定向
- 裸机程序三:通过存储控制器初始化内存SDRAM
- ARM裸机程序研究 - S3C2440时钟初始化
- 初始化SDRAM之前,程序在哪里运行
- 【OK6410裸机程序】串口初始化
- s5pv210运行裸机程序的方法之在SDRAM(DDR2)中运行
- U-Boot的移植之(三)实战篇:移植U-Boot到XSBASE270开发板
- ARM裸机程序之存储管理器控制SDRAM
- 嵌入式Linux裸机开发(五)——SDRAM初始化
- U-Boot的移植之(三)实战篇:移植U-Boot到XSBASE270开发板
- U-Boot的移植之(三)实战篇:移植U-Boot到XSBASE270开发板
- ARM裸机程序之存储管理器控制SDRAM
- s5pv210运行裸机程序的方法之在SDRAM(DDR2)中运行
- s3c2440的SDRAM裸机程序
- ARM裸机程序开发(十):C语言环境初始化
- 嵌入式Linux裸机开发(五)——SDRAM初始化
- 【OK6410裸机程序】时钟初始化
- error C2440: “初始化”: 无法从“const char *”转换为“ATL::CStringT<BaseType,StringTraits>”