ARM汇编写的流水灯,完全裸机(对于汇编学习,板子启动初始化认识帮助很大)

我是用的是6410的板子(128MBDDR,256MBnand)。

里面有我的一些注释,希望大家一起学习交流学习。

编译通过的话,烧写到要从nand的0地址开始,这与6410板子的启动有关系,具体自己看一些书籍查询。

/*Makefile*/

CC	:= arm-linux-gcc
AS	:= arm-linux-as
LD	:= arm-linux-ld
OBJCOPY := arm-linux-objcopy


BIN	:= arm.bin
ELF	:= arm

OBJS	:= start.o main.o


all:$(ELF)
	$(OBJCOPY) $< -O binary /tftpboot/$(BIN)

#-Ttext指定程序的人口地址是在nand地址的0 
$(ELF):$(OBJS)
	$(LD) $^ -o $@ -Ttext 0  

%.o:%.c
	$(CC) $< -c -o $@
%.o:%.s
	$(AS) $< -o $@

.PHONY:clean
clean:
	rm -rf $(OBJS) $(ELF)

          /*start_led.s*/
        .align	2
	.global	_start,start,loop,delay1
	.text
_start:
	mov	r0,#0x70000000        @外围寄存器的基地址
	orr	r0,#0x13              @外围寄存器的大小size=0x13 = 256M
	mcr	p15,0,r0,c15,c2,4     @告诉处理器访问外围存储器的大小(MMU)
    
	ldr r0,=0x7e004000        @门狗定时器控制寄存器,关闭。
	ldr	r1,[r0]
	bic r1,#(1 << 5)
	str	r1,[r0]
    
	@mov sp,#0x2000			  @初始化栈指针,(6410板子内置DROM = 8K)
	
        ldr r0,=0x7f008820        @GPMCON
	ldr r2,[r0]               @read the value
        ldr r1,=(~0xffff)         @r1 = ~0xffff
	and r2,r1                 @clear the 16bits(4 leds)
        ldr r1,=0x1111	          @enable the GPMCON(16bits) as output
	orr r2,r1
	str r2,[r0]               @write in the GPMCON

        ldr r0,=0x7f008824        @GPMDAT
	ldr r2,[r0]               @read the GPMDAT old  value
        mov r1,#0xf
	orr r2,r1                 @off the leds
	str r2,[r0]               @write new value in the GPMDAT

start:                        @after led on 4 leds,init r5 to the first led
        mov r5,#0				  @r5 is about which leds is on
loop:
        cmp r5,#4
	beq start

	mov r1,#1
        ldr r0,=0x7f008824        @the r5 led on
        ldr r2,[r0]            
        bic r2,r1,lsl r5         
	str r2,[r0]
	mov r3,#0
	bl delay1
    
	ldr r2,[r0]               @the r5 led off,then the led right move 
        orr r2,r1,lsl r5          
	str r2,[r0]
	add r5,#1;
        b loop

delay1:
	nop;
	add r3,#1
	ldr r4,=0xffff
	cmp r3,r4
	moveq pc,lr
        b delay1


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值