儲存控制器和SDRAM

2021-09-02 20:36:31 字數 1884 閱讀 8282

start.檔案

.equ mem_ctl_base, 0x48000000 命令用於把常量值設定為可以在文字段中使用的符號

.equ sdram_base, 0x30000000 //@類似於c語言中#define @0x48000000-bwscon,0x30000000-bank6

.text   

.global  _start  

_start:

ldr   sp ,=4096

bl  diable_watch_dog   //關看門狗

bl  memsteup     //設定儲存器

bl  copy_sdram  //把**複製到sdram中

ldr pc,=on_sdram  

on_sdram:

ldr  sp ,=0x34000000//設定堆疊的指標

ldr  lr ,=halt_loop//lr鏈結位址暫存器,

ldr  pc ,=main//呼叫c函式因為c函式執行完需要返回返回的時候pc指標指向lr中的位址

halt_loop:

b  halt_loop  

init.c檔案

#include"s3c24xx.h"

void  diable_watch_dog();   //關看門狗

void  memsteup();          //設定儲存器

void  copy_sdram();       //把**複製到sdram中

//關看門狗

void  diable_watch_dog()

//設定儲存控制器 使用sdram

void  memsteup()

//把**複製到sdram中

void  copy_sdram()   

}main.c檔案

#include"s3c24xx.h"

#include

#define  gpfcon  (*(volatile  unsigned long  *)0x56000050)

#define  gofdat  (*(volatile  unsigned long  *)0x56000054)

#define gpf4_out (1<<8)

#define gpf5_out (1<<10)

#define gpf6_out (1<<12)

void  delay(int x)

int  main()

return 0;

}鏈結指令碼檔案

sections

. = align(4) ;

.data   :

. = align(4) ;

.bss    :

}makefile

objs:=start.o  init.o  main.o  

sdram.bin:$(objs)

arm-linux-ld  -tsdram.lds  -o  sdram_elf  $^

arm-linux-objcopy  -o  binary   -s  sdram_elf   $@

arm-linux-objdump  -d  -m  arm  sdram_elf>sdram.dis

%.o:%.c

arm-linux-gcc  -wall -o2 -c   -o   $@  $<

%.o:%.s

arm-linux-gcc  -wall  -o2  -c  -o  $@  $<

.phony:clean

clean :

rm  -f  *.o  sdram_elf   sdram_dis   sdram.bin

SDRAM控制器新增讀寫FIFO

在原來控制器的基礎上新增了讀寫fifo,對資料進行快取,從而解決了原控制器在某些時刻讀寫被忽略掉 比如重新整理請求和寫請求同時到來 導致資料的儲存和讀寫出現遺漏 其中,sdram control 模組的寫使能wr 和讀使能rd 是分別通過判斷寫fifo 模組和讀fifo 模組中所儲存的資料量來決定的...

儲存控制器

嵌入式linux學習筆記 三 儲存控制器 一 使用儲存控制器訪問外設的原理 1 s3c2440的位址空間 s3c2440對外引出27根位址線addr0 addr26,訪問範圍只有128mb,cpu對外還引出8根片選訊號ngcs0 ngcs7,對應bank0 bank7,當訪問bankx的位址空間時,...

儲存控制器

在s3c2410 s3c2440中,儲存控制器提供了訪問外設 所需的訊號。其中,位址線addr0 addr26的訪問範圍為128m,此外cpu還對外引出了8根片選訊號,ngsc0 ngsc7,對應於bank0 bank7,如此一來,位址空間達到了1g。每乙個bank其實可以對應一種外設。比如 ban...