i.MX6Q 汇编点亮 led

    技术2022-07-11  115

    硬件原理图

    与CPU管脚对应关系

    UART2_RX-EIM_D27_ALT5(101)-GPIO3_IO27

    0x020E00C0

    UART2_TX-EIM_D26_ALT5(101)-GPIO3_IO26

    0x020E00BC

    UART3_CTS-EIM_D23_ALT5(101)-GPIO3_IO23

    0x020E00AC

    UART3_RTS-EIM_D31_ALT5(101)-GPIO3_IO31

    0x020E00D0

    UART3_RX-EIM_D25_ALT5(101)-GPIO3_IO25

    0x020E00B8

    UART3_TX-EIM_D24_ALT5(101)-GPIO3_IO24

    0x020E00B4

    CCM 寄存器

    CCM,The Clock Control Module,时钟控制模块

    电气属性设置

    0x10B0 下拉,关闭开漏,速度 100MHz,40 Ω 驱动能力

    1615:1413121110:87:65:32:1000001000010110000关闭HYS,CMOS输入100KΩ下拉keeperpull/keeper使能CMOS推挽输出reserved100MHz40Ωreserved低压摆率

    0xD0B0 上拉

    1615:1413121110:87:65:32:1001101000010110000关闭HYS,CMOS输入22KΩ上拉keeperpull/keeper使能CMOS推挽输出reserved100MHz40Ωreserved低压摆率

    上/下拉电阻设置

    速度设置

    驱动能力

    压摆率

    IO的电气属性寄存器

    UART2_RX-EIM_DATA27-0x020E03D4

    UART2_TX-EIM_DATA26-0x020E03D0

    UART3_CTS-EIM_DATA23-0x020E03C0

    UART3_RTS-EIM_DATA31-0x020E03E4

    UART3_RX-EIM_DATA25-0x020E03CC

    UART3_TX-EIM_DATA24-0x020E03C8

    GPIO 配置

    GPIO_DR

    GPIO_GDIR

    汇编程序设计

    .global _start _start: ldr r0, =0x020C4068 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] /* 管脚复用配置 */ // UART2_RX-EIM_D27_ALT5(101)-GPIO3_IO27 ldr r0, =0x020E00C0 ldr r1, =0x5 str r1, [r0] // UART2_TX-EIM_D26_ALT5(101)-GPIO3_IO26 ldr r0, =0x020E00BC str r1, [r0] // UART3_CTS-EIM_D23_ALT5(101)-GPIO3_IO23 ldr r0, =0x020E00AC str r1, [r0] // UART3_RTS-EIM_D31_ALT5(101)-GPIO3_IO31 ldr r0, =0x020E00D0 str r1, [r0] // UART3_RX-EIM_D25_ALT5(101)-GPIO3_IO25 ldr r0, =0x020E00B8 str r1, [r0] // UART3_TX-EIM_D24_ALT5(101)-GPIO3_IO24 ldr r0, =0x020E00B4 str r1, [r0] /* IO电气属性配置 */ // 0x10B0 bit[15:14] 默认下拉 // UART2_RX-EIM_DATA27-0x020E03D4 ldr r0, =0x020E03D4 ldr r1, =0x10B0 str r1, [r0] // UART2_TX-EIM_DATA26-0x020E03D0 ldr r0, =0x020E03D0 str r1, [r0] // UART3_CTS-EIM_DATA23-0x020E03C0 ldr r0, =0x020E03C0 str r1, [r0] // UART3_RTS-EIM_DATA31-0x020E03E4 ldr r0, =0x020E03E4 str r1, [r0] // UART3_RX-EIM_DATA25-0x020E03CC ldr r0, =0x020E03CC str r1, [r0] // UART3_TX-EIM_DATA24-0x020E03C8 ldr r0, =0x020E03C8 str r1, [r0] /* UART2_RX-EIM_D27_ALT5(101)-GPIO3_IO27设置为输出 */ // UART2_TX-EIM_D26_ALT5(101)-GPIO3_IO26 // UART3_CTS-EIM_D23_ALT5(101)-GPIO3_IO23 // UART3_RTS-EIM_D31_ALT5(101)-GPIO3_IO31 // UART3_RX-EIM_D25_ALT5(101)-GPIO3_IO25 // UART3_TX-EIM_D24_ALT5(101)-GPIO3_IO24 // GPIO3_DR 0x020A4000 ldr r0, =0x020A4000 ldr r1, =0x0 str r1, [r0] // GPIO3_GDIR 0x020A4004 ldr r0, =0x020A4004 ldr r1, =0x8F800000 str r1, [r0] loop: b loop

    编译

    arm-linux-gnueabihf-gcc -g -c led.s -o led.o arm-linux-gnueabihf-ld -Ttext 0x12000000 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

    i.MX6Q U-boot中运行测试

    下载led.bin到内存0x30000000位置

    tftp 0x30000000 led.bin

    去0x30000000 位置运行

    go 0x30000000

    Processed: 0.009, SQL: 9