NXP官方SDK与makefile解析
移植文件
新建imx6ul文件夹,需要移植的文件有:
cc.h
fsl_common.h
fsl_iomuxc.h
MCIMX6Y2.h
IO函数说明
函数:IOMUXC_SetPinMux(IOMUXC_GPIO1_IO03_GPIO1_IO03 , 0); /* 复用为GPIO1_IO03 */
定义:IOMUXC_SetPinMux(uint32_t muxRegister,
uint32_t muxMode,
uint32_t inputRegister,
uint32_t inputDaisy,
uint32_t configRegister,
uint32_t inputOnfield)
解析:
#define IOMUXC_GPIO1_IO03_GPIO1_IO03 0x020E0068U, 0x5U, 0x00000000U, 0x0U, 0x020E02F4U
该函数有两个参数,第一个 IOMUXC_GPIO1_IO03_GPIO1_IO03 对应5个参数,用于确定复用寄存器地址,模式等。
第二个参数0
同理:
IOMUXC_SetPinConfig(IOMUXC_GPIO1_IO03_GPIO1_IO03,0X10B0);
IOMUXC_SetPinConfig(uint32_t muxRegister,
uint32_t muxMode,
uint32_t inputRegister,
uint32_t inputDaisy,
uint32_t configRegister,
uint32_t configValue)
最后一位configValue就是电气属性
makefile解析
见注释
CROSS_COMPILE ?= arm-linux-gnueabihf-
TARGET ?= beep //目标生成的名字
CC := $(CROSS_COMPILE)gcc //用CC代替gcc
LD := $(CROSS_COMPILE)ld
OBJCOPY := $(CROSS_COMPILE)objcopy
OBJDUMP := $(CROSS_COMPILE)objdump
INCDIRS := imx6ul \ //incdirs是所有头文件所在的路径
bsp/clk \
bsp/led \
bsp/delay \
bsp/beep
SRCDIRS := project \ //srcdirs是所有源码所在的路径
bsp/clk \
bsp/led \
bsp/delay \
bsp/beep
INCLUDE := $(patsubst %, -I %, $(INCDIRS)) //include是在所有.h文件前面加上“-I”用于链接
SFILES := $(foreach dir, $(SRCDIRS), $(wildcard $(dir)/*.S)) //sfiles是提取所有.s文件
CFILES := $(foreach dir, $(SRCDIRS), $(wildcard $(dir)/*.c)) //cfiles是提取所有.c文件
SFILENDIR := $(notdir $(SFILES)) //取消sfiles前面的路径
CFILENDIR := $(notdir $(CFILES)) //取消cfiles前面的路径
SOBJS := $(patsubst %, obj/%, $(SFILENDIR:.S=.o)) //.s链接到.o并放到obj目录下
COBJS := $(patsubst %, obj/%, $(CFILENDIR:.c=.o)) //.c链接到.o并放到obj目录下
OBJS := $(SOBJS) $(COBJS)
VPATH := $(SRCDIRS)
print: //打印,见下图
@echo INCLUDE = $(INCLUDE)
@echo SFILES = $(SFILES)
@echo CFILES = $(CFILES)
@echo SFILENDIR = $(SFILENDIR)
@echo CFILENDIR = $(CFILENDIR)
@echo SOBJS = $(SOBJS)
@echo COBJS = $(COBJS)
@echo OBJS = $(OBJS)
.PHONY: clean
$(TARGET).bin : $(OBJS)
$(LD) -Timx6ul.lds -o $(TARGET).elf $^
$(OBJCOPY) -O binary -S $(TARGET).elf $@
$(OBJDUMP) -D -m arm $(TARGET).elf > $(TARGET).dis
$(SOBJS) : obj/%.o : %.S
$(CC) -Wall -nostdlib -c -O2 $(INCLUDE) -o $@ $<
$(COBJS) : obj/%.o : %.c
$(CC) -Wall -nostdlib -c -O2 $(INCLUDE) -o $@ $<
clean:
rm -rf $(TARGET).elf $(TARGET).dis $(TARGET).bin $(COBJS) $(SOBJS)