本节开始写汇编 led 驱动的代码 !
1、准备工作
新建 /hone/zsw/linux/IMX6ULL/board_drivers/1_leds 目录;
另存为一个 leds 的工作区;
在 VScode 中打开终端;
2、驱动代码
.global _start // 全局标号
_start:
// 1、使能所有时钟
ldr r0, =0x020c4068 // CCGRO
ldr r1, =0xffffffff // 要向 CCGR0 写入的数据
str r1, [r0] // 将数据 0xffffffff 写入 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 复用
// IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03 设置为 5
// IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03 的地址为 0x020e0068
ldr r0, =0x020e0068
ldr r1, =0x5
str r1,[r0]
// 3、配置 GPIO1_IO03 电气属性
// 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 // IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO03 的地址
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