自行编写IMX6U寄存器定义文件费时费力
    NXP官方提供SDK包,封装了寄存器定义文件(类似于STM32的stm32f10x.h)
    NXP为IMU6ULL编写的SDK包通用于IMX6UL
    需要部分修改
    官方下载的库中仅需要三个文件
    image.png
    fsl_common.h
    fsl_iomuxc.h
    MCIMX6Y2.h

    配合移植添加数据类型

    1. #ifndef __CC_H
    2. #define __CC_H
    3. /*
    4. * 自定义一些数据类型供库文件使用
    5. */
    6. #define __I volatile
    7. #define __O volatile
    8. #define __IO volatile
    9. typedef signed char int8_t;
    10. typedef signed short int int16_t;
    11. typedef signed int int32_t;
    12. typedef unsigned char uint8_t;
    13. typedef unsigned short int uint16_t;
    14. typedef unsigned int uint32_t;
    15. typedef unsigned long long uint64_t;
    16. typedef signed char s8;
    17. typedef signed short int s16;
    18. typedef signed int s32;
    19. typedef signed long long int s64;
    20. typedef unsigned char u8;
    21. typedef unsigned short int u16;
    22. typedef unsigned int u32;
    23. typedef unsigned long long int u64;
    24. #endif

    在main.c中可以直接调用配置函数 IOMUXC_SetPinMux IOMUXC_SetPinConfig

    1. #include "fsl_common.h"
    2. #include "fsl_iomuxc.h"
    3. #include "MCIMX6Y2.h"
    4. /*
    5. * @description : 使能I.MX6U所有外设时钟
    6. * @param : 无
    7. * @return : 无
    8. */
    9. void clk_enable(void)
    10. {
    11. CCM->CCGR0 = 0XFFFFFFFF;
    12. CCM->CCGR1 = 0XFFFFFFFF;
    13. CCM->CCGR2 = 0XFFFFFFFF;
    14. CCM->CCGR3 = 0XFFFFFFFF;
    15. CCM->CCGR4 = 0XFFFFFFFF;
    16. CCM->CCGR5 = 0XFFFFFFFF;
    17. CCM->CCGR6 = 0XFFFFFFFF;
    18. }
    19. /*
    20. * @description : 初始化LED对应的GPIO
    21. * @param : 无
    22. * @return : 无
    23. */
    24. void led_init(void)
    25. {
    26. /* 1、初始化IO复用 */
    27. IOMUXC_SetPinMux(IOMUXC_GPIO1_IO03_GPIO1_IO03,0); /* 复用为GPIO1_IO0 */
    28. IOMUXC_SetPinConfig(IOMUXC_GPIO1_IO03_GPIO1_IO03,0X10B0);
    29. /* 3、初始化GPIO,设置GPIO1_IO03设置为输出 */
    30. GPIO1->GDIR |= (1 << 3);
    31. /* 4、设置GPIO1_IO03输出低电平,打开LED0 */
    32. GPIO1->DR &= ~(1 << 3);
    33. }
    34. /*
    35. * @description : 打开LED灯
    36. * @param : 无
    37. * @return : 无
    38. */
    39. void led_on(void)
    40. {
    41. /* 将GPIO1_DR的bit3清零 */
    42. GPIO1->DR &= ~(1<<3);
    43. }
    44. /*
    45. * @description : 关闭LED灯
    46. * @param : 无
    47. * @return : 无
    48. */
    49. void led_off(void)
    50. {
    51. /* 将GPIO1_DR的bit3置1 */
    52. GPIO1->DR |= (1<<3);
    53. }
    54. /*
    55. * @description : 短时间延时函数
    56. * @param - n : 要延时循环次数(空操作循环次数,模式延时)
    57. * @return : 无
    58. */
    59. void delay_short(volatile unsigned int n)
    60. {
    61. while(n--){}
    62. }
    63. /*
    64. * @description : 延时函数,在396Mhz的主频下
    65. * 延时时间大约为1ms
    66. * @param - n : 要延时的ms数
    67. * @return : 无
    68. */
    69. void delay(volatile unsigned int n)
    70. {
    71. while(n--)
    72. {
    73. delay_short(0x7ff);
    74. }
    75. }
    76. /*
    77. * @description : mian函数
    78. * @param : 无
    79. * @return : 无
    80. */
    81. int main(void)
    82. {
    83. clk_enable(); /* 使能所有的时钟 */
    84. led_init(); /* 初始化led */
    85. while(1) /* 死循环 */
    86. {
    87. led_off(); /* 关闭LED */
    88. delay(500); /* 延时500ms */
    89. led_on(); /* 打开LED */
    90. delay(500); /* 延时500ms */
    91. }
    92. return 0;
    93. }

    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. OBJS := start.o main.o
    8. $(NAME).bin:$(OBJS)
    9. $(LD) -Timx6ul.lds -o $(NAME).elf $^
    10. $(OBJCOPY) -O binary -S $(NAME).elf $@
    11. $(OBJDUMP) -D -m arm $(NAME).elf > $(NAME).dis
    12. %.o:%.s
    13. $(CC) -Wall -nostdlib -c -O2 -o $@ $<
    14. %.o:%.S
    15. $(CC) -Wall -nostdlib -c -O2 -o $@ $<
    16. %.o:%.c
    17. $(CC) -Wall -nostdlib -c -O2 -o $@ $<
    18. clean:
    19. rm -rf *.o $(NAME).bin $(NAME).elf $(NAME).dis

    编译烧录流程同前面一样