;**************************************************************
;檔案:program_5_1.s
;簡介:ARM初始化程式
;**************************************************************
IMPORT Main ;偽操作IMPORT告訴編譯器Main不是在該檔案中定義的,而是在其他源檔案中定義的符合,但在本源檔案中可能要用到該符號
AREA Init,CODE,READONLY ;偽指令AREA定義段名為Init的段為唯讀程式碼片段
ENTRY ;指明了程式的進入點,接下來用彙編配置SYSCFG特殊功能寄存器
LDR R0, =0x3FF0000
LDR R1, =0xE7FFFF80 ;配置SYSCFG,片內16K Cache,16K SRAM
STR R1, [R0] ;將R1的儲存在[R0]中
LDR SP, =0x3FE1000 ;4K SRAM的地址為0x3FE,0000~(0x3FE,1000-1),由於S3C2440的堆棧由高地址,
;所以SP指向4K SRAM的尾地址,堆棧向下產生
BL Main ;完成上述操作後,程式跳轉到Main函數執行
B .
END
/**************************************************************************************/
/*檔案:program_5_2.c */
/*簡介:第一個ARM程式 嵌入式LED燈閃爍程式 */
/*************************************************************************************/
#define IOPMOD (*(volatile unsigned *)0x03FF5000) //IO port mode register
#define IOPDATA (*(volatile unsigned *)0x03FF5008) //IO port data register
void Delay(unsigned int);
int Main()
{
unsigned long LED;
IOPMOD=0xFFFFFFFF; //將IO口置為輸出模式
IOPDATA=0x01;
for(;;){
LED=IOPDATA;
LED=(LED<<1);
IOPDATA=LED;為I/O資料寄存器賦初值0x1,通過將I/O資料寄存
;器的數值進行周期性的左移,實現使接在P0~P3
;口得LED登輪流被點亮
Delay(10);
if(!(IOPDATA&0x0F))
IOPDATA=0x01;
}
return(0);
}
void Delay(unsigned int x)
{
unsigned int i,j,k;
for(i=0;i<=x;i++)
for(j=0;j<0xff;j++)
for(k=0;k<0xff;k++);
}