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 包我们就需要上面这三个文件,把这三个文件准备好,我们后面移植要用。
我们把这三个文拷到一个文件夹,以备以后开发使用。
/***************************************************************
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 */
/***************************************************************
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函数(再也不用回来了)
/***************************************************************
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;
}
教程上说,三个SDK文件需要做相应的修改,我们在编译时,根据错误提示修改就行了。这次的实验主要体验SDK在裸机开发方面所提供的方便。特别是宏定义来一给一些固定的参数。
全部0条评论
快来发表一下你的评论吧 !