第一個ARM程式

來源:互聯網
上載者:User

;**************************************************************
;檔案: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++);
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.