1.文章说明
在我们编写驱动的时候需要使用到寄存器,但是往往自己编写寄存器的时候特别繁琐,容易出错,而且还需要对同一个寄存器反复定义,所以为了开发的科学性我们使用NXP官方专门为IMU6UL提供的SDK包来编写IMX6UL的第一个LED灯驱动。
在此前先说明,这里我是关于SDK的包我已经参照正点原子的视频全部移植完成了,在之后需要使用的文件我都会放在链接,如果想要自己重新移植一次我也会将SDK的安装包放在文件中,然后可以惨参考正点原子的SDK使用和移植教程,但是这里我就不讲解具体的移植过程了。
2.编写LED驱动
1.SDK库移植
现在我们就正式讲解如何使用SDK库编写LED灯的驱动,首先在Linux中的Vscode新建一个工程文件,然后通过filezilla传输软件,将这三个已经移植好的文件传输到我们新建的工程文件中。

然后在Vscode中打开工程文件,我们移植的三个头文件都应该在文件栏的左侧

在我们移植好的三个库中分别是fsl_common.h fsl_iomuxch.h MCIMX6Y2.h,但需要注意的是在这三个头文件中都没有对于数据类型的定义所以我们需要自己手写一个数据类型的定义,我们打开上面的终端,然后新建终端,然后确认自己在这个文件夹的路径下,
![]()
输入命令行,创建一个cc.h的文件夹![]()
然后写入数据类型的代码

接下来我们的库已经移植过来,并且不会出现任何问题,然后创建一个main.h的文件在里面编写LED的驱动,使用如下命令创建main.h文件夹
![]()
打开创建好的main.h,首先引用我们移植过来的库,也就是fsl_common.h fsl_iomuxch.h MCIMX6Y2.h这三个头文件,其中包含了我们所有寄存器的宏定义,以及硬件资源的访问接口,使得用户可以直接操作处理器的寄存器和外设等。所以必须先引用文件。
2.LED时钟初始化
然后我们将思路整理一下,需要使用的绝大数外设模块在使用之前都是需要先使能时钟,外设模块需要时钟信号等相关原因,所以我们第一步都是先初始化时钟,那么我们看到我IMX6uL的参考手册,CCM(Clock Controller Module) Clock Gating Register,叫做CCM通用寄存器,也就是时钟控制模块通用寄存器,主要作用是管理和控制系统中外设的时钟信号。通过设置这些寄存器中的相应位,可以开启或关闭特定外设的时钟。

在这里CCM通用寄存器有四种模式,通过在不同模式下开启或关闭时钟来减少功耗。
1. 00 时钟在所有模式下关闭,停止进入硬件握手,也就是将此寄存器禁用
时钟完全关闭,无论系统处于运行模式、等待模式还是停止模式。这可以最大限度地节省功耗,但如果该模块在这些模式中需要运行,则不能使用。
2. 01 时钟在运行模式下关闭,但在等待和停止模式下关闭

最低0.47元/天 解锁文章
199

被折叠的 条评论
为什么被折叠?



