分类: 嵌入式
2011-05-07 17:52:36
@****************************************************************************** @Name: ledtestarm.s @Desc: led灯全灭,然后依次点亮4个LED灯,最后把4个LED灯全部点亮 @Parameter: @Return: @Author: yoyoba(stuyou@126.com) @Date: 2011-5-7 @Modify: 2011-5-7 @******************************************************************************* .text |
在EmbestIED中新建一个名为ledtestarm的工程,把该源代码添加到工程中,工程设置需注意以下两点:1.project/setting/debug/download中的下载地址设置为0x00000000,即ARM启动后运行的第一条代码就是该程序的第一条指令;2.project/setting/linker中的Link Options应添加选项-Ttext 0x00000000,表示把该程序连接到地址0x00000000。然后就可以编译,连接,下载运行了,运行时为了观察LED灯的亮灭情况,可以单步运行程序。
【3.C语言实现】
C语言执行的第一条指令,并不在main函数中,生成一个C程序的可执行文件时,编辑器通常会在我们的代码中加上几个被称为启动文件的代码——crt1.o、crti.o、crtend.o、crtn.o等,它们是标准库文件,这些代码设置C程序的堆栈等,然后调用main函数,它们依赖于操作系统,在裸板上这些代码无法执行,所以需要自己写一个,名字为ctr0.S,内容如下:
@****************************************************************************** |
下面是C语言实现的点亮LED灯的程序
/****************************************************************************** while(1)
*Name: ledtestc.c
*Desc: led灯全灭,然后依次点亮4个LED灯,最后把4个LED灯全部点亮
*Parameter:
*Return:
*Author: yoyoba(stuyou@126.com)
*Date: 2011-5-7
*Modify: 2010-5-7
********************************************************************************/
#define GPFCON (*(volatile unsigned long *)0x56000050) //GPFCON地址为0x56000050
#define GPFDAT (*(volatile unsigned long *)0x56000054) //GPFDAT地址为0x56000054
int Main() //注意Main函数名的写法
{
GPFCON=0x00005500; //GPFCON写入0x00005500,即GFP4-7设置为输出功能
{
GPFDAT=0x000000f0; //GPFDAT写入0x000000f0,即GPFDAT[7:4]=1111,4个LED灯全灭
GPFDAT=0x000000e0; //GPFDAT写入0x000000e0,即GPFDAT[7:4]=1110,LED4点亮
GPFDAT=0x000000d0; //GPFDAT写入0x000000d0,即GPFDAT[7:4]=1101,LED5点亮
GPFDAT=0x000000b0; //GPFDAT写入0x000000b0,即GPFDAT[7:4]=1011,LED6点亮
GPFDAT=0x00000070; //GPFDAT写入0x00000070,即GPFDAT[7:4]=0111,LED7点亮
GPFDAT=0x00000000; //GPFDAT写入0x00000000,即GPFDAT[7:4]=0000,4个LED灯全亮
}
return 0;
}