1. 程式人生 > 實用技巧 >I.MX6ULL的LED彙編程式

I.MX6ULL的LED彙編程式

原始碼源自原子哥

1.如下位led.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檔案。