自行编写IMX6U寄存器定义文件费时费力
NXP官方提供SDK包,封装了寄存器定义文件(类似于STM32的stm32f10x.h)
NXP为IMU6ULL编写的SDK包通用于IMX6UL
需要部分修改
官方下载的库中仅需要三个文件
fsl_common.h
fsl_iomuxc.h
MCIMX6Y2.h
配合移植添加数据类型
#ifndef __CC_H#define __CC_H/** 自定义一些数据类型供库文件使用*/#define __I volatile#define __O volatile#define __IO volatiletypedef signed char int8_t;typedef signed short int int16_t;typedef signed int int32_t;typedef unsigned char uint8_t;typedef unsigned short int uint16_t;typedef unsigned int uint32_t;typedef unsigned long long uint64_t;typedef signed char s8;typedef signed short int s16;typedef signed int s32;typedef signed long long int s64;typedef unsigned char u8;typedef unsigned short int u16;typedef unsigned int u32;typedef unsigned long long int u64;#endif
在main.c中可以直接调用配置函数 IOMUXC_SetPinMux IOMUXC_SetPinConfig
#include "fsl_common.h"#include "fsl_iomuxc.h"#include "MCIMX6Y2.h"/** @description : 使能I.MX6U所有外设时钟* @param : 无* @return : 无*/void clk_enable(void){CCM->CCGR0 = 0XFFFFFFFF;CCM->CCGR1 = 0XFFFFFFFF;CCM->CCGR2 = 0XFFFFFFFF;CCM->CCGR3 = 0XFFFFFFFF;CCM->CCGR4 = 0XFFFFFFFF;CCM->CCGR5 = 0XFFFFFFFF;CCM->CCGR6 = 0XFFFFFFFF;}/** @description : 初始化LED对应的GPIO* @param : 无* @return : 无*/void led_init(void){/* 1、初始化IO复用 */IOMUXC_SetPinMux(IOMUXC_GPIO1_IO03_GPIO1_IO03,0); /* 复用为GPIO1_IO0 */IOMUXC_SetPinConfig(IOMUXC_GPIO1_IO03_GPIO1_IO03,0X10B0);/* 3、初始化GPIO,设置GPIO1_IO03设置为输出 */GPIO1->GDIR |= (1 << 3);/* 4、设置GPIO1_IO03输出低电平,打开LED0 */GPIO1->DR &= ~(1 << 3);}/** @description : 打开LED灯* @param : 无* @return : 无*/void led_on(void){/* 将GPIO1_DR的bit3清零 */GPIO1->DR &= ~(1<<3);}/** @description : 关闭LED灯* @param : 无* @return : 无*/void led_off(void){/* 将GPIO1_DR的bit3置1 */GPIO1->DR |= (1<<3);}/** @description : 短时间延时函数* @param - n : 要延时循环次数(空操作循环次数,模式延时)* @return : 无*/void delay_short(volatile unsigned int n){while(n--){}}/** @description : 延时函数,在396Mhz的主频下* 延时时间大约为1ms* @param - n : 要延时的ms数* @return : 无*/void delay(volatile unsigned int n){while(n--){delay_short(0x7ff);}}/** @description : mian函数* @param : 无* @return : 无*/int main(void){clk_enable(); /* 使能所有的时钟 */led_init(); /* 初始化led */while(1) /* 死循环 */{led_off(); /* 关闭LED */delay(500); /* 延时500ms */led_on(); /* 打开LED */delay(500); /* 延时500ms */}return 0;}
makefile
CROSS_COMPILE ?= arm-linux-gnueabihf-NAME ?= ledcCC := $(CROSS_COMPILE)gccLD := $(CROSS_COMPILE)ldOBJCOPY := $(CROSS_COMPILE)objcopyOBJDUMP := $(CROSS_COMPILE)objdumpOBJS := start.o main.o$(NAME).bin:$(OBJS)$(LD) -Timx6ul.lds -o $(NAME).elf $^$(OBJCOPY) -O binary -S $(NAME).elf $@$(OBJDUMP) -D -m arm $(NAME).elf > $(NAME).dis%.o:%.s$(CC) -Wall -nostdlib -c -O2 -o $@ $<%.o:%.S$(CC) -Wall -nostdlib -c -O2 -o $@ $<%.o:%.c$(CC) -Wall -nostdlib -c -O2 -o $@ $<clean:rm -rf *.o $(NAME).bin $(NAME).elf $(NAME).dis
编译烧录流程同前面一样
