目標(biāo):熟悉imx6ull的GPIO的基本使用继薛,包括clock使能饲齐、gpio復(fù)用、電氣屬性和輸入輸出設(shè)置及輸出高低電平等操作腐魂;熟悉ARM的內(nèi)部常見(jiàn)寄存器及匯編的常用指令帐偎,為后面u-boot和kernel移植打好基礎(chǔ);
1)匯編
arm-linux-gnueabihf-gcc -g -c led.s -o led.o
-g 產(chǎn)生gdb調(diào)試信息
-c 編譯源文件
-o 產(chǎn)生匯編文件
2)鏈接
? arm-linux-gnueabihf-ld -Ttext 0x87800000 led.o -o led.elf
? 地址:外部DDR中蛔屹,0x87800000
? Ttext 代碼段
3)格式轉(zhuǎn)換
? arm-linux-gnueabihf-objcopy -O binary -S -g led.elf led.bin
? -O 表示格式轉(zhuǎn)換的目標(biāo)格式
4)反匯編
? arm-linux-gnueabihf-objdump -D led.elf > led.dis
========================================================================
代碼燒寫
Disk /dev/sdb: 14.4 GiB, 15502147584 bytes, 30277632 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x00000000
Device? ? Boot Start? ? ? End? Sectors? Size Id Type
/dev/sdb1? ? ? ? 8192 30277631 30269440 14.4G? c W95 FAT32 (LBA)
chmod +x ./imxdownload
./imxdownload led.bin /dev/sdb
=========================================================================
撥碼開(kāi)關(guān)網(wǎng)上撥動(dòng)是1削樊,往下?lián)苁?
SD卡啟動(dòng):裸機(jī)和u-boot啟動(dòng);
10000010
EMMC啟動(dòng):程序固化后,固化在EMMC內(nèi)部漫贞;
10100110
代碼源文件如下:
/*
?* gpio control led using asm:LED1_3--->low--->on;high--->off
?* version:1.0
?* Date:20211016
?* 1) enable gpio module[enable clock]
?* 2) mul gpio
?* 3) set electrical properties
?* 4) set direction and data
?* 5) loop
?*/
.global _start
_start:
? ? /*enable gpio clock*/
? ? ldr r0, =0x020c4068 /*CCM_CCGR0 */
? ? ldr r1, =0xFFFFFFFF
? ? str r1, [r0]
? ? ldr r0, =0x020c406C /*CCM_CCGR1 */
? ? ldr r1, =0xFFFFFFFF
? ? str r1, [r0]
? ? ldr r0, =0x020c4070 /*CCM_CCGR2 */
? ? ldr r1, =0xFFFFFFFF
? ? str r1, [r0]
? ? ldr r0, =0x020c4074 /*CCM_CCGR3 */
? ? ldr r1, =0xFFFFFFFF
? ? str r1, [r0] ?
? ? ldr r0, =0x020c4078 /*CCM_CCGR4 */
? ? ldr r1, =0xFFFFFFFF
? ? str r1, [r0]
? ? ldr r0, =0x020c407C /*CCM_CCGR5 */
? ? ldr r1, =0xFFFFFFFF
? ? str r1, [r0]
? ? ldr r0, =0x020c4080 /*CCM_CCGR6 */
? ? ldr r1, =0xFFFFFFFF
? ? str r1, [r0]
? ? //io mul ---> gpio
? ? ldr r0, =0x020e0068 /*IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03 */
? ? ldr r1, = 0x05
? ? str r1, [r0]
? ? //set electrical properties
? ? ldr r0, =0x020e02F4
? ? ldr r1, =0x10b0
? ? str r1, [r0]
? ? //set direction and data
? ? ldr r0, =0x0209c004
? ? ldr r1, =0x00000008
? ? str r1, [r0] ?
? ? ldr r0, =0x0209c000
? ? ldr r1, =0x0
? ? str r1, [r0] ?
loop:
? ? b loop
Makefile 如下:
led.bin:led.s
? ? arm-linux-gnueabihf-gcc -g -c led.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
? ? arm-linux-gnueabihf-objdump -D led.elf > led.dis
clean:
? ? rm -rf *.o led.bin led.elf led.dis