日期:2023-05-03 21:16:10 來源:華仔的編程隨筆
下面新建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就可以了。
新建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;}
修改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; }
CROSS_COMPILE ?= arm-linux-gnueabihf-TARGET ?= bspCC := $(CROSS_COMPILE)gccLD:= $(CROSS_COMPILE)ldOBJCOPY := $(CROSS_COMPILE)objcopyOBJDUMP := $(CROSS_COMPILE)objdumpINCDIRS:= imx6ul bsp/clk bsp/led bsp/delaySRCDIRS:= project bsp/clk bsp/led bsp/delayINCLUDE:= $(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 $@ $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的創建,為以后工程使用提供基礎的結構。
標簽:
上一篇: 熱文:我國首個!正在建設! “出場即發射”將成為可能
下一篇: 最后一頁
BSP工程管理——I.MAX6Ull裸機開發 焦點消息
熱文:我國首個!正在建設! “出場即發射”將成為可能
【五四特別致敬·我還是從前那個少年】三位“80后”的別樣青春
孫穎莎世乒賽奪冠,離不開王曼昱和陳夢的發揮,當然還有王藝迪
靠譜職業培訓機構哪里查? 天天觀焦點
梅西被停賽、停訓、停薪!或還面臨數十萬歐元罰款 天天熱門
西安一景區直升機墜落致3死1傷,死傷者身份披露,景區態度冷漠
王猛:湖人上來就是玩命 勇士球迷直接失去了兩天的網絡呼吸權
環球今亮點!iphone x評測!小編帶你近距離了解iphone x
每日速讀!她,榮獲“全國優秀共青團干部”稱號!
免疫組合為SCLC創造手術機會,實現2年無病生存 世界今亮點
丹麥將向烏提供2.5億軍備和財政支持,在波羅的海部署營地_今日聚焦
天津出臺《科教興市人才強市行動方案》
海口馬村邊檢為海上停泊輪船辦理入境手續
當前快看:傷心的女人怎么了原唱_傷心的女人怎么
環球關注:動脈硬化指數偏高是什么意思_動脈硬化指數偏高
當前簡訊:第一共和救了,美國地區銀行為何又暴跌?
世界熱點評!中青漫評丨跟著“二次元”動車“守護神” 給動車組做“體檢”
最資訊丨成都經濟適用房申請條件_成都經濟適用房申請條件有哪些
小船過河問題三種情況圖文_小船過河問題三種情況畫圖
寧南縣氣象臺更新大風藍色預警信號[IV級/一般] 【2023-05-02】
請避開演習區域!“隴原礪劍·2023”抗震救災實戰演習即將舉行 焦點簡訊
假期在崗位 | 練就“絕活兒” 穿越困難振翼飛翔
每日熱文:《最終幻想1-6合集》銷量破200萬份!實體版曾秒罄
萬勵達(08482.HK)5月2日收盤跌2.78%