DM 3730的MMC控制器框架如图7-11所示。图7-11DM 3730 MMC框架图从图7-11可见,MMC控制器中有复杂的命令和数据管理,控制器内部带有buffer用于数据缓冲,数据主要通过DMA读写。关于DM 3730 MMC的驱动部分,主要分析其相关的初始化和总线传输以及card状态变化的操作。......
2023-11-22
1ᤫ硬件引脚控制寄存器
首先来看看硬件上引脚复用提供给软件的接口寄存器,如图4-53所示。图4-53引自《DM 3730芯片手册》中第2449的表。
图4-53中引用的只是DM 3730引脚控制相关寄存器的一部分,从中可见对于某个固定的引脚可能会有不同的模式,而不同的模式表示该引脚为不同的功能模块提供服务,特殊的是safe_mode并不为具体的功能模块服务。从硬件的角度,引脚为safe_mode时,即使打开输入功能硬件也不会出现误传信号的问题。
引脚配置寄存器的设置如图4-54所示。图4-54引自《DM 3730芯片手册》中第2444页框图。
图4-53 DM 3730引脚复用相关寄存器
图4-54 DM 3730引脚配置寄存器设置
从图4-54中可见,引脚的设置除了具体针对模块功能之外,还有不同的引脚属性配置(比如上下拉,以及电源管理的属性)。从这些设置的内容可见,引脚复用属于横切功能,所以从设计的角度还是要考虑对于不同设备的支持。这就要求数据结构设计合理,并且要有通用性。
2ᤫ引脚复用管理数据结构
下面看看TI的引脚复用的重要数据结构和详细说明。
3ᤫ引脚复用管理相关函数
引脚的管理分为整体和设备模块相关两部分。先来看看整体的引脚管理,主要形成omap_mux_partition的信息,具体的代码与分析如下:(www.chuimin.cn)
这些工作主要是在板级初始化的时候做。板级初始化阶段就可以进行特定的引脚设置工作,相应的引脚参数是由特定的omap_board_mux来进行设置,在board-omap3evm.c中进行相关设置的代码如下:
与设备相关的引脚管理的接口函数和详细分析如下:
从以上分析可见,TI提供的引脚管理已经包括了引脚总的管理,以及专门针对设备模块的引脚管理,其中还涉及了电源管理相关的功能,是比较完整的架构。只是完全基于TI处理器的特点进行设计的,并没有考虑进一步的抽象,没有将操作和属性分别抽象出来,这一点与pin control架构还是有差别的,但是从功能完整性的角度来看已经是完整的方案了,可以帮助理解pin control架构。在设备模块引脚管理的代码中可见omap_hwmod,该结构是所有设备模块的抽象,与系统管理以及电源管理息息相关,该结构虽然与TI处理器有紧密关系,但也是非常清晰合理的上层抽象,所以作为设备模块的资源之一的引脚管理信息自然应该包含在其中。对于omap_hwmod相关的代码会在TI的SoC电源管理部分进行详细介绍。
有关深入剖析Linux内核与设备驱动的文章
DM 3730的MMC控制器框架如图7-11所示。图7-11DM 3730 MMC框架图从图7-11可见,MMC控制器中有复杂的命令和数据管理,控制器内部带有buffer用于数据缓冲,数据主要通过DMA读写。关于DM 3730 MMC的驱动部分,主要分析其相关的初始化和总线传输以及card状态变化的操作。......
2023-11-22
对DM 3730的开发板,相关的输入设备是电源管理芯片中的键盘矩阵,这里对相关的输入设备驱动进行分析。在硬件介绍中已经见到DM 3730与电源管理芯片是通过I2C总线进行连接的,所以该键盘驱动需要建立在I2C总线操作之上。具体获得相关信息的方法都是通过类似twl4030_read_kp_matrix_state的操作完成的,其中会进行实际的I2C总线操作,具体的细节会在总线部分进行介绍。在驱动获得硬件的信息后就是向输入设备框架汇报相应的事件,框架会上传给even than-dler,最终被用户读取。......
2023-11-22
TI芯片GPIO管理的具体实现仍是以DM 3730为例,关于GPIO模块本身,DM81XX等处理器与DM 3730是相同的,只是一些寄存器地址和参数不同。图4-50DM 3730GPIO子系统框图从图4-50可见,DM 3730一共有6组GPIO管理单元,每组管理32个GPIO。1重要的初始化实现对于GPIO功能芯片特殊的实现和GPIO lib的接口就是gpio_chip。3GPIO中断相关实现GPIO中断相关的实现,最主要的是中断控制器相关的接口实现以及中断级联中GPIO组的中断处理函数。......
2023-11-22
下面以4.1.1节所介绍的系统初始化流程为例,来看看不同的处理器启动流程的区别。图4-4和图4-5分别是DM 816X和DM 3730的启动流程。其中原因是芯片内部片内内存大小。接下来以TI芯片为基础进行整个系统的初始化过程详解。之前讨论内核初始化需求的时候,提到初始化代码应该在初始化之后释放相应的内存空间,这里可以看出Linux内核已经将初始化相关的代码统一存放并管理,一方面方便初始化时调用,另一方面可以在系统初始化之后将这部分空间释放。......
2023-11-22
要了解具体芯片的DMA使用和管理,首先要看一下硬件的设计。图4-44DM 3730 SDMA与其他模块联系系统框图从图4-44可见,SDMA共有96个DMA请求,用于设备请求DMA进行数据传输处理。SDMA可以访问到外设并可以响应芯片外部的DMA请求。为了提高整个的DMA性能,DMA提供多个中断信号给处理器,来加速系统对DMA处理数据过程的响应。DMA是很多驱动都需要使用的基础功能之一,以上进行了详细的代码级分析。......
2023-11-22
实际音频驱动的分析会以DM 3730的相关驱动为例进行说明。图6-17引自《DM 3730芯片手册》中第3096页框图。下面来看看dai相关的实现细节。4codec模块对codec模块部分,之前在codec的注册函数snd_soc_register_codec定义可见其会将co-dec driver和codec侧的dai同时注册,因为这两者都是与codec相关的。这里以DM3 730板上的twl4030为例,介绍相关的框架。对于codec主要是由codec driver来提供控制接口,而由codec dai来提供数据传输能力。......
2023-11-22
图4-24DM 3730物理空间设置IO空间映射的目的就是将这些物理地址映射到整个内核的地址空间中。首先来看ioremap虚拟地址返回是如何实现的。DM 3730等TI芯片就是通过该方法来实现该功能的。注意__arm_ioremap_caller使用的是vmalloc的空间进行映射,在相应版本内核中vmalloc的空间和TI芯片的IO映射空间是完全分开的,所以这里要直接返回相应的虚拟地址。......
2023-11-22
相关推荐