bsp工程管理
新建文件夹led_bsp
- 下面新建bsp用来存放驱动文件;
- imx6ul用来存放跟芯片有关的文件,比如NXP官方的SDK库文件;
- obj用来存放编译生成的.o文;
- project存放start.S和main.c.
- 将前面我们使用的cc.h、fsl_common.h、fsl_iomuxc.h 和 MCIMX6Y2.h这4个文件复制到文件夹imx6ul中;
- 在bsp目录下新建clk、delay、led分别存放时钟驱动、延时驱动、LED驱动
- 编写imx6ul.h文件:
#ifndef __IMX6UL_H
#define __IMX6UL_H
/***************************************************************
Copyright © lugl Co., Ltd. 1998-2023. All rights reserved.
文件名 : imx6ul.h
作者 : 刘建华
版本 : V1.0
描述 : 包含一些常用的头文件。
其他 : 此文件,学习正点原子左忠凯老师例程编写
论坛 :
日志 : 初版V1.0 2023/5/3 刘建华创建
***************************************************************/
#include "cc.h"
#include "MCIMX6Y2.h"
#include "fsl_common.h"
#include "fsl_iomuxc.h"
#endif
这样以后,其他的文件中任间引用imx6ul.h就可以了。
重写LED驱动代码
新建bsp_led.c、bsp_led.h两个文件,将这两个文件存放在bsp/led目录下面。
bsp_led.h内容如下
#ifndef __BSP_LED_H
#define __BSP_LED_H
/***************************************************************
Copyright © lugl Co., Ltd. 1998-2023. All rights reserved.
文件名 : bsp_led.h
作者 : 刘建华
版本 : V1.0
描述 : LED驱动头文件。
其他 : 此文件,学习正点原子左忠凯老师例程编写
论坛 :
日志 : 初版V1.0 2023/5/3 刘建华创建
************************************************************/
#define LED0 0
/*** 函数声明 *******/
void led_init(void);
void led_switch(int led, int status);
#endif
bsp_led.c内容如下:
#include "bsp_led.h"
/***************************************************************
Copyright © lugl Co., Ltd. 1998-2023. All rights reserved.
文件名 : bsp_led.c
作者 : 刘建华
版本 : V1.0
描述 : LED驱动文件。
其他 : 此文件,学习正点原子左忠凯老师例程编写
论坛 :
日志 : 初版V1.0 2023/5/3 刘建华创建
************************************************************/
/**********
* @description :初始化LED对应的GPIO
* @param[in] :无
* @return :无
*
*/
void led_init(void)
{
IOMUXC_SetPinMux(IOMUXC_GPIO1_IO03_GPIO1_IO03,0); /* 复用为GPIO1_IO03 */
IOMUXC_SetPinConfig(IOMUXC_GPIO1_IO03_GPIO1_IO03,0X10B0);
GPIO1- >GDIR |= (1 < < 3); /* 初始化GPIO,GPIO1_IO03设置为输出*/
GPIO1- >DR &= ~(1 < < 3); /* 设置GPIO1_IO03输出低电平,打开LED0*/
}
/*
* @description : LED控制函数,控制LED打开还是关闭
* @param - led : 要控制的LED灯编号
* @param - status : 0,关闭LED0,1 打开LED0
* @return : 无
*/
void led_switch(int led, int status)
{
switch (led)
{
case LED0:
if(status == ON)
GPIO1- >DR &= ~(1< < 3); /* 打开LED0 */
else if(status == OFF)
GPIO01- >DR |= (1< < 3); /* 关闭LED0 */
break;
default:
break;
}
}
编写时钟驱动代码
新建bsp_clk.h、bsp_clk.c两个文件,将这两个文件放到bsp/clk文件夹中。两个文件分别如下:
bsp_clk.h:
#ifndef __BSP_CLK_H
#define __BSP_CLK_H
/***************************************************************
Copyright © lugl Co., Ltd. 1998-2023. All rights reserved.
文件名 : bsp_clk.h
作者 : 刘建华
版本 : V1.0
描述 : 系统时钟驱动头文件。
其他 : 此文件,学习正点原子左忠凯老师例程编写
论坛 :
日志 : 初版V1.0 2023/5/3 刘建华创建
************************************************************/
#include "imx6ul.h"
void clk_init(void);
#endif
bsp_clk.c
/***************************************************************
Copyright © lugl Co., Ltd. 1998-2023. All rights reserved.
文件名 : bsp_clk.c
作者 : 刘建华
版本 : V1.0
描述 : 系统时钟 驱动文件。
其他 : 此文件,学习正点原子左忠凯老师例程编写
论坛 :
日志 : 初版V1.0 2023/5/3 刘建华创建
************************************************************/
#include "bsp_clk.h"
/***
* @description :初始化I.MAX6U所有外设时钟
* @param[in] :无
* @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;
}
bsp_delay驱动,直接拷贝左老师的文件
修改main.c文件如下
/***************************************************************
Copyright © lugl.
文件名 : main.c
作者 : 刘建华
版本 : V1.0
描述 :
其他 : 此程序学习左中凯老师课程
日志 : 初版 2023/5/3刘建华修改
**************************************************************/
#include "bsp_clk.h"
#include "bsp_led.h"
#include "bsp_delay.h"
/************************************************************
* @descriptions: main函数
* @param : 无
* @return : 无
*************************************************************/
int main(void)
{
clk_enable();
led_init();
while (1)
{
led_switch(LED0,ON);
delay(500);
led_switch(LED0,OFF);
delay(500);
}
return 0;
}
编写Makefile如下:
CROSS_COMPILE ?= arm-linux-gnueabihf-
TARGET ?= bsp
CC := $(CROSS_COMPILE)gcc
LD := $(CROSS_COMPILE)ld
OBJCOPY := $(CROSS_COMPILE)objcopy
OBJDUMP := $(CROSS_COMPILE)objdump
INCDIRS := imx6ul
bsp/clk
bsp/led
bsp/delay
SRCDIRS := project
bsp/clk
bsp/led
bsp/delay
INCLUDE := $(patsubst %, -I %, $(INCDIRS))
SFILES := $(foreach dir, $(SRCDIRS), $(wildcard $(dir)/*.S))
CFILES := $(foreach dir, $(SRCDIRS), $(wildcard $(dir)/*.c))
SFILENDIR := $(notdir $(SFILES))
CFILENDIR := $(notdir $(CFILES))
SOBJS := $(patsubst %, obj/%, $(SFILENDIR:.S=.o))
COBJS := $(patsubst %, obj/%, $(CFILENDIR:.c=.o))
OBJS := $(SOBJS) $(COBJS)
VPATH := $(SRCDIRS)
.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)
imx6ul.lds:
SECTIONS{
. = 0X87800000;
.text :
{
obj/start.o
*(.text)
}
.rodata ALIGN(4) : {*(.rodata*)}
.data ALIGN(4) : { *(.data) }
__bss_start = .;
.bss ALIGN(4) : { *(.bss) *(COMMON) }
__bss_end = .;
}
至此,程序重构完成,我们把文件拷到虚拟机进行编译,并烧写到SD卡:
烧到开发板后,LED0灯成功闪亮。
小结
本篇学习了bsp工程的创建管理,工程目录结构为bsp、imx6ul、obj、project来分片管理,bsp中又分为bsp_clk、bsp_led、bsp_delay来分片管理。最后学习了Makefile的创建,为以后工程使用提供基础的结构。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
时钟
+关注
关注
10文章
1733浏览量
131447 -
函数
+关注
关注
3文章
4327浏览量
62573 -
BSP
+关注
关注
1文章
87浏览量
26147 -
i.MX6
+关注
关注
1文章
37浏览量
16299
发布评论请先 登录
相关推荐
I.MX6ULL终结者开发板裸机仿真jlink调试
I.MX6ULL‘终结者’开发板预留了JTAG仿真接口,并给出了开发文档,可以实现在JLINK仿真器条件下的单步跟踪、断点调试等功能,使得开发研究i
发表于 07-07 10:56
介绍UART在i.mx6ull上的开发步骤
的HAL库开发在之前文章已经提及,本篇文章将介绍UART在i.mx6ull上的开发步骤。由于此芯片的裸机开发在Linux下并使用ARM-Li
发表于 12-16 06:34
初识 i.MX6ULL 寄存器
裸机开发_L1_汇编LED实验0. 本节目标1. 硬件层电路2. 初识 i.MX6ULL 寄存器2.1 i.MX6ULL 时钟控制寄存器2.2 i.
发表于 12-20 07:13
ARM裸机篇之i.MX6ULL处理器资料分享
1、i.MX6ULL处理器启动过程i.MX6ULL是NXP基于ARM Cortex-A7内核的单核处理器家族,主频可以高900MHz。i.MX6ULL应用处理器包含了电源管理模块,可以
发表于 04-14 16:42
飞凌i.MX6ULL开发板的评测,再次进阶拥有更高的性价比
处理器MCIMX6Y2开发设计,采用先进的ARMCortex-A7内核,运行速度高达800MHz。i.MX6ULL应用处理器包括一个集成的电源管理模块,降低了外接电源的复杂性,并简化了
发表于 10-27 11:55
•1484次阅读
基于NXP i.MX6ULL处理器的FETMX6ULL-C核心板
合作伙伴,飞凌不负美誉,基于i.MX6ULL匠心打造的FETMX6ULL-S核心板一经问世便好评不断,且已有数百家来自工业、医疗、电力、物联网等行业的用户采用此款核心板快速完成了整机产品的开发上市。
发表于 04-11 15:05
•1154次阅读
IMX6ULL开发板
i. MX6ULL 开发板板载资源丰富,核心板通过邮票孔将 i.MX6ULL 的所有资源几乎全部引出,接口丰富,可以满足各种应用的需求。核心板的尺寸仅为 42mm*38mm,非常小巧。
发表于 11-12 15:41
•26次下载
评论