当前位置:   article > 正文

第一个ARM程序

arm运维

;**************************************************************
;文件: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++);
}

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/1022225
推荐阅读
相关标签
  

闽ICP备14008679号