您的位置:首页 > 其它

ARM LED裸机实验(gun汇编)

2013-09-15 14:34 423 查看
开发环境OPENJTAG+2440+ECLIPSE

GPxCON每两个位控制一个一个引脚:00输入,01输出,10特殊功能

初始化三个寄存器:rGPxCON,rGPxUP,rGPxDAT

crt0.S


@******************************************************************************
@ File:crt0.S
@ 功能:LED点灯程序,点亮LED1
@******************************************************************************

.text
.global _start
_start:
LDR     R0,=0x56000050      @ R0设为GPfCON寄存器。此寄存器
@ 用于选择端口B各引脚的功能:
@ 是输出、是输入、还是其他
MOV     R1,#0x00000400
STR     R1,[R0]             @ 设置GPf5为输出口, 位[10:9]=0b01
LDR     R0,=0x56000054      @ R0设为GPfDAT寄存器。此寄存器
@ 用于读/写端口f各引脚的数据
MOV     R1,#0x00000000      @ 此值改为0x00000020,
@ 可让LED1熄灭
STR     R1,[R0]             @ GPB5输出0,LED1点亮
MAIN_LOOP:
B       MAIN_LOOP

Makefile

CC      = arm-elf-gcc
LD      = arm-elf-ld
AR      = arm-elf-ar
OBJCOPY = arm-elf-objcopy
OBJDUMP = arm-elf-objdump
CFLAGS 		:= -Wall -O2
CPPFLAGS   	:= -nostdinc

objs := crt0.o @汇编后的文件添加到此处
all:led.bin

led.bin: $(objs)
${LD} -Tled.lds -Ttext 0x00000000 -o led_elf $^
${OBJCOPY} -O binary -S led_elf $@
${OBJDUMP} -D -m arm led_elf > led.dis

%.o:%.c
${CC} -g -c -o $@ $<

%.o:%.S
${CC} -g -c -o $@ $<

clean:
make  clean -C lib
rm -f led.bin led_elf led.dis *.o


led.lds

OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
OUTPUT_ARCH(arm)
ENTRY(_start)
SECTIONS
{
. =0x00000000; @运行地址内部4Kram

. = ALIGN(4);
.text :
{
crt0.o	(.text)
*(.text)
}

. = ALIGN(4);
.rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }

. = ALIGN(4);
.data : { *(.data) }

. = ALIGN(4);
.got : { *(.got) }

. = .;
__u_boot_cmd_start = .;
.u_boot_cmd : { *(.u_boot_cmd) }
__u_boot_cmd_end = .;

. = ALIGN(4);
__bss_start = .;
.bss (NOLOAD) : { *(.bss) . = ALIGN(4); }
_end = .;
}


如果想要在eclipse下进行仿真调试还需要一个init文件用于初始化内存时钟等

将crt0.s Makefile 和led.lds三个文件放到Linux下即可编译,注意编译前讲Makefile中的elf改为GCC

工程下载地址http://download.csdn.net/detail/wyc7425/6270603
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: