4412 裸板程序led3

本文介绍了一个简单的流水灯程序实现过程,包括配置GPIO输出、循环点亮LED及延时控制。使用了ARM汇编语言进行底层编程,并通过Makefile进行编译打包。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目的:实现流水灯

1、原理

同上

2、程序

三个文件led3.S、led3.lds、Makefile

led3.S

.text
.global _mystart
_mystart:
/*设置GPM4_0为输出管脚*/
ldr r0, =0x110002E0 //GPM4CON地址
ldr r1, [r0]        //取地址内容
bic r1, r1, #0xff00 //清除8-15位 (bic r1, r1, #0xffff这样写编译器报错)
bic r1, r1, #0xff   //清除0-7位 
orr r1, r1, #0x1100  //设置为输出,即设置8,12为1
orr r1, r1, #0x11    //设置为输出,即设置1,4为1
str r1, [r0]         //把r1写入GPM4CON

/*设置GPM4_0数据为高电平*/
ldr r0, =0x110002E4   //GPM4DAT地址
ldr r1, [r0]          //取地址内容  


led_loop:
bic r1, r1, #0xf     //清除0位led1亮 
orr r1, r1, #0xe
str r1, [r0]          //把r1写入GPM4DAT
ldr r2, =0xffffff
bl delay_loop

bic r1, r1, #0xf     //清除1位led2亮 
orr r1, r1, #0xd
str r1, [r0]          //把r1写入GPM4DAT
ldr r2, =0xffffff
bl delay_loop

bic r1, r1, #0xf     //清除2位led3亮 
orr r1, r1, #0xb
str r1, [r0]          //把r1写入GPM4DAT
ldr r2, =0xffffff
bl delay_loop


bic r1, r1, #0xf     //清除3位led4亮 
orr r1, r1, #0x7
str r1, [r0]          //把r1写入GPM4DAT
ldr r2, =0xffffff
bl delay_loop

b led_loop


loop:                     //停在这里
b loop


delay_loop:                //延时
sub r2, r2, #1
cmp r2, #0
bne delay_loop
mov pc, lr


led3.lds

SECTIONS {
    . = 0x02023400;
    .text          :   { *(.text) }
    .rodata ALIGN(4) : {*(.rodata*)} 
    .data ALIGN(4) : { *(.data*) }
    .bss ALIGN(4)  : { *(.bss)  *(COMMON) }
}



Makefile

led3.bin : led3.S
arm-linux-gnueabihf-gcc -c -o led3.o led3.S
arm-linux-gnueabihf-ld -Tled3.lds -N led3.o -o led3.elf
arm-linux-gnueabihf-objcopy -O binary -S led3.elf led3.bin
arm-linux-gnueabihf-objdump -D -m arm  led3.elf > led3.dis
clean:
rm -f *.dis *.bin *.elf *.o

3、编译下载

book@book-virtual-machine:~/wang/led3$ ls 
led3.bin  led3.elf  led3.o  led3.S.bak  Makefile.bak
led3.dis  led3.lds  led3.S  Makefile    tools
book@book-virtual-machine:~/wang/led3$ make 
arm-linux-gnueabihf-gcc -c -o led3.o led3.S
arm-linux-gnueabihf-ld -Tled3.lds -N led3.o -o led3.elf
arm-linux-gnueabihf-objcopy -O binary -S led3.elf led3.bin
arm-linux-gnueabihf-objdump -D -m arm  led3.elf > led3.dis
book@book-virtual-machine:~/wang/led3$ cd tools 
book@book-virtual-machine:~/wang/led3/tools$ ls 
E4412_N.bl1.bin  my_mkbl2  my_mktools.c  sd_fusing.sh  sd_fusing.sh.bak
book@book-virtual-machine:~/wang/led3/tools$ sudo ./sd_fusing.sh  /dev/sdc ../led3.bin
/dev/sdc reader is identified.
---------------------------------------
BL1 fusing
16+0 records in
16+0 records out
8192 bytes (8.2 kB) copied, 0.571442 s, 14.3 kB/s
---------------------------------------
BL2 fusing
28+0 records in
28+0 records out
14336 bytes (14 kB) copied, 1.31417 s, 10.9 kB/s
---------------------------------------
source file image is fused successfully.
Eject SD card and insert it to Exynos 4412 board again.
book@book-virtual-machine:~/wang/led3/tools$ 

此时已经下载完成,拔开读卡器插入开发板,即可看到LED1-LED4轮流点亮;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wz2051900044

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值