對于內(nèi)存:
SRAM一般作為cpu的墊腳石(存儲較快,需要刷新) DRAM:分為SDRAM、DDR 、DDR2(不需要刷新,但存儲相對較慢)
2440的內(nèi)存是64M,是由兩個32M的內(nèi)存芯片與處理器連接合成的。處理器共有27根地址線,可以訪問2的27次方,即128M內(nèi)存,由于有8個片選端,即總共可以訪問128*8=1G的內(nèi)存。對于2440,cpu的低16位地址線分別連接32M的內(nèi)存芯片,32位的數(shù)據(jù)線的前16位與后16位分別連接兩塊內(nèi)存的數(shù)據(jù)線,即一個時鐘周期最多可以同時傳送32bit的數(shù)據(jù)。 查看datasheet的memory controler可以發(fā)現(xiàn),bank0為cpu的墊腳石,一般bank6與bank7作為內(nèi)存區(qū)域,起始地址為0x30000000。此時需要配置存儲控制寄存器,包括配置總線寬度、是否等待控制等。 因為比方說,*0x30008000=0x5; 0x30008000屬于哪一個bank,行地址、列地址是什么——需要存儲控制器做一個分解與解析,再對該內(nèi)存處(norFlash、網(wǎng)卡、內(nèi)存等)寫入相應值。
代碼如下:
#define mem_contrl 0x48000000 % BWSCON:Bus width & wait status control registerinit_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跳轉(zhuǎn)到0處,b表示向前跳轉(zhuǎn) mov pc, lrmem_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新聞熱點
疑難解答