Freescales i.mx6配置IOMUX

本文详细介绍了如何在i.MX6芯片上配置IOMUX以实现引脚复用功能,包括查找原理图确定引脚功能、查阅软件手册获取寄存器配置信息及在内核源代码中进行具体配置的方法。

Freescales i.mx6配置IOMUX

144 
作者  songwenbin 
2015.02.26 14:02*  字数 1077  阅读 2765 评论 1 赞赏 1

为什么IOMUX

Soc芯片上有很多引脚,每个引脚对应特定的功能。例如控制电机需要控制电机的功能引脚1和引脚2,控制传感器需要控制传感器功能的引脚3和引脚4。对于使用Soc芯片的需求方来说,可能只是控制电机,或者只是控制传感器。这样Soc芯片上的4个引脚就浪费了2个引脚。为了能提供更多的功能,减少引脚的浪费,可以把引脚1,2和引脚3,4合并,通过复用引脚来解决问题。

i.mx6的Soc芯片提供IOMUX机制就是用来解决引脚复用的问题。

如何确定使用引脚12,还是使用引脚34,是下面要介绍的主要内容

需要的概念

Pad 对应的是Soc芯片上的引脚
Signal 对应的是控制电机的功能

需要配置的寄存器

  • Pad控制寄存器
  • Mux控制寄存器
  • Select Input寄存器

配置IOMUX的必备工具

  1. 芯片原理图
  2. 芯片软件手册
  3. 内核源代码

配置步骤

1. 查看原理图

下面是USB转串口芯片的原理图,我们需要配置UART1_RX这个接口。

uart.jpeg
uart.jpeg

通过UART1_RX,我们可以在i.mx6的原理图中找到对应的引脚CSI0_DAT11。

imx6soc.jpeg
imx6soc.jpeg

2. 查找软件手册(引脚功能)

软件手册第4章
查找CSI0_DAT11,可以得到两个重要的信息

  • Pad的控制寄存器名称 SW_PAD_CTL_PAD_CSI0_DATA11
  • CSI0_DAT11的功能UART1_RX_DATA 用于查找其他两个寄存器
    uartfunction.jpeg
    uartfunction.jpeg

查找UART1_RX_DATA,可以得到两个寄存器

  • Mux的控制寄存器名称 IOMUX_SW_MUX_CTL_PAD_CSI0_DATA11
  • Select Input的寄存器名称 IOMUXC_UART1_UART_RX_DATA_SELECT_INPUT
    uartmuxoption.jpeg
    uartmuxoption.jpeg

3. 查找软件手册(IOMUX功能配置)

软件手册第36章, 介绍了IOMUX需要配置寄存器的所有信息。

根据三个寄存器的名称进行查找

  • Pad的控制寄存器名称 SW_PAD_CTL_PAD_CSI0_DATA11
  • Mux的控制寄存器名称 IOMUX_SW_MUX_CTL_PAD_CSI0_DATA11
  • Select Input的寄存器名称 IOMUXC_UART1_UART_RX_DATA_SELECT_INPUT
    IOMUX_SW_PAD_CTL_PAD_CSI0_DATA11
    偏移地址:654h
    Pad控制寄存器主要用于控制引脚的上拉电阻,下拉电阻和电压控制
    pad.jpeg
    pad.jpeg
IOMUX_SW_MUX_CTL_PAD_CSI0_DATA11

偏移地址:284h
配置MUX_MODE的模式为ALT3,就能使用UART1_RX_DATA的功能

mux.jpeg
mux.jpeg
IOMUXC_UART1_UART_RX_DATA_SELECT_INPUT

偏移地址:920h

selectinput.jpeg
selectinput.jpeg

三 源码配置

配置IOMUX的过程,实际上就是向指定的设备地址写入配置值的过程。

内核代码提供专门的宏 IOMUX_PAD,用来把IOMUX的配置进行拼装,然后写入到指定的设备地址中。

IOMUX_PAD 定义

文件 ~/android/kernel_imx/arch/arm/plat-mxc/include/mach/iomux-v3.h

/*
 *      build IOMUX_PAD structure
 *
 * This iomux scheme is based around pads, which are the physical balls
 * on the processor.
 *
 * - Each pad has a pad control register (IOMUXC_SW_PAD_CTRL_x) which controls
 *   things like driving strength and pullup/pulldown.
 * - Each pad can have but not necessarily does have an output routing register
 *   (IOMUXC_SW_MUX_CTL_PAD_x).
 * - Each pad can have but not necessarily does have an input routing register
 *   (IOMUXC_x_SELECT_INPUT)
 *
 * The three register sets do not have a fixed offset to each other,
 * hence we order this table by pad control registers (which all pads
 * have) and put the optional i/o routing registers into additional
 * fields.
 *
 * The naming convention for the pad modes is MX35_PAD_<padname>__<padmode>
 * If <padname> or <padmode> refers to a GPIO, it is named
 * GPIO_<unit>_<num>
 *
 * IOMUX/PAD Bit field definitions
 *
 * MUX_CTRL_OFS:            0..11 (12)
 * PAD_CTRL_OFS:           12..23 (12)
 * SEL_INPUT_OFS:          24..35 (12)
 * MUX_MODE + SION:        36..40  (5)
 * PAD_CTRL + NO_PAD_CTRL: 41..58 (18)
 * SEL_INP:                59..62  (4)
 * reserved:                 63    (1)
*/

#define IOMUX_PAD(_pad_ctrl_ofs, _mux_ctrl_ofs, _mux_mode, _sel_input_ofs,  _sel_input, _pad_ctrl)  
                (((iomux_v3_cfg_t)(_mux_ctrl_ofs) << MUX_CTRL_OFS_SHIFT) |       
                ((iomux_v3_cfg_t)(_mux_mode) << MUX_MODE_SHIFT) |                 
                ((iomux_v3_cfg_t)(_pad_ctrl_ofs) << MUX_PAD_CTRL_OFS_SHIFT) |   
                ((iomux_v3_cfg_t)(_pad_ctrl) << MUX_PAD_CTRL_SHIFT) |                 
                ((iomux_v3_cfg_t)(_sel_input_ofs) << MUX_SEL_INPUT_OFS_SHIFT) | 
                ((iomux_v3_cfg_t)(_sel_input) << MUX_SEL_INPUT_SHIFT))
参数
  • _pad_ctrl_ofs pad控制寄存器的偏移地址
  • _mux_ctrl_ofs mux控制寄存器的偏移地址
  • _mux_mode mux的模式
  • _sel_input_ofs input寄存器的偏移地址
  • _sel_input input的类型
配置

通过软件手册查找到三个寄存器的地址, 使用IOMUX_PAD配置代码。

  • SW_PAD_CTL_PAD_CSI0_DATA11 偏移地址 0x654
  • IOMUX_SW_MUX_CTL_PAD_CSI0_DATA11 偏移地址 0x284
  • IOMUXC_UART1_UART_RX_DATA_SELECT_INPUT 偏移地址 0x920

文件 ~/android/kernel_imx/arch/arm/plat-mxc/include/mach/iomux-mx6q.h

#define _MX6Q_PAD_CSI0_DAT11__UART1_RXD                 \
                IOMUX_PAD(0x0654, 0x0284, 3, 0x0920, 1, 0)

上面的内容描述了从原理图查找指定引脚,到软件手册找到Mux,Pad,SelInput的寄存器配置信息,再到内核代码如何进行配置的全部映射关系。

最后总结: i.mx6 太TMD复杂了

本课题设计了一种利用Matlab平台开发的植物叶片健康状态识别方案,重点融合了色彩与纹理双重特征以实现对叶片病害的自动化判别。该系统构建了直观的图形操作界面,便于用户提交叶片影像并快速获得分析结论。Matlab作为具备高效数值计算与数据处理能力的工具,在图像分析与模式分类领域应用广泛,本项目正是借助其功能解决农业病害监测的实际问题。 在色彩特征分析方面,叶片影像的颜色分布常与其生理状态密切相关。通常,健康的叶片呈现绿色,而出现黄化、褐变等异常色彩往往指示病害或虫害的发生。Matlab提供了一系列图像处理函数,例如可通过色彩空间转换与直方图统计来量化颜色属性。通过计算各颜色通道的统计参数(如均值、标准差及主成分等),能够提取具有判别力的色彩特征,从而为不同病害类别的区分提供依据。 纹理特征则用于描述叶片表面的微观结构与形态变化,如病斑、皱缩或裂纹等。Matlab中的灰度共生矩阵计算函数可用于提取对比度、均匀性、相关性等纹理指标。此外,局部二值模式与Gabor滤波等方法也能从多尺度刻画纹理细节,进一步增强病害识别的鲁棒性。 系统的人机交互界面基于Matlab的图形用户界面开发环境实现。用户可通过该界面上传待检图像,系统将自动执行图像预处理、特征抽取与分类判断。采用的分类模型包括支持向量机、决策树等机器学习方法,通过对已标注样本的训练,模型能够依据新图像的特征向量预测其所属的病害类别。 此类课题设计有助于深化对Matlab编程、图像处理技术与模式识别原理的理解。通过完整实现从特征提取到分类决策的流程,学生能够将理论知识与实际应用相结合,提升解决复杂工程问题的能力。总体而言,该叶片病害检测系统涵盖了图像分析、特征融合、分类算法及界面开发等多个技术环节,为学习与掌握基于Matlab的智能检测技术提供了综合性实践案例。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值