ARM筆記:匯編和C語(yǔ)言程序詳解1
本文純屬原創(chuàng),為arm子程序模塊,包含了匯編和C語(yǔ)言?xún)煞N寫(xiě)法,后續(xù)將陸續(xù)完善。
ON1、關(guān)閉WATCHDOG,否則CPU會(huì)不斷重啟:
匯編:
disable_watch_dog:
@往WATCHDOG寄存器寫(xiě)0
mov r1,#0x53000000
mov r2,#0x0
str r2,[r1]
mov pc,lr //返回
C語(yǔ)言:
#define WTCON (*(volatile unsigned long *)0x53000000)
void disable_watch_dog(void)
{
WTCON=0;
}
ON2、存儲(chǔ)控制器的使用
匯編:
.equ MEM_CTL_BASE,0x48000000
memsetup:
@ 設(shè)置存儲(chǔ)控制器以便使用SDRAM等外設(shè)
mov r1,#MEM_CTL_BASE@ 存儲(chǔ)控制器的13個(gè)寄存器的開(kāi)始地址
adrlr2, mem_cfg_val@ 這13個(gè)值的起始存儲(chǔ)地址
add r3,r1, #52@ 13*4 = 54
1:
ldr r4,[r2], #4@ 讀取設(shè)置值,并讓r2加4
str r4,[r1], #4@ 將此值寫(xiě)入寄存器,并讓r1加4
cmp r1,r3@ 判斷是否設(shè)置完所有13個(gè)寄存器
bne 1b@ 若沒(méi)有寫(xiě)成,繼續(xù)
mov pc,lr@ 返回
.align 4
mem_cfg_val:
@ 存儲(chǔ)控制器13個(gè)寄存器的設(shè)置值
.long0x22011110@ BWSCON
.long0x00000700@ BANKCON0
.long0x00000700@ BANKCON1
.long0x00000700@ BANKCON2
.long0x00000700@ BANKCON3
.long0x00000700@ BANKCON4
.long0x00000700@ BANKCON5
.long0x00018005@ BANKCON6
.long0x00018005@ BANKCON7
.long0x008C07A3@ REFRESH
.long0x000000B1@ BANKSIZE
.long0x00000030@ MRSRB6
.long0x00000030@ MRSRB7
C語(yǔ)言:
#define MEM_CTL_BASE 0X48000000
//設(shè)置存儲(chǔ)控制器以使用SDRAM
void memsetup(void)
{
unsigned longconstmem_cfg_val[]={ 0x22011110,//BWSCON
0x00000700,//BANKCON0
0x00000700,//BANKCON1
0x00000700,//BANKCON2
0x00000700,//BANKCON3
0x00000700,//BANKCON4
0x00000700,//BANKCON5
0x00018005,//BANKCON6
0x00018005,//BANKCON7
0x008C07A3,//REFRESH
0x000000B1,//BANKSIZE
0x00000030,//MRSRB6
0x00000030,//MRSRB7
};
inti = 0;
volatile unsigned long *p = (volatile unsigned long *)MEM_CTL_BASE;
for(; i < 13; i++)
p[i] = mem_cfg_val[i];
}
分享: