;**************************************************************
;文件: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++);
}
第一个ARM程序
最新推荐文章于 2024-07-08 05:17:08 发布