系统环境Fedora19
实验平台MINI2440
程序下载到NORFLASH
记的学习51单片机的时候,第一个程序就是点亮一个led灯。所以在此也选择点亮一个LED灯作为S3C2440裸奔的开始。
程序由3个文件组成,led_on.S led_on_c.c Makefile
led_on.S
.text
.global _start
_start:
ldr r0, =0x53000000 @watchdog
mov r1, #0x0
str r1, [r0]@关闭看门狗
ldr sp, =0x40001000 @设置堆栈指针 指向自带的SRAM
bl main@跳到主函数
halt_loop:
b halt_loop
led_on_c.c
#define GPBCON (*(volatile unsigned long *)0x56000010)
#define GPBDAT (*(volatile unsigned long *)0x56000014)
int main()
{
GPBCON |= (1<<10);@LED--->GB5
GPBDAT = 0;
while(1);
}
Makefile
led_on_c.bin:led_on.S led_on_c.c
arm-linux-gcc -Wall -c -o led_on.o led_on.S//生成目标文件led_on.o
arm-linux-gcc -Wall -c -o led_on_c.o led_on_c.c//生成目标文件led_on_c.o
arm-linux-ld -Ttext 0x0000000 led_on.o led_on_c.o -o led_on_c_elf//生成可执行文件led_on_c_elf,两个*.o文件的顺序不能颠倒
arm-linux-objcopy -O binary -S led_on_c_elf led_on_c.bin//将elf文件转换成二进制文件下载到开发板运行
clean:
rm -f led_on_c.bin led_on_c_elf *.o//删除一些文件
程序中的led_on.S其实就是一个启动文件,类似MDK中的s3c2440.s。本程序中只是简单的关闭了看门狗,设置了堆栈指针和跳转到main函数。
对于Makefile中的一些编译选项:
arm-linux-objcopy是用来复制一个目标文件的内容到另一个文件中,可以使用不同于源文件的格式来输出目的文件,即进行格式转换