一、官方SDK移植
1、新建cc.h文件
sdk包里用到很多数据类型,所以我们要在cc.h里面定义一些常用的数据类型
2、移植文件
需要移植下面三个文件:fsl_common.h 、 fsl_iomux.h 、 MCIMX6Y2.h
设备为MCIMX6Y2
两个设置IO复用、电气属性的函数:

1044 /*!
1045 * @brief Sets the IOMUXC pin mux mode.
1046 * @note The first five parameters can be filled with the pin function ID macros.
1047 *
1048 * This is an example to set the ENET1_RX_DATA0 Pad as FLEXCAN1_TX:
1049 * @code
1050 * IOMUXC_SetPinMux(IOMUXC_ENET1_RX_DATA0_FLEXCAN1_TX, 0);
1051 * @endcode
1052 *
1053 * This is an example to set the GPIO1_IO02 Pad as I2C1_SCL:
1054 * @code
1055 * IOMUXC_SetPinMux(IOMUXC_GPIO1_IO02_I2C1_SCL, 0);
1056 * @endcode
1057 *
1058 * @param muxRegister The pin mux register.
1059 * @param muxMode The pin mux mode.
1060 * @param inputRegister The select input register.
1061 * @param inputDaisy The input daisy.
1062 * @param configRegister The config register.
1063 * @param inputOnfield Software input on field.
1064 */
#define IOMUXC_GPIO1_IO03_GPIO1_IO03 0x020E0068U, 0x5U, 0x00000000U, 0x0U, 0x020E02F4U
15383 #define IOMUXC_SW_MUX_CTL_PAD_MUX_MODE_MASK (0xFU) /* Merged from fields with different position or width, of widths (3, 4), largest definition used */
15384 #define IOMUXC_SW_MUX_CTL_PAD_MUX_MODE_SHIFT (0U)
15385 #define IOMUXC_SW_MUX_CTL_PAD_MUX_MODE(x) (((uint32_t)(((uint32_t)(x)) << IOMUXC_SW_MUX_CTL_PAD_MUX_MODE_SHIFT)) & IOMUXC_SW_MUX_CTL_PAD_MUX_MODE_MASK) /* Merged from fields with different p osition or width, of widths (3, 4), largest definition used */
15386 #define IOMUXC_SW_MUX_CTL_PAD_SION_MASK (0x10U)
15387 #define IOMUXC_SW_MUX_CTL_PAD_SION_SHIFT (4U)
15388 #define IOMUXC_SW_MUX_CTL_PAD_SION(x) (((uint32_t)(((uint32_t)(x)) << IOMUXC_SW_MUX_CTL_PAD_SION_SHIFT)) & IOMUXC_SW_MUX_CTL_PAD_SION_MASK)
1065 static inline void IOMUXC_SetPinMux(uint32_t muxRegister,
1066 uint32_t muxMode,
1067 uint32_t inputRegister,
1068 uint32_t inputDaisy,
1069 uint32_t configRegister,
1070 uint32_t inputOnfield)
1071 {
1072 *((volatile uint32_t *)muxRegister) =
1073 IOMUXC_SW_MUX_CTL_PAD_MUX_MODE(muxMode) | IOMUXC_SW_MUX_CTL_PAD_SION(inputOnfield);
1074
1075 if (inputRegister)
1076 {
1077 *((volatile uint32_t *)inputRegister) = IOMUXC_SELECT_INPUT_DAISY(inputDaisy);
1078 }
1079 }
1081 /*!
1082 * @brief Sets the IOMUXC pin configuration.
1083 * @note The previous five parameters can be filled with the pin function ID macros.
1084 *
1085 * This is an example to set pin configuration for IOMUXC_GPIO1_IO02_I2C1_SCL:
1086 * @code
1087 * IOMUXC_SetPinConfig(IOMUXC_GPIO1_IO02_I2C1_SCL, IOMUXC_SW_PAD_CTL_PAD_PUE_MASK | IOMUXC_SW_PAD_CTL_PAD_PUS(2U));
1088 * @endcode
1089 *
1090 * @param muxRegister The pin mux register.
1091 * @param muxMode The pin mux mode.
1092 * @param inputRegister The select input register.
1093 * @param inputDaisy The input daisy.
1094 * @param configRegister The config register.
1095 * @param configValue The pin config value.
1096 */
1097 static inline void IOMUXC_SetPinConfig(uint32_t muxRegister,
1098 uint32_t muxMode,
1099 uint32_t inputRegister,
1100 uint32_t inputDaisy,
1101 uint32_t configRegister,
1102 uint32_t configValue)
1103 {
1104 if (configRegister)
1105 {
1106 *((volatile uint32_t *)configRegister) = configValue;
1107 }
1108 }
Makefile
1 CROSS_COMPILE ?= arm-linux-gnueabihf-
2 NAME ?= ledc
3 CC := $(CROSS_COMPILE)gcc
4 LD := $(CROSS_COMPILE)ld
5 OBJCOPY := $(CROSS_COMPILE)objcopy
6 OBJDUMP := $(CROSS_COMPILE)objdump
7
8 OBJS := start.o main.o
9
10 $(NAME).bin : $(OBJS)
11 $(LD) -Timx6u.lds -o $(NAME).elf $^
12 $(OBJCOPY) -O binary -S $(NAME).elf $@
13 $(OBJDUMP) -D -m arm $(NAME).elf > $(NAME).dis
14
15 %.o : %.s
16 $(CC) -Wall -nostdlib -c $< -o $@
17
18 %.o : %.c
19 $(CC) -Wall -nostdlib -c $< -o $@
20
21 .PHONY:clean
22 clean:
23 rm -rf *.o *.elf *.bin *.imx *.dis
本文详细介绍了一种官方SDK的移植过程,包括cc.h文件的创建及数据类型的定义。此外,深入探讨了针对MCIMX6Y2设备的IO复用和电气属性设置,通过IOMUXC_SetPinMux和IOMUXC_SetPinConfig函数实现具体实例。
1043

被折叠的 条评论
为什么被折叠?



