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的創建,為以后工程使用提供基礎的結構。
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
時鐘
+關注
關注
11文章
1734瀏覽量
131496 -
函數
+關注
關注
3文章
4332瀏覽量
62640 -
BSP
+關注
關注
1文章
87瀏覽量
26158 -
i.MX6
+關注
關注
1文章
37瀏覽量
16310
發布評論請先 登錄
相關推薦
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
?1490次閱讀
基于NXP i.MX6ULL處理器的FETMX6ULL-C核心板
合作伙伴,飛凌不負美譽,基于i.MX6ULL匠心打造的FETMX6ULL-S核心板一經問世便好評不斷,且已有數百家來自工業、醫療、電力、物聯網等行業的用戶采用此款核心板快速完成了整機產品的開發上市。
發表于 04-11 15:05
?1156次閱讀
IMX6ULL開發板
i. MX6ULL 開發板板載資源豐富,核心板通過郵票孔將 i.MX6ULL 的所有資源幾乎全部引出,接口豐富,可以滿足各種應用的需求。核心板的尺寸僅為 42mm*38mm,非常小巧。
發表于 11-12 15:41
?26次下載
評論