目录
前言
本文作为本人学习Linux嵌入式记录文档,仅供参考。
开发板:正点原子阿尔法开发板(I.MX6ULL)
环境:Ubuntu 20.04 (LTS) (内核版本:Linux 5.4.0)
交叉编译器:arm-linux-gnueabihf 4.9.4
一、目的
- 了解熟悉官方库的编写方法
- 通过自己编写的文档点亮LED
- 了解移植SDK方法
二、过程
1、写库
(1)为什么要自己写库
NXP为IMX.6ULL编写了SDK包,这个SDK类似于STM32开发的STD库、HAL库,我们可以直接拿过来移植使用还可以直接使用官方的IAR进行开发,更加方便。那为什么还要自己写库呢?
目前所学习阶段都是裸机的例程,抱着学习目的学习Linux下的GCC开发方法和Makefile、Shell的使用,这是我们自己写库的原因之一。更重要的原因是。大多数Cotex-A系列的芯片是没有提供相关SDK的。我们日后开发不可能只使用一种芯片,所以学会写自己的库是必须掌握的技能。
(2)分析官方库文件
安装完NXP的SDK(可以从NXP官网下载)后,查看路径 NXP\devices\MCIMX6Y2\drivers 下的三个文件,分别是fsl_common.h 、fsl_iomuxc.h 、MCIMX6Y2.h 。下面还有其他的文件分别是各种驱动以及定义有兴趣可自行查看。
看三个文件的名字大概可以猜出 MCIMX6Y2.h 应该是关于寄存器的定义,fsl_iomux 是关于IO口复用的,fsl_common是通用的一些定义。
首先我们查看一下 MCIMX6Y2.h
在开头可以看到这些定义:
很明显这是关于中断的,本节我们不需要。我们要找的是关于寄存器定义的方法。为了节省时间,我们可以直接用编辑器的搜索查找我们需要的寄存器。大多数软件查找功能的快捷键都是Ctrl+F。如果用过库函数开发单片机的话,可以知道在一般关于寄存器定义方面都会使用一个“typedef struct”定义一个结构体类型。所以我们直接查询 CCM_Type。
我们可以看到这里分别定义了CCM内所有的寄存器包括我们需要用的CCGR0~CCGR6,而且他们的顺序是和参考手册中顺序是一样的。这