採用迴圈方法記憶體初始化中
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處。即實際...