專題8-記憶體初始化
阿新 • • 發佈:2019-01-05
對於記憶體:
SRAM一般作為cpu的墊腳石(儲存較快,不需要重新整理)
DRAM:分為SDRAM、DDR 、DDR2(需要重新整理,儲存相對較慢)
2440的記憶體是64M,是由兩個32M的記憶體晶片與處理器連接合成的。處理器共有27根地址線,可以訪問2的27次方,即128M記憶體,由於有8個片選端,即總共可以訪問128*8=1G的記憶體。對於2440,cpu的低16位地址線分別連線兩塊32M的記憶體晶片,32位的資料線的前16位與後16位分別連線兩塊記憶體的資料線,即一個時鐘週期最多可以同時傳送32bit的資料。
檢視datasheet的memory controler可以發現,bank0為cpu的墊腳石,一般bank6與bank7作為記憶體區域,起始地址為0x30000000。此時需要配置儲存控制暫存器,包括配置資料匯流排寬度
因為比方說,*0x30008000=0x5;
0x30008000屬於哪一個bank,行地址、列地址是什麼——需要儲存控制器做一個分解與解析,再對該記憶體處(norflash、網絡卡、記憶體等)寫入相應值。
按照datasheet的儲存控制器配置以下7個暫存器:
程式碼如下:
#define mem_contrl 0x48000000 % BWSCON:Bus width & wait status control register
init_sdram:
ldr r0, =mem_contrl
add r3, r0, #4*13
adrl r1, mem_data %adrl與adr指令類似,為偽指令其載入的地址範圍要寬,為32 位
0:
ldr r2, [r1], #4
str r2, [r0], #4
cmp r0, r3
bne 0b %不等於0跳轉到0處,b表示向前跳轉
mov pc, lr
mem_data:
.long 0x22000000
.long 0x00000700
.long 0x00000700
.long 0x00000700
.long 0x00000700
.long 0x00000700
.long 0x00000700
.long 0x00018001
.long 0x00018001
.long 0x008c04f5
.long 0x000000b1
.long 0x00000030
.long 0x00000030