迴圈方法初始化2440記憶體

2021-07-10 12:45:18 字數 1262 閱讀 5855

採用迴圈方法記憶體初始化中

memsetup:

@ 設定儲存控制器以便使用sdram等外設

mov r1,     #mem_ctl_base   @ 儲存控制器的13個暫存器的開始位址

adrl    r2, mem_cfg_val              @ 這13個值的起始儲存位址

add r3,     r1, #52                       @ 13*4 = 54

1:  

ldr r4,     [r2], #4            @ 讀取設定值,並讓r2加4

str r4,     [r1], #4            @ 將此值寫入暫存器,並讓r1加4

cmp r1,     r3                 @ 判斷是否設定完所有13個暫存器

bne 1b                          @ 若沒有寫成,繼續

mov pc,     lr                 @ 返回

bne 1b什麼意思呢?一開始老是在找1b的標號處,找了些許時間也沒有發現**有這個標號。

後來查詢相關資料發現,原來0~9的數字為區域性標籤。區域性標籤可以重複使用,語法為:

xf:往前跳的意思,就是還未執行的程式,x代表0~9的某個標籤,f代表forward的意思。

xb:往後跳的意思,回到原來已經執行過的語句,x達標0~9的某個標籤,b代表backward的意思。

上面bne 1b 的意思是,如果r1!=r3 即r1的位址的不等於r3的位址,

也就是還沒設定完

這13個暫存器

,就要重新跳到

1:  

ldr r4,     [r2], #4            @ 讀取設定值,並讓r2加4

str r4,     [r1], #4            @ 將此值寫入暫存器,並讓r1加4

......

處執行;直到r1=r3,即設定好這13個暫存器。才會結束這個區域性迴圈。

——————————————————————————————————————

eg:1: ;a

cmp r0, #0

beq 1f ;    @  r0==0那麼向前跳轉到b處執行

bne 1b ;   @ 否則向後跳轉到a處執行

1: ;b

——————————————————————————————————————

有趣的是:

1:b 1b   @無限迴圈的意思,與while(1)等效

記憶體初始化

電容的分類 dram 基本原件是電容,需要定時重新整理,儲存速度較慢 dram又分為 sram 同步動態隨機儲存器 synchronous dynamic random access memory ddr 雙倍速率同步動態隨機儲存器 double data rate sdram ddr2 在 ddr...

S3C2440 Timer初始化方法

s3c2410提供了5個16位的timer timer0 timer4 其中timer0 timer3支援pulse width modulation pwm 脈寬調變 timer4是乙個內部定時器 internal timer pclk 是timer 的訊號源,我們通過設定每個timer相應的pr...

記憶體初始化過程

1,物理記憶體資訊的獲取 0x15中斷,功能號 e820h,e801h,e88h 見檔案 linux arch i386 boot setup.s 執行完上面的 後,記憶體資訊被分為多條資訊放在e820map位置處,每個資訊條目長20位元組,包含乙個記憶體區間的資訊,條目數放在e820nr處。即實際...