主页 > 互联网 > 内容页

最资讯丨I.MX6ULL官方SDK驱动LED灯

2023-05-03 21:10:38 来源:电子发烧友网

官方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 0typedef 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模式 */mrsr0, cpsrbic r0, r0, #0x1f    @ 将r0的低5位清零,也就是cpsr的M0-M4orr 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在裸机开发方面所提供的方便。特别是宏定义来一给一些固定的参数。

标签:

上一篇:BSP工程管理——I.MAX6Ull裸机开发-世界今头条
下一篇:最后一页