1、编写汇编代码
首先建立1_leds文件夹
用vscode打开文件夹1_leds,然后在1_leds工作区下建立leds.s汇编文件
然后编写根据IMX6ULL手册编写汇编代码
.global _start /* 全局标号 */
/*
* 描述: _start函数,程序从此函数开始执行此函数完成时钟使能、
* GPIO初始化、最终控制GPIO输出低电平来点亮LED灯。
*/
_start:
/* 例程代码 */
/* 1、使能所有时钟 */
ldr r0, =0X020C4068 /* CCGR0 */
ldr r1, =0XFFFFFFFF
str r1, [r0]
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]
/* 2、设置GPIO1_IO03复用为GPIO1_IO03 */
ldr r0, =0X020E0068 /* 将寄存器SW_MUX_GPIO1_IO03_BASE加载到r0中 */
ldr r1, =0X5 /* 设置寄存器SW_MUX_GPIO1_IO03_BASE的MUX_MODE为5 */
str r1,[r0]
/* 3、配置GPIO1_IO03的IO属性
*bit 16:0 HYS关闭
*bit [15:14]: 00 默认下拉
*bit [13]: 0 kepper功能
*bit [12]: 1 pull/keeper使能
*bit [11]: 0 关闭开路输出
*bit [7:6]: 10 速度100Mhz
*bit [5:3]: 110 R0/6驱动能力
*bit [0]: 0 低转换率
*/
ldr r0, =0X020E02F4 /*寄存器SW_PAD_GPIO1_IO03_BASE */
ldr r1, =0X10B0
str r1,[r0]
/* 4、设置GPIO1_IO03为输出 */
ldr r0, =0X0209C004 /*寄存器GPIO1_GDIR */
ldr r1, =0X0000008
str r1,[r0]
/* 5、打开LED0
* 设置GPIO1_IO03输出低电平
*/
ldr r0, =0X0209C000 /*寄存器GPIO1_DR */
ldr r1, =0
str r1,[r0]
/*
* 描述: loop死循环
*/
loop:
b loop
2、编写Makefile
在1_leds文件夹下建立Makefile文件
然后编写Makefile代码
leds.bin:leds.s
arm-linux-gnueabihf-gcc -g -c leds.s -o leds.o
arm-linux-gnueabihf-ld -Ttext 0X87800000 leds.o -o leds.elf
arm-linux-gnueabihf-objcopy -O binary -S -g leds.elf leds.bin
arm-linux-gnueabihf-objdump -D leds.elf > leds.dis
clean:
rm -rf *.o led.bin led.elf led.dis
我们最终烧写到SD卡中的是bin文件,用正点原子的imxdownload烧写工具
首先建立目标文件leds.bin 它的依赖为leds.s
然后用交叉编译器 arm-linux-gnueabihf-gcc 编译文件 将.s文件编译成.o文件
arm-linux-gnueabihf-ld 链接文件。arm-linux-gnueabihf-ld 用来将众多的.o 文件链接到一个指定的链接位置。链接生成 led.elf 文件
arm-linux-gnueabihf-objcopy 格式转换 arm-linux-gnueabihf-objcopy 更像一个格式转换工具,我们需要用它将 led.elf 文件转换为leds.bin 文件
arm-linux-gnueabihf-objdump 反汇编。有时候需要查看其汇编代码来调试代码。
3、编译工程
用make命令编译工程,然后产生leds.bin文件
4、烧写到SD卡
插入SD卡检测到/dev/sdb,/dev/sdb1表示SD卡只有1个分区,使用imxdownload时权限不足用
chmod 777 imxdownload修改权限,最后烧录到SD卡中
5、实验现象
将SD卡插入im6ull开发板中,重新上电,便可看见实验现象。