汇编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的话是失败的。