I.MX6ULL的LED汇编程序

源码源自原子哥

1.如下为.s汇编源码

 1 .global _start @全局标号
 2 
 3 _start:
 4     /* 使能所有外设时钟*/
 5     ldr r0, =0x020c4068 @CCGR0
 6     ldr r1, =0xffffffff @要向CCGR0写入的数据
 7     str r1, [r0]        @将0xffffffff写入到CCGR0中
 8 
 9     ldr r0, =0x020c406c @CCGR1
10     str r1, [r0]   
11 
12     ldr r0, =0x020c4070 @CCGR2
13     str r1, [r0] 
14 
15     ldr r0, =0x020c4074 @CCGR3
16     str r1, [r0]  
17 
18     ldr r0, =0x020c4078 @CCGR4
19     str r1, [r0] 
20 
21     ldr r0, =0x020c407c @CCGR5
22     str r1, [r0] 
23 
24     ldr r0, =0x020c4080 @CCGR6
25     str r1, [r0] 
26 /*配置GPIO1_IO03 PIN的复用为GPIO,
27  *设置IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03=5
28  *IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03地址为0X020E0068
29 */
30     ldr r0, =0x020e0068 @IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03
31     ldr r1, =0x00000005 @要写入的数据
32     str r1, [r0]        @将0x5写入到IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03中
33 
34 
35 /*配置GPIO1_IO03的电气属性,也就是寄存器:
36  *IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO03
37  *这个寄存器地址为0X020E02F4
38  *bit0      0   低速率
39  *bit5:3    110 R0/6驱动能力
40  *bit7:6    10  100MHz速度
41  *bit11     0   关闭开漏输出
42  *bit12     1   使能pull/keeper
43  *bit13     0   keeper
44  *bit15:14  00  100K下拉
45  *bit16     0   关闭hys
46 */
47     ldr r0, =0x020e02f4
48     ldr r1, =0x10b0
49     str r1, [r0]
50 /*设置GPIO
51  *设置GPIO1_GDIR寄存器,设置GPIO1_GPIO03为输出
52  *GPIO1_GDIR寄存器的地址为0x0209c004,设置GPIO1_GDIR寄存器bit3为1
53  *也就是设置GPIO1_IO03为输出
54 */
55     ldr r0, =0x0209c004
56     ldr r1, =0x8
57     str r1, [r0]
58 /*打开LED,也就是设置GPIO_IO03为0
59  *GPIO1_DR寄存器地址为0x0209c000
60 */
61     ldr r0, =0x0209c000
62     ldr r1, =0
63     str r1, [r0]
64 
65 loop:
66     b loop

2.生成.o编译文件

终端使用  arm-linux-gnueabihf-gcc -g -c leds.s -o led.o  命令生成.o文件。

3.生成.elf链接文件

终端使用  arm-linux-gnueabihf-ld -Ttext 0x87800000 led.o -o led.elf  生成.elf文件。

4.生成.bin文件

终端使用  arm-linux-gnueabihf-objcopy -O binary -g -S led.elf led.bin  生成.bin文件。

 

根据2,3,4命令,可以编写Makefile如下:

 

led.bin:leds.s
    arm-linux-gnueabihf-gcc -g -c leds.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
clean:
    rm -rf *.o led.bin led.elf

 

posted @ 2020-12-30 22:33  昆山皮皮虾  阅读(115)  评论(0编辑  收藏  举报