官方SDK簡介
I.MX6ULL官方提供了裸機SDK包,使得學習上手冊很。I.MX6ULL的SDK包在NXP官網下載https://www.nxp.com/search?keyword=i.MX%25206ULL%2520SDK&start=0&category=software
當然原子在資料盤中也給我們提供了,在目錄L:\\baidudownloads\\【正點原子】阿爾法Linux開發板(A盤)-基礎資料\\【正點原子】阿爾法Linux開發板(A盤)-基礎資料\\07、I.MX6U參考資料\\03、I.MX6ULL SDK包目錄下面:
雙擊安裝程序,在目錄選擇時,指定目錄,好在以后需要時找得到
安裝好后,文件夾如下:
我們裸機開發的話用到以下三個文件:
fsl_common.h:位置為 SDK_2.2_MCIM6ULL\\devices\\MCIMX6Y2\\drivers\\fsl_common.h。
fsl_iomuxc.h: 位置為 SDK_2.2_MCIM6ULL\\devices\\MCIMX6Y2\\drivers\\fsl_iomuxc.h。
MCIMX6Y2.h: 位置為 SDK_2.2_MCIM6ULL\\devices\\MCIMX6Y2\\MCIMX6YH2.h。
整個 SDK 包我們就需要上面這三個文件,把這三個文件準備好,我們后面移植要用。
我們把這三個文拷到一個文件夾,以備以后開發使用。
編寫實驗程序
- 新建一個名為cc.h的頭文件,cc.h中存放著一些SDK庫文件需要使用的數據類型,如下所示:
/***************************************************************
Copyright ? lugl.
文件名 : main.h
作者 : 劉建華
版本 : V1.0
描述 : 有關變量的類型定義,nxp官方SDK的一些移植文件會用到。
其他 : 此程序學習左中凱老師課程
日志 : 初版 2023/5/3 劉建華修改
**************************************************************/
/************************************************************
*
* 自定義一些數據類型供庫文件使用
*
* /
*/
#define __I volatile
#define __O volatile
#define __IO volatile
#define ON 1
#define OFF 0
typedef 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 /* __CC_H */
- start.S:
/***************************************************************
Copyright ? lugl.
文件名 : start.s
作者 : 劉建華
版本 : V1.0
描述 : I.MX6U-ALPHA/I.MX6ULL 開發板啟動文件,完成 C 環境初始化,
C 環境初始化完成以后跳轉到 C 代碼。
其他 : 此程序學習左中凱老師課程
日志 : 初版 2023/5/3 劉建華修改
**************************************************************/
.global _start @全局標號
/*
* 描述:_start函數,程序從此函靈敏開始執行,
* ```
此函數主要功能是設置C運行環境
*/
_start:
/* 進入SVC模式 */
mrs r0, cpsr
bic r0, r0, #0x1f @ 將r0的低5位清零,也就是cpsr的M0-M4
orr r0, r0, #0x13 @ r0或上0x13,表示使用SVC模式
msr cpsr, r0 @ 將r0 的數據寫入到cpsr_c中
ldr sp, =0x80200000 @ 設置棧指針
b main @ 跳轉到main函數(再也不用回來了)
- main.c
/***************************************************************
Copyright ? lugl.
文件名 : main.c
作者 : 劉建華
版本 : V1.0
描述 : 使用C語言來點亮開發板的LED燈,基于官方的SDK來開發。
學習掌握如何用c語言來完成對I.MX6U的GPIO初始化和控制
其他 : 此程序學習左中凱老師課程
需要使用到的文件有fsl.common.h、fsl_iomuxc.h、MCIMX6Y2.h
日志 : 初版 2023/5/3劉建華修改
**************************************************************/
#include "fsl_common.h"
#include "fsl_iomuxc.h"
#include "MCIMX6Y2.h"
/***
* @description :使能I.MX6ULL所有外設時鐘
* @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)
{
/* 初始化IO 復用 */
IOMUXC_SetPinMux(IOMUXC_GPIO1_IO03_GPIO1_IO03,0);
/* 配置 IO的屬性 */
IOMUXC_SetPinConfig(IOMUXC_GPIO1_IO03_GPIO1_IO03, 0x10b0);
/* 初始化GPIO 設置GPIO1_IO03 為輸出*/
GPIO1->GDIR |= (1<<3);
/* 設置GPIO1——IO03為低電平,打開LED0 */
GPIO1->DR &= ~(1<<3);
}
/************************************************************
* @descriptions: 打開LED燈
* @param : 無
* @return : 無
*************************************************************/
void led_on(void)
{
/*
* 將GPIO1_DR 的bit3清零,打開led0燈
*/
GPIO1->DR &= ~(1<<3);
}
/************************************************************
* @descriptions: 關閉LED燈
* @param : 無
* @return : 無
*************************************************************/
void led_off(void)
{
/*
* 將GPIO1_DR 的bit3置1,關閉led0燈
*/
GPIO1->DR |= (1<<3);
}
/************************************************************
* @descriptions: 短時間延時函數
* @param -n : 要延時循環次數,模式延時
* @return : 無
*************************************************************/
void delay_short(volatile unsigned int n)
{
while (n--)
{
;
}
}
/************************************************************
* @descriptions: 延時函數,在396MHz的主頻下延時時間大約為1ms
* @param -n : 要延時的ms數
* @return : 無
*************************************************************/
void delay(volatile unsigned int n)
{
while (n--)
{
delay_short(0x7ff);
}
}
/************************************************************
* @descriptions: main函數
* @param : 無
* @return : 無
*************************************************************/
int main(void)
{
clk_enable(); //使能所有時鐘
led_init(); //初始化LED
while (1)
{
led_on(); //打開LED
delay(500); //延時
led_off(); //關閉LED
delay(500);
}
return 0;
}
- lds、makefile 拷貝前面的就OK,
- 把文件放到虛擬機上,運行make,就得到ledc.bin文件,燒寫到SD卡
經驗
教程上說,三個SDK文件需要做相應的修改,我們在編譯時,根據錯誤提示修改就行了。這次的實驗主要體驗SDK在裸機開發方面所提供的方便。特別是宏定義來一給一些固定的參數。
-
led
+關注
關注
240文章
22908瀏覽量
650183 -
NXP
+關注
關注
60文章
1243瀏覽量
181557 -
開發板
+關注
關注
25文章
4771瀏覽量
96197 -
SDK
+關注
關注
3文章
1007瀏覽量
45426 -
i.MX6
+關注
關注
1文章
37瀏覽量
16251
發布評論請先 登錄
相關推薦
評論