嵌入式Linux之MX6ULL裸机开发学习笔记(汇编LED灯点亮)

2024-01-08 11:10:07

汇编LED驱动实验

1.驱动编写

首先创建在vscode上创建工作区,创建led.s汇编文件,然后编写以下程序

.global _start @全局标号

_start:

/* 使能所有外设时钟 */

ldr r0,=0x020c4068 @CCGR0

ldr r1,=0xffffffff @要向CCGR0写入的数据

str r1,[r0] @将0xffffffff写入CCGR0中

ldr r0,=0x020c406c @CCGR1

str r1,[r0]

ldr r0,=0x020c4070 @CCGR2

str r1,[r0]

ldr r0,=0x020c4074 @CCGR3

str r1,[r0]

ldr r0,=0x020c4078 @CCGR4

str r1,[r0]

ldr r0,=0x020c407c @CCGR5

str r1,[r0]

ldr r0,=0x020c4080 @CCGR6

str r1,[r0]

/* 配置GPIO1_IO03 PIN的复用为GPIO,也就是设置

* IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03 = 5

* IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03寄存器地址为 0x020e0068

*/

ldr r0,=0x020e0068 @IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03

ldr r1,=0x5 @要写入的数据

str r1,[r0] @将0x5写入IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03中

/* 配置GPIO1_IO03的电气属性,也就是寄存器:

* IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO03

* IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO03寄存器地址为0x020e02f4

*

* bit0: 0 低速率

* bit5-3: 110 R0/6驱动能力

* bit7-6: 10 100Mhz速度

* bit11: 0 关闭开路输出

* bit12: 1 使能pull/kepper

* bit13: 0 kepper

* bit15-14: 00 100K下拉

* bit16: 0 关闭hys

*/

ldr r0,=0x020e02f4 @IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO03

ldr r1,=0x10b0 @要写入的数据

str r1,[r0] @将0x10b0写入IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO03中

/* 设置GPIO

* 设置GPIO1_GDIR寄存器,设置GPIO_GPIO03为输出

* GPIO1_GDIR寄存器地址为0x0209c004.设置GPIO1_GDIR寄存器bit3为1

* 也就是设置GPIO1_IO03为输出。

*/

ldr r0,=0x0209c004 @GPIO1_GDIR

ldr r1,=0x8 @要写入的数据

str r1,[r0] @将0x8写入GPIO1_GDIR中

/* 打开LED,也就是设置GPIO1_IO03为0

* GPIO1_DR寄存器地址为0x0209c000

*/

ldr r0,=0x0209c000 @GPIO1_DR

ldr r1,=0 @要写入的数据

str r1,[r0] @将0x8写入GPIO1_DR中

loop:

b loop

0101=5,复用为GPIO

2.编译程序

创建Makefile文件写入

led.bin : led.s

arm-linux-gnueabihf-gcc -g -c led.s -o led.o

arm-linux-gnueabihf-ld -Ttext 0x87800000 led.o -o led.elf

arm-linux-gnueabihf-objcopy -O binary -S -g led.elf led.bin

arm-linux-gnueabihf-objdump -D led.elf > led.dis

clean:

rm -rf *.o led.bin led.elf led.dis

3.烧写bin文件到SD卡中并运行

插入SD卡,通过命令ls /dev/sd* -l查看有哪些文件

然后在拔掉看看少了哪些文件

我们就能确定哪个是我们的SD卡文件是sdb,每个人的读卡器不同名字也不同,举例:我这里有一个adb1,那么我就能确定是sdb了

然后从正点原子资料里托取imxdownload文件到我们的工作区里,不知道怎么传输的可以看看正点原子教程

然后更改它的权限chmod imxdownload 777 ,使它的权限全开。

然后使用命令 ./imxdownload led.bin /dev/sdb 把bin文件烧写到SD卡内,当出现

I.MX6ULL bin download software

Edit by:zuozhongkai

Date:2019/6/10

Version:V1.1

log:V1.0 initial version,just support 512MB DDR3

V1.1 and support 256MB DDR3

file led.bin size = 160Bytes

Board DDR SIZE: 512MB

Delete Old load.imx

Create New load.imx

Download load.imx to /dev/sdb ......

[sudo] lcp 的密码:

记录了6+1 的读入

记录了6+1 的写出

3232字节(3.2 kB,3.2 KiB)已复制,0.0678926 s,47.6 kB/s 时就是烧录完成了,如果烧录速度达到了多少M的话是失败的。

文章来源:https://blog.csdn.net/m0_71548440/article/details/135387824
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。