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...