| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> 【IMX6ULL笔记】--内核底层驱动初步探究 -> 正文阅读 |
|
[嵌入式]【IMX6ULL笔记】--内核底层驱动初步探究 |
本章简单介绍,imx6ull (cortex-A7)和 imxrt1062(cortex-m7)驱动开发模式对比 前期准备:1.imx6ull 准备内核文件,这里笔者使用的内核版本是 4.9.88,当然也可以下载其他版本,只要支持就行 2.imxrt1062 官方sdk (实际imx6ull官方给了一套sdk,可基于IAR开发,感兴趣的可以试试,但是一个A核芯片肯定基于linux开发才会发挥其作用) Select Board | MCUXpresso SDK Builder (nxp.com) 3.两款芯片数据手册 imx6ull 驱动开发模式(linux内核驱动开发):芯片厂商会从 The Linux Kernel Archives下载某版本的linux内核,然后将其移植到自己的CPU上,测试成功后就会将其开放到自己网站上,提供给开发者使用。我们去研读,提供的内核文件,肯定能找到,底层驱动操作(涉及到该芯片寄存器读写) imxrt1062 驱动开发模式(常规单片机开发,如:stm32这种),官方驱动包sdk上直接调用,基本不用啥驱动框架(近些年,小型嵌入式系统逐渐有了驱动框架形式,如:rt-thread 这类物联网操作系统等等) 驱动开发中如何操作驱动开发共同点,不论是ARM哪种核,最终操作的肯定是内存读写,对某个驱动的寄存器读写。另外对于一些有IO的外设,都是需要设置IO的复用和电气属性。接下来我们就拿一个SAI(全称:Synchronous Audio Interface )外设简单举例说明 1.imx6ull和rt1062寄存器地址描述
sai1寄存器存在位置,起始地址:0x0202_8000 大小:0x4000(16KB) 寄存器地址描述位置,存在于imx6ull.dtsi文件中,路径: ./arch/arm/boot/dts/,通过该dtsi文件我们可以定制属于自己的dts设备树文件(截图下方:imx6ull-14x14-evk.dts 为官方开发板设备树文件,可以通过官方文件照猫画虎深入学习)
sai1 寄存器存在位置 寄存器地址描述位置,存在于MIMXRT1062.h头文件中 2.imx6ull和rt1062驱动函数文件所属位置
首先我们需要通过imx6ull.dtsi文件找到sai1,其次找到compatible描述位置,我们可以通过:“fsl,imx6ul-sai”,“fsl,imx6sx-sai”,全局搜索,可以找到fsl_sai.c文件,可以看出该文件还支持 imx7 imx8等等 研读fsl_sai.c fsl_sai.h文件,我们可以找到很多描述该外设寄存器和读写该外设寄存器的信息,从源码中会找到一些regmap字眼,regmap是很重要的子系统(regmap 用于提供一套方便的 API 函数去操作底层硬件寄存器,以提高代码的可重用性),具体细节可以网上搜索理解。另外还有描述寄存器偏移的信息,用datasheet对比是不是一样。 补:根据如上方法,我们可以试试查阅 adc ,wdog, i2c等外设的信息
在文件底部,将会注册该驱动:module_platform_driver(内核文件中大量使用该函数)
驱动文件可以直接从sdk drivers文件夹中找到 3.imx6ull和rt1062 IO复用配置注:各家厂商有区别,这里只是描述nxp的
根据linux内核路劲:./arch/arm/boot/dts/ 可以找到:imx6ul-pinfunc.h imx6ull-pinfunc.h 和 imx6ull-pinfunc-snvs.h,根据宏后面的信息可知其相关配置信息 另外在imx6ull.dtsi文件中有个iomux节点的重用信息,同样我们可以通过"fsl,imx6ul-iomuxc"查找到pinctrl-imx6ull.c源码
除此之外配置信息,设备树dts文件中的需要做io配置,这里拿sai2举例
rt1062 io配置 io配置文件可以直接从sdk drivers文件夹中找到 fsl_iomuxc.h 然后调用两个函数,实现最终配置
补:除次之外还有时钟配置,外设时钟源选择,时钟分频等等,这里就不展开说说了,大家可以试试。 |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 22:57:18- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |