Linux驱动开发中如何使用汇编语言点亮一个LED,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
十年的嘉荫网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。全网整合营销推广的优势是能够根据用户设备显示端的尺寸不同,自动调整嘉荫建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联从事“嘉荫网站设计”,“嘉荫网站推广”以来,每个客户项目都认真落实执行。
电路原理图如下:
其中,LED和2440的GPF4端口相连;GPF4端口输出低电平LED点亮。
S3C2440A芯片的GPF端口信息如下:
汇编语言如下:
@******************************************************************************
@ File:led_on.S
@ 功能:LED点灯程序,点亮LED1
@******************************************************************************
.text
.global _start
_start:
LDR R0,=0x56000050 @ R0设为GPFCON寄存器。此寄存器
@ 用于选择端口B各引脚的功能:
@ 是输出、是输入、还是其他
MOV R1,#0x00000100
STR R1,[R0] @ 设置GPF4为输出口, 位[8:7]=0b01
LDR R0,=0x56000054 @ R0设为GPBDAT寄存器。此寄存器
@ 用于读/写端口B各引脚的数据
MOV R1,#0x00000000 @ 此值改为0x00000010,
@ 可让LED1熄灭
STR R1,[R0] @ GPF4输出0,LED1点亮
MAIN_LOOP:
B MAIN_LOOP
代码中主要指令解释:
@后面的东西都是注释;
.text:是伪指令,表示其下面的语句都属于代码段;
.global:将本文件中的某个程序标号定义为全局的,比如上面的代码表示_start是个全局函数;
LDR:大范围的地址读取伪指令;
LDR R0, =0x56000050 //表示将GPF端口配置寄存器地址0x56000050(常数)赋给寄存器R0;
MOV:可以把一个寄存器的值赋给另一个寄存器,或把一个常数赋给寄存器;
MOV R1, #0x00000100 //#将常数0x00000100赋给寄存器R1;
STR:将寄存器中的值存储到内存中;
STR R1, [R0] //将R1寄存器中的数据保存到地址为R0的内存单元中;实际上就是将0x00000100数据保存到GPF引脚配置地址0x56000050当中,从而完成对GPF引脚的配置,就是将GPF4引脚配置为输出引脚。
LDR R0, =0x56000054 //表示将GPF端口数据寄存器地址0x56000050(常数)赋给寄存器R0;
MOV R1, #0x00000000 //将常数0x00000000赋给寄存器R1;
STR R1, [R0] //将将R1寄存器中的数据保存到地址为R0的内存单元中;其实就是将0x00000000数据保存到内存地址为0x56000054当中,就是使GPF4输出低电平。
B:跳转指令,可以在程序中实现跳转功能;在程序中首先定义一个代码块MAIN_LOOP,而后跳转到MAIN_LOOP,死循环,程序一直在这里执行。
Makefile文件如下:
led_on.bin : led_on.S
arm-linux-gcc -g -c -o led_on.o led_on.S
arm-linux-ld -Ttext 0x0000000 -g led_on.o -o led_on_elf
arm-linux-objcopy -O binary -S led_on_elf led_on.bin
clean:
rm -f led_on.bin led_on_elf *.o
主要指令介绍:
arm-linux-gcc:交叉编译工具, 将汇编源码文件led_on.S经过预处理、编译、汇编生成OBJ目标文件led_on.o;
arm-linux-ld:用于将多个目标文件、库文件连接成可执行文件。
arm-linux-objcopy:用来复制一个目标文件的内容到另一个文件中,可以使用不同于源文件的格式来输出目的文件,即可以进行格式转换。
编辑完源码之后,可以将源码和Makefile文件一起拷贝到Ubuntu里面,然后执行make命令,生成led_on.bin文件。最后将目标文件烧写到开发板中。
关于Linux驱动开发中如何使用汇编语言点亮一个LED问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注创新互联行业资讯频道了解更多相关知识。