自学内容网 自学内容网

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

一、引言

在开发过程中,如果一个人来写寄存器、汇编等东西,会变得特别繁琐,好在官方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;
typedefunsigned char    u8;
typedefunsigned short int     u16;
typedefunsigned int    u32;
typedefunsigned 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卡里面(不是直接把文件托进去)
之后再插入板子上即可
在这里插入图片描述


原文地址:https://blog.csdn.net/m0_52592798/article/details/142223572

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!