ARM LED裸机实验(gun汇编)

来源:互联网 发布:宿城区网络问政 编辑:程序博客网 时间:2024/04/29 02:08

开发环境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-gccLD      = arm-elf-ldAR      = arm-elf-arOBJCOPY = arm-elf-objcopyOBJDUMP = arm-elf-objdumpCFLAGS := -Wall -O2CPPFLAGS   := -nostdinc objs := crt0.o @汇编后的文件添加到此处all:led.binled.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 librm -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