S3C2440 9 複製程式到SDRAM中執行

2021-10-06 13:32:35 字數 2647 閱讀 3794

s3c2440的mmu有一種「steppingstone」.技術,是協助mcu從無法執行程式的nand flash執行啟動程式的一種方法,其啟動步驟如下:

彙編**:

/* 相當於巨集定義,定義儲存控制器和sdram的基位址 */

.equ mem_ctl_base, 0x48000000

.equ sdram_base, 0x30000000

.text

.global _start

_start:

/* 採用呼叫函式的形式 */

bl watch_dog_close @關閉看門狗

bl memsetup @設定儲存控制器的13個暫存器

bl copy_steppingstone_to_sdram @將steppingstone的4kb複製到sdram

ldr pc, =on_sdram @當前程式跳轉到sdram中去執行

on_sdram:

ldr sp, =0x34000000 @設定棧

bl main @跳轉去執行main函式

halt_loop:

b halt_loop

watch_dog_close:

/* 關閉看門狗,否則會一直重啟,位址0x53000000,[0]位寫0關閉 */

ldr r0, =0x53000000

ldr r1, =0

str r1, [r0]

mov pc, lr

memsetup:

/* 儲存控制器的暫存器配置,配置儲存控制器以使用sdram */

mov r1, #mem_ctl_base

adrl r2, mem_cfg_val @將13個暫存器的值偽讀取取到r2中

add r3, r1, #52 @r3=r1+52 52:13*4(13個4byte暫存器)

1: ldr r4, [r2], #4 @將r2中的值讀取到r4中,然後r2+4

str r4, [r1], #4 @將r4的內容寫到r1中儲存的位址後,r1中位址+4(初次r1位址為mem_ctl_base)

cmp r1, r3 @比較r1中現在的位址,看看是否完成13個暫存器的相應配置(13*4byte)

bne 1b @如果未完成,繼續

mov pc, lr @完成後,返回_start繼續執行

.align 4

mem_cfg_val:

/* 儲存控制器的13個暫存器的設定值 */

.long 0x22011110 @bwscon

.long 0x00000700 @bankcon0

.long 0x00000700 @bankcon1

.long 0x00000700 @bankcon2

.long 0x00000700 @bankcon3

.long 0x00000700 @bankcon4

.long 0x00000700 @bankcon5

.long 0x00018005 @bankcon6

.long 0x00018005 @bankcon7

.long 0x008c07a3 @refresh

.long 0x000000b1 @banksize

.long 0x00000030 @mrsrb6

.long 0x00000030 @mrsrb7

copy_steppingstone_to_sdram:

/* 將steppingstone的4kb資料複製到sdram中

*/mov r1, #0 @steppingstone基位址

ldr r2, =sdram_base

mov r3, #4*1024

1: ldr r4, [r1], #4 @從源位址讀取4byte資料

str r4, [r2], #4 @將源位址的4byte資料寫入目標位址

cmp r1,r3 @對比是否複製完畢

bne 1b

mov pc, lr @完成後,返回_start繼續執行

makefile:

all:

arm-linux-gcc -c -o main.o main.c

arm-linux-gcc -c -o head.o head.s

arm-linux-ld -ttext 0x30000000 head.o main.o -o sdram.elf

arm-linux-objcopy -o binary -s sdram.elf sdram.bin

arm-linux-objdump -d sdram.elf > sdram.dis

clean:

rm *.o *.elf *.dis

makefile中:arm-linux-ld -ttext 0x30000000 head.o main.o -o sdram.elf連線到了sdram的基位址0x30000000

S3C2440 RTC 裸機程式

rtc 實時時鐘 單元可以在當系統電源關閉後通過備用電池工作。rtc 可以通過使用strb ldrb arm 操作傳送8 位二 十進位制交換碼 bcd 值資料給cpu。這些資料報括年 月 日 星期 時 分和秒的時間資訊。rtc 單元工作在外部32.768khz 晶振並且可以執行鬧鐘功能。其特點概括為...

S3C2440彙編中斷程式

雖然現在c語言已經成為主流力量,但是我還是非常喜歡用彙編寫 的高效率,高速度是有天獨厚的,但我更喜歡他那種 指哪打哪 的高透明。265m的ram任你主宰,想把那句話放在哪,就放在哪。這種任性你懂嗎?學習中斷程式兩大感悟 自己卡住的地方 2,位址切記不要寫錯。我就是在這裡卡了將近一天時間。s3c244...

S3C2440 nor flash驅動程式

20150418 s3c2440 nor flash驅動程式 2015 04 18 lover雪兒 和前面的nandflash差不多,我們此處來重新學習一下norflash驅動。1 2 參考 drivers mtd maps physmap.c3 45 include 6 include 7 inc...