對于內存:
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、網卡、內存等)寫入相應值。
代碼如下:
#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跳轉到0處,b表示向前跳轉 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新聞熱點
疑難解答