开发板:正点原子 i.mx6ull mini板
I.MX6ULL是基于Cortex-A7内核的,支持运行Linux操作系统。
参考资料:【正点原子】《I.MX6ULL嵌入式Linux驱动开发指南》
开发用到的交叉编译工具与S3C2440一致,只不过程序是借助正点原子的imxdownload可执行程序烧录到TF卡上,不需要使用J-LINK进行NOR FLASH的烧写。
开发板LED0的电路原理图如下:
首先了解下I.MX6ULL的GPIO的相关寄存器。
参考:《IMX6ULL参考手册》
用于GPIO1_IO03复用设置。
用于GPIO1_IO03上下拉电阻大小、压摆率、IO速度等参数设置。
用于GPIO1_IO03方向设置(输入/输出)。
用于GPIO1_IO03输出值的设置(0/1)。
GPIO寄存器地址映射如下:
用于使能相应外设时钟。
实验汇编代码如下:
.global _start
_start:
ldr r0, =0x020C4068/*CCGR0-5 ENABLE ALL PERIPHERAL CLOCK */
ldr r1, =0xFFFFFFFF
str r1, [r0]
ldr r0, =0x020C406C
str r1, [r0]
ldr r0, =0x020C4070
str r1, [r0]
ldr r0, =0x020C4074
str r1, [r0]
ldr r0, =0x020C4078
str r1, [r0]
ldr r0, =0x020C407C
str r1, [r0]
ldr r0, =0x020C4080
str r1, [r0]
ldr r0, =0x020E0068/*GPIO1_IO03 MUX Config*/
ldr r1, =0x5
str r1, [r0]
ldr r0, =0x020E02F4/*GPIO1_IO03 PAD Config*/
ldr r1, =0x10B0
str r1, [r0]
ldr r0, =0x0209C004/*GPIO1_GDIR DIR:OUTPUT*/
ldr r1, =0x0000008
str r1, [r0]
ldr r0, =0x0209C000/*GPIO1_DR VALUE:0*/
ldr r1, =0x0
str r1, [r0]
loop:
b loop
之后编写makefile文件
led.bin:led.s
arm-linux-gcc -g -c led.s -o led.o
arm-linux-ld -Ttext 0X87800000 led.o -o led.elf
arm-linux-objcopy -O binary -S -g led.elf led.bin
arm-linux-objdump -D led.elf > led.dis
clean:
rm -rf *.o led.bin led.elf led.dis
make命令编译后再使用imxdownload烧录TF卡,注意需要将imxdownload可执行程序放于工程目录下。
使用$ ./imxdownload /dev/sdd命令将程序烧录进TF卡中,然后将TF卡插入卡槽,设置mini板的BOOT从SD卡启动。
测试效果: