imx6ull 4 之移植nxp官方sdk

本文详细介绍了一种官方SDK的移植过程,包括cc.h文件的创建及数据类型的定义。此外,深入探讨了针对MCIMX6Y2设备的IO复用和电气属性设置,通过IOMUXC_SetPinMux和IOMUXC_SetPinConfig函数实现具体实例。

一、官方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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值