正点原子阿尔法ARM开发板-IMX6ULL(六)——通过官方SDK完成实验

发布于:2024-09-18 ⋅ 阅读:(11) ⋅ 点赞:(0)

一、引言

在开发过程中,如果一个人来写寄存器、汇编等东西,会变得特别繁琐,好在官方NXP官方给出了SDK包,

1.1 cc.h

有关变量类型的定义,NXP官方SDK的一些移植文件会用到。

#define     __I     volatile 
#define     __O     volatile 
#define     __IO    volatile

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

1.2 main.c

#include "fsl_common.h"

#include "fsl_iomuxc.h"

#include "MCIMX6Y2.h"



/*

 * @description	: 使能I.MX6U所有外设时钟

 * @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)

{

	/* 1、初始化IO复用 */

	IOMUXC_SetPinMux(IOMUXC_GPIO1_IO03_GPIO1_IO03,0);		/* 复用为GPIO1_IO0 */



	/* 2、、配置GPIO1_IO03的IO属性	

	 *bit 16:0 HYS关闭

	 *bit [15:14]: 00 默认下拉

     *bit [13]: 0 kepper功能

     *bit [12]: 1 pull/keeper使能

     *bit [11]: 0 关闭开路输出

     *bit [7:6]: 10 速度100Mhz

     *bit [5:3]: 110 R0/6驱动能力

     *bit [0]: 0 低转换率

     */

	IOMUXC_SetPinConfig(IOMUXC_GPIO1_IO03_GPIO1_IO03,0X10B0);



	/* 3、初始化GPIO,设置GPIO1_IO03设置为输出  */

	GPIO1->GDIR |= (1 << 3);	

	

	/* 4、设置GPIO1_IO03输出低电平,打开LED0 */

	GPIO1->DR &= ~(1 << 3);			

}



/*

 * @description	: 打开LED灯

 * @param 		: 无

 * @return 		: 无

 */

void led_on(void)

{

	/* 将GPIO1_DR的bit3清零 	*/

	GPIO1->DR &= ~(1<<3); 

}



/*

 * @description	: 关闭LED灯

 * @param 		: 无

 * @return 		: 无

 */

void led_off(void)

{

	/* 将GPIO1_DR的bit3置1 */

	GPIO1->DR |= (1<<3); 

}



/*

 * @description	: 短时间延时函数

 * @param - n	: 要延时循环次数(空操作循环次数,模式延时)

 * @return 		: 无

 */

void delay_short(volatile unsigned int n)

{

	while(n--){}

}



/*

 * @description	: 延时函数,在396Mhz的主频下

 * 			  	  延时时间大约为1ms

 * @param - n	: 要延时的ms数

 * @return 		: 无

 */

void delay(volatile unsigned int n)

{

	while(n--)

	{

		delay_short(0x7ff);

	}

}



/*

 * @description	: mian函数

 * @param 		: 无

 * @return 		: 无

 */

int main(void)

{

	clk_enable();		/* 使能所有的时钟 			*/

	led_init();			/* 初始化led 			*/



	while(1)			/* 死循环 				*/

	{	

		led_off();		/* 关闭LED 			*/

		delay(500);		/* 延时500ms 			*/



		led_on();		/* 打开LED 			*/

		delay(500);		/* 延时500ms 			*/

	}



	return 0;

}

1.2 fsl_common.h、MCIMX6Y2.h、fsl_iomuxc.h

从官方NXP的SDK包里面,主要是对于这三个文件的调用
对于fsl_common是NXP官方SDK的通用宏定义文档
对于fsl_iomuxc是NXP官方SDK的寄存器地址定义文档
对于MCIM6Y2是NXP官方SDK的寄存器结构体和相关位定义文档

1.3 对于宏定义能多个参数

IOMUXC_SetPinMux(IOMUXC_GPIO1_IO03_GPIO1_IO03, 0);
IOMUXC_GPIO1_IO03_GPIO1_IO03这个宏定义里面有5个参数,IOMUXC_SetPinMux这个函数总共有6个入口参数
在这里插入图片描述
在这里插入图片描述

其他

今天买了一块 RGBLCD的4.3寸的屏幕(200大洋没了),之后就是进行实验,记录下验证留着看
对了例程里面,尤其是裸机例程,进入文件夹先make
之后必须用到imxdownload进行烧写到SD卡里面(不是直接把文件托进去)
之后再插入板子上即可
在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到